package entity import ( "time" ) type Site struct { ID int64 `gorm:"primaryKey;autoIncrement;column:id"` Name string `gorm:"type:varchar(255);not null;column:name"` PartnerID int64 `gorm:"type:int;column:partner_id"` Image string `gorm:"type:varchar;column:image"` Address string `gorm:"type:varchar;column:address"` LocationLink string `gorm:"type:varchar;column:location_link"` Description string `gorm:"type:varchar;column:description"` Highlight string `gorm:"type:varchar;column:highlight"` ContactPerson string `gorm:"type:varchar;column:contact_person"` TnC string `gorm:"type:varchar;column:tnc"` AdditionalInfo string `gorm:"type:varchar;column:additional_info"` Status string `gorm:"type:varchar;column:status"` IsSeasonTicket bool `gorm:"type:bool;column:is_season_ticket"` IsDiscountActive bool `gorm:"type:bool;column:is_discount_active"` CreatedAt time.Time `gorm:"autoCreateTime;column:created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime;column:updated_at"` DeletedAt *time.Time `gorm:"column:deleted_at"` CreatedBy int64 `gorm:"type:int;column:created_by"` UpdatedBy int64 `gorm:"type:int;column:updated_by"` Products []Product `gorm:"foreignKey:SiteID;constraint:OnDelete:CASCADE;"` Latitude *float64 `json:"latitude"` Longitude *float64 `json:"longitude"` Region string `json:"region"` Regency string `json:"regency"` Distance float64 `json:"distance"` } type SiteSearch struct { PartnerID *int64 SiteID *int64 IsAdmin bool Search string Name string Limit int Offset int } type SiteList []*SiteDB type SiteDB struct { Site } func (s *Site) ToSiteDB() *SiteDB { return &SiteDB{ Site: *s, } } func (SiteDB) TableName() string { return "sites" } func (e *SiteDB) ToSite() *Site { return &Site{ ID: e.ID, Name: e.Name, PartnerID: e.PartnerID, Image: e.Image, Address: e.Address, LocationLink: e.LocationLink, Description: e.Description, Highlight: e.Highlight, ContactPerson: e.ContactPerson, TnC: e.TnC, AdditionalInfo: e.AdditionalInfo, Status: e.Status, IsSeasonTicket: e.IsSeasonTicket, IsDiscountActive: e.IsDiscountActive, CreatedAt: e.CreatedAt, UpdatedAt: e.UpdatedAt, DeletedAt: e.DeletedAt, CreatedBy: e.CreatedBy, UpdatedBy: e.UpdatedBy, Regency: e.Regency, Region: e.Region, Latitude: e.Latitude, Longitude: e.Longitude, Products: e.Products, } } func (s *SiteList) ToSiteList() []*Site { var sites []*Site for _, site := range *s { sites = append(sites, site.ToSite()) } return sites } func (o *SiteDB) ToUpdatedSite(updatedBy int64, req Site) { o.UpdatedBy = updatedBy if req.Name != "" { o.Name = req.Name } if req.PartnerID != 0 { o.PartnerID = req.PartnerID } if req.Image != "" { o.Image = req.Image } if req.Address != "" { o.Address = req.Address } if req.LocationLink != "" { o.LocationLink = req.LocationLink } if req.Description != "" { o.Description = req.Description } if req.Highlight != "" { o.Highlight = req.Highlight } if req.ContactPerson != "" { o.ContactPerson = req.ContactPerson } if req.TnC != "" { o.TnC = req.TnC } if req.AdditionalInfo != "" { o.AdditionalInfo = req.AdditionalInfo } if req.Status != "" { o.Status = req.Status } if req.IsSeasonTicket { o.IsSeasonTicket = req.IsSeasonTicket } if req.IsDiscountActive { o.IsDiscountActive = req.IsDiscountActive } } func (o *SiteDB) SetDeleted(updatedBy int64) { currentTime := time.Now() o.DeletedAt = ¤tTime o.UpdatedBy = updatedBy } type SiteCount struct { Count int `gorm:"type:int;column:count"` } type SiteCountDB struct { SiteCount } func (b *SiteCount) ToSiteCountDB() *SiteCountDB { return &SiteCountDB{ SiteCount: *b, } } func (e *SiteCountDB) ToSiteCount() *SiteCount { return &SiteCount{ Count: e.Count, } } type SiteProductInfo struct { SiteID int64 `json:"site_id"` SiteName string `json:"site_name"` PartnerID int64 `json:"partner_id"` Image string `json:"image"` Address string `json:"address"` LocationLink string `json:"location_link"` Description string `json:"description"` Highlight string `json:"highlight"` ContactPerson string `json:"contact_person"` TnC string `json:"tnc"` AdditionalInfo string `json:"additional_info"` Status string `json:"status"` IsSeasonTicket bool `json:"is_season_ticket"` IsDiscountActive bool `json:"is_discount_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` Latitude float64 `json:"latitude"` Longitude float64 `json:"longitude"` Distance float64 `json:"distance"` // Calculated field ProductID int64 `json:"product_id"` ProductName string `json:"product_name"` ProductType string `json:"product_type"` ProductPrice float64 `json:"product_price"` IsWeekendTicket bool `json:"is_weekend_ticket"` ProductStatus string `json:"product_status"` ProductDescription string `json:"product_description"` Region string `json:"region"` Regency string `json:"regency"` }