package mappers import ( "apskel-pos-be/internal/contract" "apskel-pos-be/internal/entities" "apskel-pos-be/internal/models" ) func ToRewardResponse(entity *entities.Reward) *models.RewardResponse { if entity == nil { return nil } var tnc *models.TermsAndConditionsStruct if entity.Tnc != nil { var sections []models.TncSectionStruct for _, section := range entity.Tnc.Sections { sections = append(sections, models.TncSectionStruct{ Title: section.Title, Rules: section.Rules, }) } tnc = &models.TermsAndConditionsStruct{ Sections: sections, ExpiryDays: entity.Tnc.ExpiryDays, } } var images *[]string if entity.Images != nil { imagesSlice := []string(*entity.Images) images = &imagesSlice } return &models.RewardResponse{ ID: entity.ID, Name: entity.Name, RewardType: string(entity.RewardType), CostPoints: entity.CostPoints, Stock: entity.Stock, MaxPerCustomer: entity.MaxPerCustomer, Tnc: tnc, Metadata: entity.Metadata, Images: images, CreatedAt: entity.CreatedAt, UpdatedAt: entity.UpdatedAt, } } func ToRewardEntity(request *contract.CreateRewardRequest) *entities.Reward { if request == nil { return nil } var tnc *entities.TermsAndConditions if request.Tnc != nil { var sections []entities.TncSection for _, section := range request.Tnc.Sections { sections = append(sections, entities.TncSection{ Title: section.Title, Rules: section.Rules, }) } tnc = &entities.TermsAndConditions{ Sections: sections, ExpiryDays: request.Tnc.ExpiryDays, } } var images *entities.StringSlice if request.Images != nil { stringSlice := entities.StringSlice(*request.Images) images = &stringSlice } return &entities.Reward{ Name: request.Name, RewardType: entities.RewardType(request.RewardType), CostPoints: request.CostPoints, Stock: request.Stock, MaxPerCustomer: request.MaxPerCustomer, Tnc: tnc, Metadata: request.Metadata, Images: images, } } func ToRewardEntityFromUpdate(request *contract.UpdateRewardRequest) *entities.Reward { if request == nil { return nil } var tnc *entities.TermsAndConditions if request.Tnc != nil { var sections []entities.TncSection for _, section := range request.Tnc.Sections { sections = append(sections, entities.TncSection{ Title: section.Title, Rules: section.Rules, }) } tnc = &entities.TermsAndConditions{ Sections: sections, ExpiryDays: request.Tnc.ExpiryDays, } } var images *entities.StringSlice if request.Images != nil { stringSlice := entities.StringSlice(*request.Images) images = &stringSlice } return &entities.Reward{ ID: request.ID, Name: request.Name, RewardType: entities.RewardType(request.RewardType), CostPoints: request.CostPoints, Stock: request.Stock, MaxPerCustomer: request.MaxPerCustomer, Tnc: tnc, Metadata: request.Metadata, Images: images, } } func ToRewardResponseSlice(entities []entities.Reward) []models.RewardResponse { if entities == nil { return nil } responses := make([]models.RewardResponse, len(entities)) for i, entity := range entities { responses[i] = *ToRewardResponse(&entity) } return responses }