jaecoo-be/app/module/campaigns/request/campaigns.request.go

140 lines
4.3 KiB
Go

package request
import (
"campaign-pool-be/app/database/entity"
"campaign-pool-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
}