qudoco-be/app/module/schedules/request/schedules.request.go

163 lines
5.4 KiB
Go
Raw Normal View History

2026-02-24 09:37:19 +00:00
package request
import (
"strconv"
"time"
"web-qudo-be/app/database/entity"
"web-qudo-be/utils/paginator"
)
type SchedulesGeneric interface {
ToEntity()
}
type SchedulesQueryRequest struct {
Title *string `json:"title"`
Description *string `json:"description"`
Location *string `json:"location"`
TypeId *int `json:"typeId"`
StartDate *time.Time `json:"startDate"`
EndDate *time.Time `json:"endDate"`
IsLiveStreaming *bool `json:"isLiveStreaming"`
Speakers *string `json:"speakers"`
StatusId *int `json:"statusId"`
CreatedById *uint `json:"createdById"`
Pagination *paginator.Pagination `json:"pagination"`
}
type SchedulesCreateRequest struct {
Title string `json:"title" validate:"required"`
Description string `json:"description" validate:"required"`
Location string `json:"location" validate:"required"`
IsLiveStreaming *bool `json:"isLiveStreaming"`
LiveStreamingUrl *string `json:"liveStreamingUrl"`
TypeId int `json:"typeId" validate:"required"`
StartDate *time.Time `json:"startDate"`
EndDate *time.Time `json:"endDate"`
StartTime *string `json:"startTime"`
EndTime *string `json:"endTime"`
Speakers string `json:"speakers" validate:"required"`
PosterImagePath *string `json:"posterImagePath"`
CreatedById *uint `json:"createdById"`
}
func (req SchedulesCreateRequest) ToEntity() *entity.Schedules {
return &entity.Schedules{
Title: req.Title,
Description: req.Description,
Location: req.Location,
IsLiveStreaming: req.IsLiveStreaming,
LiveStreamingUrl: req.LiveStreamingUrl,
TypeId: req.TypeId,
StartDate: req.StartDate,
EndDate: req.EndDate,
StartTime: req.StartTime,
EndTime: req.EndTime,
Speakers: req.Speakers,
PosterImagePath: req.PosterImagePath,
CreatedById: req.CreatedById,
}
}
type SchedulesUpdateRequest struct {
Title string `json:"title" validate:"required"`
Description string `json:"description" validate:"required"`
Location string `json:"location" validate:"required"`
IsLiveStreaming *bool `json:"isLiveStreaming"`
LiveStreamingUrl *string `json:"liveStreamingUrl"`
TypeId int `json:"typeId" validate:"required"`
StartDate *time.Time `json:"startDate"`
EndDate *time.Time `json:"endDate"`
StartTime *string `json:"startTime"`
EndTime *string `json:"endTime"`
Speakers string `json:"speakers" validate:"required"`
PosterImagePath *string `json:"posterImagePath"`
StatusId *int `json:"statusId"`
}
func (req SchedulesUpdateRequest) ToEntity() *entity.Schedules {
return &entity.Schedules{
Title: req.Title,
Description: req.Description,
Location: req.Location,
IsLiveStreaming: req.IsLiveStreaming,
LiveStreamingUrl: req.LiveStreamingUrl,
TypeId: req.TypeId,
StartDate: req.StartDate,
EndDate: req.EndDate,
StartTime: req.StartTime,
EndTime: req.EndTime,
Speakers: req.Speakers,
PosterImagePath: req.PosterImagePath,
StatusId: req.StatusId,
UpdatedAt: time.Now(),
}
}
type SchedulesQueryRequestContext struct {
Title string `json:"title"`
Description string `json:"description"`
Location string `json:"location"`
TypeId string `json:"typeId"`
StartDate string `json:"startDate"`
EndDate string `json:"endDate"`
IsLiveStreaming string `json:"isLiveStreaming"`
Speakers string `json:"speakers"`
StatusId string `json:"statusId"`
CreatedById string `json:"createdById"`
}
func (req SchedulesQueryRequestContext) ToParamRequest() SchedulesQueryRequest {
var request SchedulesQueryRequest
if title := req.Title; title != "" {
request.Title = &title
}
if description := req.Description; description != "" {
request.Description = &description
}
if location := req.Location; location != "" {
request.Location = &location
}
if typeIdStr := req.TypeId; typeIdStr != "" {
typeId, err := strconv.Atoi(typeIdStr)
if err == nil {
request.TypeId = &typeId
}
}
if startDateStr := req.StartDate; startDateStr != "" {
if startDate, err := time.Parse("2006-01-02", startDateStr); err == nil {
request.StartDate = &startDate
}
}
if endDateStr := req.EndDate; endDateStr != "" {
if endDate, err := time.Parse("2006-01-02", endDateStr); err == nil {
request.EndDate = &endDate
}
}
if isLiveStreamingStr := req.IsLiveStreaming; isLiveStreamingStr != "" {
isLiveStreaming, err := strconv.ParseBool(isLiveStreamingStr)
if err == nil {
request.IsLiveStreaming = &isLiveStreaming
}
}
if speakers := req.Speakers; speakers != "" {
request.Speakers = &speakers
}
if statusIdStr := req.StatusId; statusIdStr != "" {
statusId, err := strconv.Atoi(statusIdStr)
if err == nil {
request.StatusId = &statusId
}
}
if createdByIdStr := req.CreatedById; createdByIdStr != "" {
createdById, err := strconv.Atoi(createdByIdStr)
if err == nil {
createdByIdUint := uint(createdById)
request.CreatedById = &createdByIdUint
}
}
return request
}