From f5d41ab672dadc9ad1634c499016e885902aa8c5 Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Fri, 25 Jul 2025 19:01:21 -0700 Subject: [PATCH 1/3] openapi: extend Map with new fields --- openapi.yaml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 9c070e2..5e58560 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1580,6 +1580,13 @@ components: - Creator - GameID - Date + - CreatedAt + - UpdatedAt + - Submitter + - Thumbnail + - AssetVersion + - LoadCount + - Modes type: object properties: ID: @@ -1600,6 +1607,27 @@ components: type: integer format: int64 minimum: 0 + CreatedAt: + type: integer + format: int64 + UpdatedAt: + type: integer + format: int64 + Submitter: + type: integer + format: uint64 + Thumbnail: + type: integer + format: uint64 + AssetVersion: + type: integer + format: uint64 + LoadCount: + type: integer + format: uint32 + Modes: + type: integer + format: uint32 Mapfix: required: - ID -- 2.49.1 From 9ce8b75f0fcc31f5f698579d2cfd2cdbb06ef7ef Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Fri, 25 Jul 2025 19:16:21 -0700 Subject: [PATCH 2/3] openapi: generate --- pkg/api/oas_json_gen.go | 138 ++++++++++++++++++++++++++++++++++--- pkg/api/oas_schemas_gen.go | 87 +++++++++++++++++++++-- 2 files changed, 211 insertions(+), 14 deletions(-) diff --git a/pkg/api/oas_json_gen.go b/pkg/api/oas_json_gen.go index c90351c..11a8678 100644 --- a/pkg/api/oas_json_gen.go +++ b/pkg/api/oas_json_gen.go @@ -426,14 +426,49 @@ func (s *Map) encodeFields(e *jx.Encoder) { e.FieldStart("Date") e.Int64(s.Date) } + { + e.FieldStart("CreatedAt") + e.Int64(s.CreatedAt) + } + { + e.FieldStart("UpdatedAt") + e.Int64(s.UpdatedAt) + } + { + e.FieldStart("Submitter") + e.UInt64(s.Submitter) + } + { + e.FieldStart("Thumbnail") + e.UInt64(s.Thumbnail) + } + { + e.FieldStart("AssetVersion") + e.UInt64(s.AssetVersion) + } + { + e.FieldStart("LoadCount") + e.UInt32(s.LoadCount) + } + { + e.FieldStart("Modes") + e.UInt32(s.Modes) + } } -var jsonFieldsNameOfMap = [5]string{ - 0: "ID", - 1: "DisplayName", - 2: "Creator", - 3: "GameID", - 4: "Date", +var jsonFieldsNameOfMap = [12]string{ + 0: "ID", + 1: "DisplayName", + 2: "Creator", + 3: "GameID", + 4: "Date", + 5: "CreatedAt", + 6: "UpdatedAt", + 7: "Submitter", + 8: "Thumbnail", + 9: "AssetVersion", + 10: "LoadCount", + 11: "Modes", } // Decode decodes Map from json. @@ -441,7 +476,7 @@ func (s *Map) Decode(d *jx.Decoder) error { if s == nil { return errors.New("invalid: unable to decode Map to nil") } - var requiredBitSet [1]uint8 + var requiredBitSet [2]uint8 if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { switch string(k) { @@ -505,6 +540,90 @@ func (s *Map) Decode(d *jx.Decoder) error { }(); err != nil { return errors.Wrap(err, "decode field \"Date\"") } + case "CreatedAt": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + v, err := d.Int64() + s.CreatedAt = int64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"CreatedAt\"") + } + case "UpdatedAt": + requiredBitSet[0] |= 1 << 6 + if err := func() error { + v, err := d.Int64() + s.UpdatedAt = int64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"UpdatedAt\"") + } + case "Submitter": + requiredBitSet[0] |= 1 << 7 + if err := func() error { + v, err := d.UInt64() + s.Submitter = uint64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"Submitter\"") + } + case "Thumbnail": + requiredBitSet[1] |= 1 << 0 + if err := func() error { + v, err := d.UInt64() + s.Thumbnail = uint64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"Thumbnail\"") + } + case "AssetVersion": + requiredBitSet[1] |= 1 << 1 + if err := func() error { + v, err := d.UInt64() + s.AssetVersion = uint64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"AssetVersion\"") + } + case "LoadCount": + requiredBitSet[1] |= 1 << 2 + if err := func() error { + v, err := d.UInt32() + s.LoadCount = uint32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"LoadCount\"") + } + case "Modes": + requiredBitSet[1] |= 1 << 3 + if err := func() error { + v, err := d.UInt32() + s.Modes = uint32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"Modes\"") + } default: return d.Skip() } @@ -514,8 +633,9 @@ func (s *Map) Decode(d *jx.Decoder) error { } // Validate required fields. var failures []validate.FieldError - for i, mask := range [1]uint8{ - 0b00011111, + for i, mask := range [2]uint8{ + 0b11111111, + 0b00001111, } { if result := (requiredBitSet[i] & mask) ^ mask; result != 0 { // Mask only required fields and check equality to mask using XOR. diff --git a/pkg/api/oas_schemas_gen.go b/pkg/api/oas_schemas_gen.go index 35db0c6..0d4af90 100644 --- a/pkg/api/oas_schemas_gen.go +++ b/pkg/api/oas_schemas_gen.go @@ -320,11 +320,18 @@ func (s *ErrorStatusCode) SetResponse(val Error) { // Ref: #/components/schemas/Map type Map struct { - ID int64 `json:"ID"` - DisplayName string `json:"DisplayName"` - Creator string `json:"Creator"` - GameID int32 `json:"GameID"` - Date int64 `json:"Date"` + ID int64 `json:"ID"` + DisplayName string `json:"DisplayName"` + Creator string `json:"Creator"` + GameID int32 `json:"GameID"` + Date int64 `json:"Date"` + CreatedAt int64 `json:"CreatedAt"` + UpdatedAt int64 `json:"UpdatedAt"` + Submitter uint64 `json:"Submitter"` + Thumbnail uint64 `json:"Thumbnail"` + AssetVersion uint64 `json:"AssetVersion"` + LoadCount uint32 `json:"LoadCount"` + Modes uint32 `json:"Modes"` } // GetID returns the value of ID. @@ -352,6 +359,41 @@ func (s *Map) GetDate() int64 { return s.Date } +// GetCreatedAt returns the value of CreatedAt. +func (s *Map) GetCreatedAt() int64 { + return s.CreatedAt +} + +// GetUpdatedAt returns the value of UpdatedAt. +func (s *Map) GetUpdatedAt() int64 { + return s.UpdatedAt +} + +// GetSubmitter returns the value of Submitter. +func (s *Map) GetSubmitter() uint64 { + return s.Submitter +} + +// GetThumbnail returns the value of Thumbnail. +func (s *Map) GetThumbnail() uint64 { + return s.Thumbnail +} + +// GetAssetVersion returns the value of AssetVersion. +func (s *Map) GetAssetVersion() uint64 { + return s.AssetVersion +} + +// GetLoadCount returns the value of LoadCount. +func (s *Map) GetLoadCount() uint32 { + return s.LoadCount +} + +// GetModes returns the value of Modes. +func (s *Map) GetModes() uint32 { + return s.Modes +} + // SetID sets the value of ID. func (s *Map) SetID(val int64) { s.ID = val @@ -377,6 +419,41 @@ func (s *Map) SetDate(val int64) { s.Date = val } +// SetCreatedAt sets the value of CreatedAt. +func (s *Map) SetCreatedAt(val int64) { + s.CreatedAt = val +} + +// SetUpdatedAt sets the value of UpdatedAt. +func (s *Map) SetUpdatedAt(val int64) { + s.UpdatedAt = val +} + +// SetSubmitter sets the value of Submitter. +func (s *Map) SetSubmitter(val uint64) { + s.Submitter = val +} + +// SetThumbnail sets the value of Thumbnail. +func (s *Map) SetThumbnail(val uint64) { + s.Thumbnail = val +} + +// SetAssetVersion sets the value of AssetVersion. +func (s *Map) SetAssetVersion(val uint64) { + s.AssetVersion = val +} + +// SetLoadCount sets the value of LoadCount. +func (s *Map) SetLoadCount(val uint32) { + s.LoadCount = val +} + +// SetModes sets the value of Modes. +func (s *Map) SetModes(val uint32) { + s.Modes = val +} + // Ref: #/components/schemas/Mapfix type Mapfix struct { ID int64 `json:"ID"` -- 2.49.1 From d35c331b76c6323649329d5e653f93e8d29d6f4e Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Fri, 25 Jul 2025 19:19:39 -0700 Subject: [PATCH 3/3] submissions: fill out new fields --- pkg/web_api/maps.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pkg/web_api/maps.go b/pkg/web_api/maps.go index 0475992..1526692 100644 --- a/pkg/web_api/maps.go +++ b/pkg/web_api/maps.go @@ -69,6 +69,13 @@ func (svc *Service) ListMaps(ctx context.Context, params api.ListMapsParams) ([] Creator: item.Creator, GameID: int32(item.GameID), Date: item.Date.Unix(), + CreatedAt: item.CreatedAt.Unix(), + UpdatedAt: item.UpdatedAt.Unix(), + Submitter: item.Submitter, + Thumbnail: item.Thumbnail, + AssetVersion: item.AssetVersion, + LoadCount: item.LoadCount, + Modes: item.Modes, }) } @@ -92,6 +99,13 @@ func (svc *Service) GetMap(ctx context.Context, params api.GetMapParams) (*api.M Creator: mapResponse.Creator, GameID: int32(mapResponse.GameID), Date: mapResponse.Date.Unix(), + CreatedAt: mapResponse.CreatedAt.Unix(), + UpdatedAt: mapResponse.UpdatedAt.Unix(), + Submitter: mapResponse.Submitter, + Thumbnail: mapResponse.Thumbnail, + AssetVersion: mapResponse.AssetVersion, + LoadCount: mapResponse.LoadCount, + Modes: mapResponse.Modes, }, nil } -- 2.49.1