package request import ( "fmt" "time" "github.com/go-playground/validator/v10" "furtuna-be/internal/entity" ) type EventParam struct { Name string `form:"name" json:"name" example:"Ketua Umum"` Limit int `form:"limit" json:"limit" example:"10"` Offset int `form:"offset" json:"offset" example:"0"` } func (p *EventParam) ToEntity() entity.EventSearch { return entity.EventSearch{ Name: p.Name, Limit: p.Limit, Offset: p.Offset, } } type Event struct { Name string `json:"name" validate:"required"` Description string `json:"description"` StartDate string `json:"start_date" validate:"required"` StartTime string `json:"start_time"` EndDate string `json:"end_date" validate:"required"` EndTime string `json:"end_time"` Location string `json:"location" validate:"required"` Level string `json:"level" validate:"required"` Included []string `json:"included"` Price float64 `json:"price"` Paid bool `json:"paid"` Status entity.Status `json:"status"` LocationID int64 `json:"location_id"` startDateTime time.Time endDateTime time.Time } func (e *Event) ToEntity() *entity.Event { return &entity.Event{ Name: e.Name, Description: e.Description, StartDate: e.startDateTime, EndDate: e.endDateTime, Location: e.Location, Level: e.Level, Included: e.Included, Price: e.Price, Paid: e.Paid, LocationID: &e.LocationID, Status: e.Status, } } func (e *Event) Validate() error { validate := validator.New() if err := validate.Struct(e); err != nil { return err } startDateTimeStr := e.StartDate + "T" + e.StartTime + "Z" endDateTimeStr := e.EndDate + "T" + e.EndTime + "Z" startDateTime, err := time.Parse(time.RFC3339, startDateTimeStr) if err != nil { fmt.Println("Error parsing start date-time:", err) return err } e.startDateTime = startDateTime endDateTime, err := time.Parse(time.RFC3339, endDateTimeStr) if err != nil { fmt.Println("Error parsing end date-time:", err) return err } e.endDateTime = endDateTime return nil }