Add Campaign
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func ToCampaignResponse(entity *entities.Campaign) *models.CampaignResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var rules []models.CampaignRuleResponse
|
||||
if entity.Rules != nil {
|
||||
for _, rule := range entity.Rules {
|
||||
rules = append(rules, *ToCampaignRuleResponse(&rule))
|
||||
}
|
||||
}
|
||||
|
||||
return &models.CampaignResponse{
|
||||
ID: entity.ID,
|
||||
Name: entity.Name,
|
||||
Description: entity.Description,
|
||||
Type: string(entity.Type),
|
||||
StartDate: entity.StartDate,
|
||||
EndDate: entity.EndDate,
|
||||
IsActive: entity.IsActive,
|
||||
ShowOnApp: entity.ShowOnApp,
|
||||
Position: entity.Position,
|
||||
Metadata: entity.Metadata,
|
||||
Rules: rules,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func ToCampaignRuleResponse(entity *entities.CampaignRule) *models.CampaignRuleResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var rewardSubtype *string
|
||||
if entity.RewardSubtype != nil {
|
||||
subtype := string(*entity.RewardSubtype)
|
||||
rewardSubtype = &subtype
|
||||
}
|
||||
|
||||
return &models.CampaignRuleResponse{
|
||||
ID: entity.ID,
|
||||
CampaignID: entity.CampaignID,
|
||||
RuleType: string(entity.RuleType),
|
||||
ConditionValue: entity.ConditionValue,
|
||||
RewardType: string(entity.RewardType),
|
||||
RewardValue: entity.RewardValue,
|
||||
RewardSubtype: rewardSubtype,
|
||||
RewardRefID: entity.RewardRefID,
|
||||
Metadata: entity.Metadata,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func ToCampaignEntity(request *contract.CreateCampaignRequest) *entities.Campaign {
|
||||
if request == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var rules []entities.CampaignRule
|
||||
if request.Rules != nil {
|
||||
for _, rule := range request.Rules {
|
||||
// For create request, we'll use a temporary UUID that will be set by the repository
|
||||
rules = append(rules, *ToCampaignRuleEntity(&rule, uuid.Nil))
|
||||
}
|
||||
}
|
||||
|
||||
return &entities.Campaign{
|
||||
Name: request.Name,
|
||||
Description: request.Description,
|
||||
Type: entities.CampaignType(request.Type),
|
||||
StartDate: request.StartDate,
|
||||
EndDate: request.EndDate,
|
||||
IsActive: request.IsActive,
|
||||
ShowOnApp: request.ShowOnApp,
|
||||
Position: request.Position,
|
||||
Metadata: request.Metadata,
|
||||
Rules: rules,
|
||||
}
|
||||
}
|
||||
|
||||
func ToCampaignEntityFromUpdate(request *contract.UpdateCampaignRequest) *entities.Campaign {
|
||||
if request == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var rules []entities.CampaignRule
|
||||
if request.Rules != nil {
|
||||
for _, rule := range request.Rules {
|
||||
rules = append(rules, *ToCampaignRuleEntityFromUpdate(&rule, request.ID))
|
||||
}
|
||||
}
|
||||
|
||||
return &entities.Campaign{
|
||||
ID: request.ID,
|
||||
Name: request.Name,
|
||||
Description: request.Description,
|
||||
Type: entities.CampaignType(request.Type),
|
||||
StartDate: request.StartDate,
|
||||
EndDate: request.EndDate,
|
||||
IsActive: request.IsActive,
|
||||
ShowOnApp: request.ShowOnApp,
|
||||
Position: request.Position,
|
||||
Metadata: request.Metadata,
|
||||
Rules: rules,
|
||||
}
|
||||
}
|
||||
|
||||
func ToCampaignRuleEntity(request *contract.CampaignRuleStruct, campaignID uuid.UUID) *entities.CampaignRule {
|
||||
if request == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var rewardSubtype *entities.RewardSubtype
|
||||
if request.RewardSubtype != nil {
|
||||
subtype := entities.RewardSubtype(*request.RewardSubtype)
|
||||
rewardSubtype = &subtype
|
||||
}
|
||||
|
||||
return &entities.CampaignRule{
|
||||
CampaignID: campaignID,
|
||||
RuleType: entities.RuleType(request.RuleType),
|
||||
ConditionValue: request.ConditionValue,
|
||||
RewardType: entities.CampaignRewardType(request.RewardType),
|
||||
RewardValue: request.RewardValue,
|
||||
RewardSubtype: rewardSubtype,
|
||||
RewardRefID: request.RewardRefID,
|
||||
Metadata: request.Metadata,
|
||||
}
|
||||
}
|
||||
|
||||
func ToCampaignRuleEntityFromUpdate(request *contract.CampaignRuleStruct, campaignID uuid.UUID) *entities.CampaignRule {
|
||||
if request == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var rewardSubtype *entities.RewardSubtype
|
||||
if request.RewardSubtype != nil {
|
||||
subtype := entities.RewardSubtype(*request.RewardSubtype)
|
||||
rewardSubtype = &subtype
|
||||
}
|
||||
|
||||
return &entities.CampaignRule{
|
||||
CampaignID: campaignID,
|
||||
RuleType: entities.RuleType(request.RuleType),
|
||||
ConditionValue: request.ConditionValue,
|
||||
RewardType: entities.CampaignRewardType(request.RewardType),
|
||||
RewardValue: request.RewardValue,
|
||||
RewardSubtype: rewardSubtype,
|
||||
RewardRefID: request.RewardRefID,
|
||||
Metadata: request.Metadata,
|
||||
}
|
||||
}
|
||||
|
||||
func ToCampaignResponseSlice(entities []entities.Campaign) []models.CampaignResponse {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]models.CampaignResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
responses[i] = *ToCampaignResponse(&entity)
|
||||
}
|
||||
|
||||
return responses
|
||||
}
|
||||
|
||||
func ToCampaignRuleResponseSlice(entities []entities.CampaignRule) []models.CampaignRuleResponse {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]models.CampaignRuleResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
responses[i] = *ToCampaignRuleResponse(&entity)
|
||||
}
|
||||
|
||||
return responses
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
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 {
|
||||
images = entity.Images
|
||||
}
|
||||
|
||||
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 *[]string
|
||||
if request.Images != nil {
|
||||
images = request.Images
|
||||
}
|
||||
|
||||
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 *[]string
|
||||
if request.Images != nil {
|
||||
images = request.Images
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user