Add Customer users
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
package processor
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/mappers"
|
||||
"apskel-pos-be/internal/models"
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type UnitProcessorImpl struct {
|
||||
unitRepo UnitRepository
|
||||
}
|
||||
|
||||
func NewUnitProcessor(unitRepo UnitRepository) *UnitProcessorImpl {
|
||||
return &UnitProcessorImpl{
|
||||
unitRepo: unitRepo,
|
||||
}
|
||||
}
|
||||
|
||||
func (p *UnitProcessorImpl) CreateUnit(ctx context.Context, req *models.CreateUnitRequest) (*models.UnitResponse, error) {
|
||||
unit := &entities.Unit{
|
||||
ID: uuid.New(),
|
||||
OrganizationID: req.OrganizationID,
|
||||
OutletID: req.OutletID,
|
||||
Name: req.Name,
|
||||
Abbreviation: req.Abbreviation,
|
||||
IsActive: req.IsActive,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
}
|
||||
|
||||
err := p.unitRepo.Create(ctx, unit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
unitModel := mappers.MapUnitEntityToModel(unit)
|
||||
response := &models.UnitResponse{
|
||||
ID: unitModel.ID,
|
||||
OrganizationID: unitModel.OrganizationID,
|
||||
OutletID: unitModel.OutletID,
|
||||
Name: unitModel.Name,
|
||||
Abbreviation: unitModel.Abbreviation,
|
||||
IsActive: unitModel.IsActive,
|
||||
CreatedAt: unitModel.CreatedAt,
|
||||
UpdatedAt: unitModel.UpdatedAt,
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (p *UnitProcessorImpl) GetUnitByID(ctx context.Context, id uuid.UUID) (*models.UnitResponse, error) {
|
||||
organizationID := uuid.Nil // This should come from context
|
||||
|
||||
unit, err := p.unitRepo.GetByID(ctx, id, organizationID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
unitModel := mappers.MapUnitEntityToModel(unit)
|
||||
response := &models.UnitResponse{
|
||||
ID: unitModel.ID,
|
||||
OrganizationID: unitModel.OrganizationID,
|
||||
OutletID: unitModel.OutletID,
|
||||
Name: unitModel.Name,
|
||||
Abbreviation: unitModel.Abbreviation,
|
||||
IsActive: unitModel.IsActive,
|
||||
CreatedAt: unitModel.CreatedAt,
|
||||
UpdatedAt: unitModel.UpdatedAt,
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (p *UnitProcessorImpl) ListUnits(ctx context.Context, organizationID uuid.UUID, outletID *uuid.UUID, page, limit int, search string) (*models.PaginatedResponse[models.UnitResponse], error) {
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if limit < 1 {
|
||||
limit = 10
|
||||
}
|
||||
if limit > 100 {
|
||||
limit = 100
|
||||
}
|
||||
|
||||
units, total, err := p.unitRepo.GetAll(ctx, organizationID, outletID, page, limit, search)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
unitModels := mappers.MapUnitEntitiesToModels(units)
|
||||
unitResponses := make([]models.UnitResponse, len(unitModels))
|
||||
|
||||
for i, unitModel := range unitModels {
|
||||
unitResponses[i] = models.UnitResponse{
|
||||
ID: unitModel.ID,
|
||||
OrganizationID: unitModel.OrganizationID,
|
||||
OutletID: unitModel.OutletID,
|
||||
Name: unitModel.Name,
|
||||
Abbreviation: unitModel.Abbreviation,
|
||||
IsActive: unitModel.IsActive,
|
||||
CreatedAt: unitModel.CreatedAt,
|
||||
UpdatedAt: unitModel.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
paginatedResponse := &models.PaginatedResponse[models.UnitResponse]{
|
||||
Data: unitResponses,
|
||||
Pagination: models.Pagination{
|
||||
Page: page,
|
||||
Limit: limit,
|
||||
Total: int64(total),
|
||||
TotalPages: (total + limit - 1) / limit,
|
||||
},
|
||||
}
|
||||
|
||||
return paginatedResponse, nil
|
||||
}
|
||||
|
||||
func (p *UnitProcessorImpl) UpdateUnit(ctx context.Context, id uuid.UUID, req *models.UpdateUnitRequest) (*models.UnitResponse, error) {
|
||||
organizationID := uuid.Nil
|
||||
|
||||
existingUnit, err := p.unitRepo.GetByID(ctx, id, organizationID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
existingUnit.OutletID = req.OutletID
|
||||
existingUnit.Name = req.Name
|
||||
existingUnit.Abbreviation = req.Abbreviation
|
||||
existingUnit.IsActive = req.IsActive
|
||||
existingUnit.UpdatedAt = time.Now()
|
||||
|
||||
err = p.unitRepo.Update(ctx, existingUnit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
unitModel := mappers.MapUnitEntityToModel(existingUnit)
|
||||
response := &models.UnitResponse{
|
||||
ID: unitModel.ID,
|
||||
OrganizationID: unitModel.OrganizationID,
|
||||
OutletID: unitModel.OutletID,
|
||||
Name: unitModel.Name,
|
||||
Abbreviation: unitModel.Abbreviation,
|
||||
IsActive: unitModel.IsActive,
|
||||
CreatedAt: unitModel.CreatedAt,
|
||||
UpdatedAt: unitModel.UpdatedAt,
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (p *UnitProcessorImpl) DeleteUnit(ctx context.Context, id uuid.UUID) error {
|
||||
organizationID := uuid.Nil
|
||||
|
||||
err := p.unitRepo.Delete(ctx, id, organizationID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user