package dto import "git.yeij.top/AskaEth/Scoreboard/server/internal/domain" // Event 是 GET /api/events 与 snapshot.events 的线上结构(列表口径,不含组别与通道)。 // // 与 REST 的 eventDTO 逐字段对齐:scheduledAt/venue/remark 可空、sortOrder 必填, // 不能沿用 domain.Event 的 omitempty,否则前端会同时遇到「字段缺失」和「null」。 type Event struct { ID int64 `json:"id"` SportID int64 `json:"sportId"` Code string `json:"code"` Name string `json:"name"` EventType string `json:"eventType"` ResultMode string `json:"resultMode"` ResultType string `json:"resultType"` Compare string `json:"compare"` RecordEligible bool `json:"recordEligible"` Scored bool `json:"scored"` Multiplier float64 `json:"multiplier"` Status string `json:"status"` ScheduledAt *string `json:"scheduledAt"` Venue *string `json:"venue"` SortOrder int `json:"sortOrder"` Remark *string `json:"remark"` AvgMode string `json:"avgMode"` } // EventFromDomain 把领域小项转换成线上结构。 func EventFromDomain(e domain.Event) Event { return Event{ ID: e.ID, SportID: e.SportID, Code: e.Code, Name: e.Name, EventType: string(e.EventType), ResultMode: string(e.ResultMode), ResultType: string(e.ResultType), Compare: string(e.Compare), RecordEligible: e.RecordEligible, Scored: e.Scored, Multiplier: e.Multiplier, Status: string(e.Status), ScheduledAt: nilIfEmpty(e.ScheduledAt), Venue: nilIfEmpty(e.Venue), SortOrder: e.SortOrder, Remark: nilIfEmpty(e.Remark), AvgMode: string(e.AvgMode), } }