package request import ( "jaecoo-be/app/database/entity" "jaecoo-be/utils/paginator" "strconv" "time" ) type CampaignsQueryRequest struct { Title *string `json:"title"` CampaignTypeID *uint `json:"campaignTypeId"` Status *string `json:"status"` CreatorID *uint `json:"creatorId"` Pagination *paginator.Pagination `json:"pagination"` } type CampaignsCreateRequest struct { Title string `json:"title" validate:"required"` CampaignTypeID uint `json:"campaignTypeId" validate:"required"` StartDate *string `json:"startDate"` EndDate *string `json:"endDate"` MediaTypeSelected *string `json:"mediaTypeSelected"` MediaItemSelected *string `json:"mediaItemSelected"` Purpose *string `json:"purpose"` MediaPromote *bool `json:"mediaPromote"` Description *string `json:"description"` CreatorID *uint `json:"creatorId"` Status *string `json:"status"` } func (req CampaignsCreateRequest) ToEntity() *entity.Campaigns { campaign := &entity.Campaigns{ Title: req.Title, CampaignTypeID: req.CampaignTypeID, MediaTypeSelected: req.MediaTypeSelected, MediaItemSelected: req.MediaItemSelected, Purpose: req.Purpose, MediaPromote: req.MediaPromote, Description: req.Description, CreatedAt: time.Now(), UpdatedAt: time.Now(), } if req.StartDate != nil && *req.StartDate != "" { if startDate, err := time.Parse("2006-01-02", *req.StartDate); err == nil { campaign.StartDate = &startDate } } if req.EndDate != nil && *req.EndDate != "" { if endDate, err := time.Parse("2006-01-02", *req.EndDate); err == nil { campaign.EndDate = &endDate } } if req.Status != nil { campaign.Status = *req.Status } else { campaign.Status = "draft" } return campaign } type CampaignsUpdateRequest struct { Title string `json:"title" validate:"required"` CampaignTypeID uint `json:"campaignTypeId" validate:"required"` StartDate *string `json:"startDate"` EndDate *string `json:"endDate"` MediaTypeSelected *string `json:"mediaTypeSelected"` MediaItemSelected *string `json:"mediaItemSelected"` Purpose *string `json:"purpose"` MediaPromote *bool `json:"mediaPromote"` Description *string `json:"description"` Status *string `json:"status"` } func (req CampaignsUpdateRequest) ToEntity() *entity.Campaigns { campaign := &entity.Campaigns{ Title: req.Title, CampaignTypeID: req.CampaignTypeID, MediaTypeSelected: req.MediaTypeSelected, MediaItemSelected: req.MediaItemSelected, Purpose: req.Purpose, MediaPromote: req.MediaPromote, Description: req.Description, UpdatedAt: time.Now(), } if req.StartDate != nil && *req.StartDate != "" { if startDate, err := time.Parse("2006-01-02", *req.StartDate); err == nil { campaign.StartDate = &startDate } } if req.EndDate != nil && *req.EndDate != "" { if endDate, err := time.Parse("2006-01-02", *req.EndDate); err == nil { campaign.EndDate = &endDate } } if req.Status != nil { campaign.Status = *req.Status } return campaign } type CampaignsQueryRequestContext struct { Title string `json:"title"` CampaignTypeID string `json:"campaignTypeId"` Status string `json:"status"` CreatorID string `json:"creatorId"` } func (req CampaignsQueryRequestContext) ToParamRequest() CampaignsQueryRequest { var request CampaignsQueryRequest if title := req.Title; title != "" { request.Title = &title } if campaignTypeIDStr := req.CampaignTypeID; campaignTypeIDStr != "" { campaignTypeID, err := strconv.ParseUint(campaignTypeIDStr, 10, 32) if err == nil { campaignTypeIDUint := uint(campaignTypeID) request.CampaignTypeID = &campaignTypeIDUint } } if status := req.Status; status != "" { request.Status = &status } if creatorIDStr := req.CreatorID; creatorIDStr != "" { creatorID, err := strconv.ParseUint(creatorIDStr, 10, 32) if err == nil { creatorIDUint := uint(creatorID) request.CreatorID = &creatorIDUint } } return request }