diff --git a/fixtures/position_create.json b/fixtures/position_create.json index f3dce6a6..d95d0c1c 100644 --- a/fixtures/position_create.json +++ b/fixtures/position_create.json @@ -1,5 +1,5 @@ { - "oid": "alice-johnson-uuid", + "officer_id": "alice-johnson-uuid", "semester": "Spring 2024", "tier": 1 } diff --git a/fixtures/position_delete.json b/fixtures/position_delete.json index e6e7db92..d95d0c1c 100644 --- a/fixtures/position_delete.json +++ b/fixtures/position_delete.json @@ -1,5 +1,5 @@ { - "oid": "bob-smith-uuid", - "semester": "Fall 2023", - "tier": 2 + "officer_id": "alice-johnson-uuid", + "semester": "Spring 2024", + "tier": 1 } diff --git a/fixtures/position_update.json b/fixtures/position_update.json index 9193ad0c..bd57921a 100644 --- a/fixtures/position_update.json +++ b/fixtures/position_update.json @@ -1,14 +1,8 @@ { - "oid": "alice-johnson-uuid", + "officer_id": "alice-johnson-uuid", "semester": "Spring 2024", "tier": 1, "full_name": "Alice M. Johnson", - "title": { - "string": "President & Event Coordinator", - "valid": true - }, - "team": { - "string": "Leadership", - "valid": true - } + "title": "President & Event Coordinator", + "team": "Leadership" } diff --git a/fixtures/tier_create.json b/fixtures/tier_create.json index 91b0c0c9..ecc81cb5 100644 --- a/fixtures/tier_create.json +++ b/fixtures/tier_create.json @@ -1,15 +1,6 @@ { "tier": 1, - "title": { - "string": "President", - "valid": true - }, - "t_index": { - "int64": 100, - "valid": true - }, - "team": { - "string": "Executive", - "valid": true - } + "title": "President", + "t_index": 100, + "team": "Executive" } diff --git a/fixtures/tier_create_dev_team.json b/fixtures/tier_create_dev_team.json index f019a1fe..a3a377eb 100644 --- a/fixtures/tier_create_dev_team.json +++ b/fixtures/tier_create_dev_team.json @@ -1,15 +1,6 @@ { "tier": 3, - "title": { - "string": "Developer", - "valid": true - }, - "t_index": { - "int64": 300, - "valid": true - }, - "team": { - "string": "Dev Team", - "valid": true - } + "title": "Developer", + "t_index": 300, + "team": "Dev Team" } diff --git a/fixtures/tier_update.json b/fixtures/tier_update.json index ddfe4a39..6a1acf02 100644 --- a/fixtures/tier_update.json +++ b/fixtures/tier_update.json @@ -1,15 +1,6 @@ { "tier": 1, - "title": { - "string": "Club President", - "valid": true - }, - "t_index": { - "int64": 50, - "valid": true - }, - "team": { - "string": "Leadership", - "valid": true - } + "title": "Treasurer", + "t_index": 50, + "team": "Leadership" } diff --git a/internal/api/docs/docs.go b/internal/api/docs/docs.go index 20f97c5f..b7396e71 100644 --- a/internal/api/docs/docs.go +++ b/internal/api/docs/docs.go @@ -513,7 +513,7 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/dbmodels.Position" + "$ref": "#/definitions/dto.Position" } } }, @@ -547,7 +547,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.UpdatePositionParams" + "$ref": "#/definitions/dto.UpdatePosition" } } ], @@ -609,7 +609,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.CreatePositionParams" + "$ref": "#/definitions/dto.Position" } } ], @@ -660,7 +660,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.DeletePositionParams" + "$ref": "#/definitions/dto.DeletePosition" } } ], @@ -730,7 +730,7 @@ const docTemplate = `{ "200": { "description": "Position details", "schema": { - "$ref": "#/definitions/dbmodels.Position" + "$ref": "#/definitions/dto.Position" } }, "404": { @@ -773,7 +773,7 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/dbmodels.Tier" + "$ref": "#/definitions/dto.Tier" } } }, @@ -807,7 +807,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.CreateTierParams" + "$ref": "#/definitions/dto.Tier" } } ], @@ -840,7 +840,7 @@ const docTemplate = `{ } } }, - "/v1/board/tiers/{id}": { + "/v1/board/tiers/{tier}": { "get": { "description": "Retrieves a single tier from the database.", "consumes": [ @@ -857,7 +857,7 @@ const docTemplate = `{ { "type": "integer", "description": "Tier number", - "name": "id", + "name": "tier", "in": "path", "required": true } @@ -866,7 +866,7 @@ const docTemplate = `{ "200": { "description": "Tier details", "schema": { - "$ref": "#/definitions/dbmodels.Tier" + "$ref": "#/definitions/dto.Tier" } }, "400": { @@ -914,7 +914,7 @@ const docTemplate = `{ { "type": "integer", "description": "Tier number", - "name": "id", + "name": "tier", "in": "path", "required": true }, @@ -924,7 +924,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.UpdateTierParams" + "$ref": "#/definitions/dto.UpdateTier" } } ], @@ -983,7 +983,7 @@ const docTemplate = `{ { "type": "integer", "description": "Tier number", - "name": "id", + "name": "tier", "in": "path", "required": true } @@ -1319,196 +1319,149 @@ const docTemplate = `{ } } }, - "dbmodels.CreatePositionParams": { - "type": "object", - "properties": { - "fullName": { - "type": "string" - }, - "oid": { - "type": "string" - }, - "semester": { - "type": "string" - }, - "team": { - "$ref": "#/definitions/sql.NullString" - }, - "tier": { - "type": "integer", - "format": "int64" - }, - "title": { - "$ref": "#/definitions/sql.NullString" - } - } - }, - "dbmodels.CreateTierParams": { + "dbmodels.Event": { "type": "object", "properties": { - "team": { - "$ref": "#/definitions/sql.NullString" - }, - "tier": { + "endAt": { "type": "integer", "format": "int64" }, - "tindex": { - "$ref": "#/definitions/sql.NullInt64" - }, - "title": { - "$ref": "#/definitions/sql.NullString" - } - } - }, - "dbmodels.DeletePositionParams": { - "type": "object", - "properties": { - "oid": { + "host": { "type": "string" }, - "semester": { + "isAllDay": { + "type": "boolean" + }, + "location": { "type": "string" }, - "tier": { + "startAt": { "type": "integer", "format": "int64" + }, + "uuid": { + "type": "string" } } }, - "dbmodels.Event": { + "dbmodels.UpdateEventParams": { "type": "object", "properties": { "endAt": { - "type": "integer", - "format": "int64" + "$ref": "#/definitions/sql.NullInt64" }, "host": { - "type": "string" + "$ref": "#/definitions/sql.NullString" }, "isAllDay": { - "type": "boolean" + "$ref": "#/definitions/sql.NullBool" }, "location": { - "type": "string" + "$ref": "#/definitions/sql.NullString" }, "startAt": { - "type": "integer", - "format": "int64" + "$ref": "#/definitions/sql.NullInt64" }, "uuid": { "type": "string" } } }, - "dbmodels.Position": { + "dto.Announcement": { "type": "object", "properties": { - "fullName": { - "type": "string" + "announce_at": { + "type": "integer" }, - "oid": { + "discord_channel_id": { "type": "string" }, - "semester": { + "discord_message_id": { "type": "string" }, - "team": { - "$ref": "#/definitions/sql.NullString" - }, - "tier": { - "type": "integer", - "format": "int64" + "uuid": { + "type": "string" }, - "title": { - "$ref": "#/definitions/sql.NullString" + "visibility": { + "type": "string" } } }, - "dbmodels.Tier": { + "dto.DeletePosition": { "type": "object", "properties": { - "team": { - "$ref": "#/definitions/sql.NullString" - }, - "tier": { - "type": "integer", - "format": "int64" + "officer_id": { + "type": "string" }, - "tindex": { - "$ref": "#/definitions/sql.NullInt64" + "semester": { + "type": "string" }, - "title": { - "$ref": "#/definitions/sql.NullString" + "tier": { + "type": "integer" } } }, - "dbmodels.UpdateEventParams": { + "dto.Officer": { "type": "object", "properties": { - "endAt": { - "$ref": "#/definitions/sql.NullInt64" - }, - "host": { - "$ref": "#/definitions/sql.NullString" + "discord": { + "type": "string" }, - "isAllDay": { - "$ref": "#/definitions/sql.NullBool" + "full_name": { + "type": "string" }, - "location": { - "$ref": "#/definitions/sql.NullString" + "github": { + "type": "string" }, - "startAt": { - "$ref": "#/definitions/sql.NullInt64" + "picture": { + "type": "string" }, "uuid": { "type": "string" } } }, - "dbmodels.UpdatePositionParams": { + "dto.Position": { "type": "object", "properties": { - "fullName": { + "full_name": { "type": "string" }, - "oid": { + "officer_id": { "type": "string" }, "semester": { "type": "string" }, "team": { - "$ref": "#/definitions/sql.NullString" + "type": "string" }, "tier": { - "type": "integer", - "format": "int64" + "type": "integer" }, "title": { - "$ref": "#/definitions/sql.NullString" + "type": "string" } } }, - "dbmodels.UpdateTierParams": { + "dto.Tier": { "type": "object", "properties": { + "t_index": { + "type": "integer" + }, "team": { - "$ref": "#/definitions/sql.NullString" + "type": "string" }, "tier": { - "type": "integer", - "format": "int64" - }, - "tindex": { - "$ref": "#/definitions/sql.NullInt64" + "type": "integer" }, "title": { - "$ref": "#/definitions/sql.NullString" + "type": "string" } } }, - "dto.Announcement": { + "dto.UpdateAnnouncement": { "type": "object", "properties": { "announce_at": { @@ -1528,7 +1481,7 @@ const docTemplate = `{ } } }, - "dto.Officer": { + "dto.UpdateOfficer": { "type": "object", "properties": { "discord": { @@ -1542,45 +1495,42 @@ const docTemplate = `{ }, "picture": { "type": "string" - }, - "uuid": { - "type": "string" } } }, - "dto.UpdateAnnouncement": { + "dto.UpdatePosition": { "type": "object", "properties": { - "announce_at": { - "type": "integer" + "full_name": { + "type": "string" }, - "discord_channel_id": { + "officer_id": { "type": "string" }, - "discord_message_id": { + "semester": { "type": "string" }, - "uuid": { + "team": { "type": "string" }, - "visibility": { + "tier": { + "type": "integer" + }, + "title": { "type": "string" } } }, - "dto.UpdateOfficer": { + "dto.UpdateTier": { "type": "object", "properties": { - "discord": { - "type": "string" - }, - "full_name": { - "type": "string" + "t_index": { + "type": "integer" }, - "github": { + "team": { "type": "string" }, - "picture": { + "title": { "type": "string" } } diff --git a/internal/api/docs/swagger.json b/internal/api/docs/swagger.json index 7063bc9b..7d99281a 100644 --- a/internal/api/docs/swagger.json +++ b/internal/api/docs/swagger.json @@ -502,7 +502,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/dbmodels.Position" + "$ref": "#/definitions/dto.Position" } } }, @@ -536,7 +536,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.UpdatePositionParams" + "$ref": "#/definitions/dto.UpdatePosition" } } ], @@ -598,7 +598,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.CreatePositionParams" + "$ref": "#/definitions/dto.Position" } } ], @@ -649,7 +649,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.DeletePositionParams" + "$ref": "#/definitions/dto.DeletePosition" } } ], @@ -719,7 +719,7 @@ "200": { "description": "Position details", "schema": { - "$ref": "#/definitions/dbmodels.Position" + "$ref": "#/definitions/dto.Position" } }, "404": { @@ -762,7 +762,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/dbmodels.Tier" + "$ref": "#/definitions/dto.Tier" } } }, @@ -796,7 +796,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.CreateTierParams" + "$ref": "#/definitions/dto.Tier" } } ], @@ -829,7 +829,7 @@ } } }, - "/v1/board/tiers/{id}": { + "/v1/board/tiers/{tier}": { "get": { "description": "Retrieves a single tier from the database.", "consumes": [ @@ -846,7 +846,7 @@ { "type": "integer", "description": "Tier number", - "name": "id", + "name": "tier", "in": "path", "required": true } @@ -855,7 +855,7 @@ "200": { "description": "Tier details", "schema": { - "$ref": "#/definitions/dbmodels.Tier" + "$ref": "#/definitions/dto.Tier" } }, "400": { @@ -903,7 +903,7 @@ { "type": "integer", "description": "Tier number", - "name": "id", + "name": "tier", "in": "path", "required": true }, @@ -913,7 +913,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dbmodels.UpdateTierParams" + "$ref": "#/definitions/dto.UpdateTier" } } ], @@ -972,7 +972,7 @@ { "type": "integer", "description": "Tier number", - "name": "id", + "name": "tier", "in": "path", "required": true } @@ -1308,196 +1308,149 @@ } } }, - "dbmodels.CreatePositionParams": { - "type": "object", - "properties": { - "fullName": { - "type": "string" - }, - "oid": { - "type": "string" - }, - "semester": { - "type": "string" - }, - "team": { - "$ref": "#/definitions/sql.NullString" - }, - "tier": { - "type": "integer", - "format": "int64" - }, - "title": { - "$ref": "#/definitions/sql.NullString" - } - } - }, - "dbmodels.CreateTierParams": { + "dbmodels.Event": { "type": "object", "properties": { - "team": { - "$ref": "#/definitions/sql.NullString" - }, - "tier": { + "endAt": { "type": "integer", "format": "int64" }, - "tindex": { - "$ref": "#/definitions/sql.NullInt64" - }, - "title": { - "$ref": "#/definitions/sql.NullString" - } - } - }, - "dbmodels.DeletePositionParams": { - "type": "object", - "properties": { - "oid": { + "host": { "type": "string" }, - "semester": { + "isAllDay": { + "type": "boolean" + }, + "location": { "type": "string" }, - "tier": { + "startAt": { "type": "integer", "format": "int64" + }, + "uuid": { + "type": "string" } } }, - "dbmodels.Event": { + "dbmodels.UpdateEventParams": { "type": "object", "properties": { "endAt": { - "type": "integer", - "format": "int64" + "$ref": "#/definitions/sql.NullInt64" }, "host": { - "type": "string" + "$ref": "#/definitions/sql.NullString" }, "isAllDay": { - "type": "boolean" + "$ref": "#/definitions/sql.NullBool" }, "location": { - "type": "string" + "$ref": "#/definitions/sql.NullString" }, "startAt": { - "type": "integer", - "format": "int64" + "$ref": "#/definitions/sql.NullInt64" }, "uuid": { "type": "string" } } }, - "dbmodels.Position": { + "dto.Announcement": { "type": "object", "properties": { - "fullName": { - "type": "string" + "announce_at": { + "type": "integer" }, - "oid": { + "discord_channel_id": { "type": "string" }, - "semester": { + "discord_message_id": { "type": "string" }, - "team": { - "$ref": "#/definitions/sql.NullString" - }, - "tier": { - "type": "integer", - "format": "int64" + "uuid": { + "type": "string" }, - "title": { - "$ref": "#/definitions/sql.NullString" + "visibility": { + "type": "string" } } }, - "dbmodels.Tier": { + "dto.DeletePosition": { "type": "object", "properties": { - "team": { - "$ref": "#/definitions/sql.NullString" - }, - "tier": { - "type": "integer", - "format": "int64" + "officer_id": { + "type": "string" }, - "tindex": { - "$ref": "#/definitions/sql.NullInt64" + "semester": { + "type": "string" }, - "title": { - "$ref": "#/definitions/sql.NullString" + "tier": { + "type": "integer" } } }, - "dbmodels.UpdateEventParams": { + "dto.Officer": { "type": "object", "properties": { - "endAt": { - "$ref": "#/definitions/sql.NullInt64" - }, - "host": { - "$ref": "#/definitions/sql.NullString" + "discord": { + "type": "string" }, - "isAllDay": { - "$ref": "#/definitions/sql.NullBool" + "full_name": { + "type": "string" }, - "location": { - "$ref": "#/definitions/sql.NullString" + "github": { + "type": "string" }, - "startAt": { - "$ref": "#/definitions/sql.NullInt64" + "picture": { + "type": "string" }, "uuid": { "type": "string" } } }, - "dbmodels.UpdatePositionParams": { + "dto.Position": { "type": "object", "properties": { - "fullName": { + "full_name": { "type": "string" }, - "oid": { + "officer_id": { "type": "string" }, "semester": { "type": "string" }, "team": { - "$ref": "#/definitions/sql.NullString" + "type": "string" }, "tier": { - "type": "integer", - "format": "int64" + "type": "integer" }, "title": { - "$ref": "#/definitions/sql.NullString" + "type": "string" } } }, - "dbmodels.UpdateTierParams": { + "dto.Tier": { "type": "object", "properties": { + "t_index": { + "type": "integer" + }, "team": { - "$ref": "#/definitions/sql.NullString" + "type": "string" }, "tier": { - "type": "integer", - "format": "int64" - }, - "tindex": { - "$ref": "#/definitions/sql.NullInt64" + "type": "integer" }, "title": { - "$ref": "#/definitions/sql.NullString" + "type": "string" } } }, - "dto.Announcement": { + "dto.UpdateAnnouncement": { "type": "object", "properties": { "announce_at": { @@ -1517,7 +1470,7 @@ } } }, - "dto.Officer": { + "dto.UpdateOfficer": { "type": "object", "properties": { "discord": { @@ -1531,45 +1484,42 @@ }, "picture": { "type": "string" - }, - "uuid": { - "type": "string" } } }, - "dto.UpdateAnnouncement": { + "dto.UpdatePosition": { "type": "object", "properties": { - "announce_at": { - "type": "integer" + "full_name": { + "type": "string" }, - "discord_channel_id": { + "officer_id": { "type": "string" }, - "discord_message_id": { + "semester": { "type": "string" }, - "uuid": { + "team": { "type": "string" }, - "visibility": { + "tier": { + "type": "integer" + }, + "title": { "type": "string" } } }, - "dto.UpdateOfficer": { + "dto.UpdateTier": { "type": "object", "properties": { - "discord": { - "type": "string" - }, - "full_name": { - "type": "string" + "t_index": { + "type": "integer" }, - "github": { + "team": { "type": "string" }, - "picture": { + "title": { "type": "string" } } diff --git a/internal/api/docs/swagger.yaml b/internal/api/docs/swagger.yaml index f8ab2102..6c73f9cb 100644 --- a/internal/api/docs/swagger.yaml +++ b/internal/api/docs/swagger.yaml @@ -16,44 +16,6 @@ definitions: uuid: type: string type: object - dbmodels.CreatePositionParams: - properties: - fullName: - type: string - oid: - type: string - semester: - type: string - team: - $ref: '#/definitions/sql.NullString' - tier: - format: int64 - type: integer - title: - $ref: '#/definitions/sql.NullString' - type: object - dbmodels.CreateTierParams: - properties: - team: - $ref: '#/definitions/sql.NullString' - tier: - format: int64 - type: integer - tindex: - $ref: '#/definitions/sql.NullInt64' - title: - $ref: '#/definitions/sql.NullString' - type: object - dbmodels.DeletePositionParams: - properties: - oid: - type: string - semester: - type: string - tier: - format: int64 - type: integer - type: object dbmodels.Event: properties: endAt: @@ -71,34 +33,6 @@ definitions: uuid: type: string type: object - dbmodels.Position: - properties: - fullName: - type: string - oid: - type: string - semester: - type: string - team: - $ref: '#/definitions/sql.NullString' - tier: - format: int64 - type: integer - title: - $ref: '#/definitions/sql.NullString' - type: object - dbmodels.Tier: - properties: - team: - $ref: '#/definitions/sql.NullString' - tier: - format: int64 - type: integer - tindex: - $ref: '#/definitions/sql.NullInt64' - title: - $ref: '#/definitions/sql.NullString' - type: object dbmodels.UpdateEventParams: properties: endAt: @@ -114,34 +48,6 @@ definitions: uuid: type: string type: object - dbmodels.UpdatePositionParams: - properties: - fullName: - type: string - oid: - type: string - semester: - type: string - team: - $ref: '#/definitions/sql.NullString' - tier: - format: int64 - type: integer - title: - $ref: '#/definitions/sql.NullString' - type: object - dbmodels.UpdateTierParams: - properties: - team: - $ref: '#/definitions/sql.NullString' - tier: - format: int64 - type: integer - tindex: - $ref: '#/definitions/sql.NullInt64' - title: - $ref: '#/definitions/sql.NullString' - type: object dto.Announcement: properties: announce_at: @@ -155,6 +61,15 @@ definitions: visibility: type: string type: object + dto.DeletePosition: + properties: + officer_id: + type: string + semester: + type: string + tier: + type: integer + type: object dto.Officer: properties: discord: @@ -168,6 +83,32 @@ definitions: uuid: type: string type: object + dto.Position: + properties: + full_name: + type: string + officer_id: + type: string + semester: + type: string + team: + type: string + tier: + type: integer + title: + type: string + type: object + dto.Tier: + properties: + t_index: + type: integer + team: + type: string + tier: + type: integer + title: + type: string + type: object dto.UpdateAnnouncement: properties: announce_at: @@ -192,6 +133,30 @@ definitions: picture: type: string type: object + dto.UpdatePosition: + properties: + full_name: + type: string + officer_id: + type: string + semester: + type: string + team: + type: string + tier: + type: integer + title: + type: string + type: object + dto.UpdateTier: + properties: + t_index: + type: integer + team: + type: string + title: + type: string + type: object sql.NullBool: properties: bool: @@ -550,7 +515,7 @@ paths: name: body required: true schema: - $ref: '#/definitions/dbmodels.DeletePositionParams' + $ref: '#/definitions/dto.DeletePosition' produces: - application/json responses: @@ -592,7 +557,7 @@ paths: description: List of positions schema: items: - $ref: '#/definitions/dbmodels.Position' + $ref: '#/definitions/dto.Position' type: array "500": description: Internal Server Error @@ -613,7 +578,7 @@ paths: name: body required: true schema: - $ref: '#/definitions/dbmodels.CreatePositionParams' + $ref: '#/definitions/dto.Position' produces: - application/json responses: @@ -647,7 +612,7 @@ paths: name: body required: true schema: - $ref: '#/definitions/dbmodels.UpdatePositionParams' + $ref: '#/definitions/dto.UpdatePosition' produces: - application/json responses: @@ -695,7 +660,7 @@ paths: "200": description: Position details schema: - $ref: '#/definitions/dbmodels.Position' + $ref: '#/definitions/dto.Position' "404": description: Not Found schema: @@ -723,7 +688,7 @@ paths: description: List of tiers schema: items: - $ref: '#/definitions/dbmodels.Tier' + $ref: '#/definitions/dto.Tier' type: array "500": description: Internal Server Error @@ -744,7 +709,7 @@ paths: name: body required: true schema: - $ref: '#/definitions/dbmodels.CreateTierParams' + $ref: '#/definitions/dto.Tier' produces: - application/json responses: @@ -768,7 +733,7 @@ paths: summary: Creates a new tier tags: - Board - /v1/board/tiers/{id}: + /v1/board/tiers/{tier}: delete: consumes: - application/json @@ -776,7 +741,7 @@ paths: parameters: - description: Tier number in: path - name: id + name: tier required: true type: integer produces: @@ -816,7 +781,7 @@ paths: parameters: - description: Tier number in: path - name: id + name: tier required: true type: integer produces: @@ -825,7 +790,7 @@ paths: "200": description: Tier details schema: - $ref: '#/definitions/dbmodels.Tier' + $ref: '#/definitions/dto.Tier' "400": description: Bad Request schema: @@ -854,7 +819,7 @@ paths: parameters: - description: Tier number in: path - name: id + name: tier required: true type: integer - description: Updated tier data @@ -862,7 +827,7 @@ paths: name: body required: true schema: - $ref: '#/definitions/dbmodels.UpdateTierParams' + $ref: '#/definitions/dto.UpdateTier' produces: - application/json responses: diff --git a/internal/api/handlers/board.go b/internal/api/handlers/board.go index bd0d43bf..0ef01920 100644 --- a/internal/api/handlers/board.go +++ b/internal/api/handlers/board.go @@ -3,11 +3,11 @@ package handlers import ( + "log" "net/http" "strconv" "github.com/acmcsufoss/api.acmcsuf.com/internal/api/services" - "github.com/acmcsufoss/api.acmcsuf.com/internal/api/store/dbmodels" "github.com/acmcsufoss/api.acmcsuf.com/internal/dto" "github.com/gin-gonic/gin" ) @@ -145,7 +145,6 @@ func (h *BoardHandler) UpdateOfficer(c *gin.Context) { } domainModel := body.ToDomain() - domainModel.Uuid = id if err := h.boardService.UpdateOfficer(ctx, id, domainModel); err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "Failed to update officer. " + err.Error(), @@ -194,7 +193,7 @@ func (h *BoardHandler) DeleteOfficer(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Success 200 {array} dbmodels.Tier "List of tiers" +// @Success 200 {array} dto.Tier "List of tiers" // @Failure 500 {object} map[string]string // @Router /v1/board/tiers [get] func (h *BoardHandler) GetTiers(c *gin.Context) { @@ -208,7 +207,11 @@ func (h *BoardHandler) GetTiers(c *gin.Context) { return } - c.JSON(http.StatusOK, tiers) + dtoTiers := make([]dto.Tier, len(tiers)) + for i, tier := range tiers { + dtoTiers[i] = dto.TierDomainToDto(&tier) + } + c.JSON(http.StatusOK, dtoTiers) } // GetTier godoc @@ -218,23 +221,24 @@ func (h *BoardHandler) GetTiers(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Param id path int true "Tier number" -// @Success 200 {object} dbmodels.Tier "Tier details" +// @Param tier path int true "Tier number" +// @Success 200 {object} dto.Tier "Tier details" // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string // @Failure 500 {object} map[string]string -// @Router /v1/board/tiers/{id} [get] +// @Router /v1/board/tiers/{tier} [get] func (h *BoardHandler) GetTier(c *gin.Context) { ctx := c.Request.Context() - id, err := strconv.Atoi(c.Param("id")) + tierName, err := strconv.ParseInt(c.Param("tier"), 10, 64) if err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid tier number", }) + log.Println(err) return } - tier, err := h.boardService.GetTier(ctx, int64(id)) + tier, err := h.boardService.GetTier(ctx, tierName) if err != nil { if err.Error() == "sql: no rows in result set" { c.JSON(http.StatusNotFound, gin.H{ @@ -248,7 +252,7 @@ func (h *BoardHandler) GetTier(c *gin.Context) { return } - c.JSON(http.StatusOK, tier) + c.JSON(http.StatusOK, dto.TierDomainToDto(&tier)) } // CreateTier godoc @@ -258,23 +262,23 @@ func (h *BoardHandler) GetTier(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Param body body dbmodels.CreateTierParams true "Tier data" +// @Param body body dto.Tier true "Tier data" // @Success 200 {object} map[string]interface{} "Success message with tier number" // @Failure 400 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /v1/board/tiers [post] func (h *BoardHandler) CreateTier(c *gin.Context) { ctx := c.Request.Context() - var params dbmodels.CreateTierParams - - if err := c.ShouldBindJSON(¶ms); err != nil { + var body dto.Tier + if err := c.ShouldBindJSON(&body); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid request body. " + err.Error(), }) return } - if err := h.boardService.CreateTier(ctx, params); err != nil { + tier, err := h.boardService.CreateTier(ctx, body.ToDomain()) + if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "Failed to create tier. " + err.Error(), }) @@ -283,7 +287,7 @@ func (h *BoardHandler) CreateTier(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Tier created successfully", - "tier": params.Tier, + "tier": dto.TierDomainToDto(&tier), }) } @@ -294,17 +298,17 @@ func (h *BoardHandler) CreateTier(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Param id path int true "Tier number" -// @Param body body dbmodels.UpdateTierParams true "Updated tier data" +// @Param tier path int true "Tier number" +// @Param body body dto.UpdateTier true "Updated tier data" // @Success 200 {object} map[string]string "Success message" // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string // @Failure 500 {object} map[string]string -// @Router /v1/board/tiers/{id} [put] +// @Router /v1/board/tiers/{tier} [put] func (h *BoardHandler) UpdateTier(c *gin.Context) { ctx := c.Request.Context() - var params dbmodels.UpdateTierParams - id, err := strconv.Atoi(c.Param("id")) + var body dto.UpdateTier + tierName, err := strconv.ParseInt(c.Param("tier"), 10, 64) if err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid tier number", @@ -312,16 +316,14 @@ func (h *BoardHandler) UpdateTier(c *gin.Context) { return } - if err := c.ShouldBindJSON(¶ms); err != nil { + if err := c.ShouldBindJSON(&body); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid request body. " + err.Error(), }) return } - params.Tier = int64(id) - - if err := h.boardService.UpdateTier(ctx, params); err != nil { + if err := h.boardService.UpdateTier(ctx, tierName, body.ToDomain()); err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "Failed to update tier. " + err.Error(), }) @@ -330,7 +332,7 @@ func (h *BoardHandler) UpdateTier(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Tier updated successfully", - "tier": params.Tier, + "tier": tierName, }) } @@ -341,15 +343,15 @@ func (h *BoardHandler) UpdateTier(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Param id path int true "Tier number" +// @Param tier path int true "Tier number" // @Success 200 {object} map[string]string "Success message" // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string // @Failure 500 {object} map[string]string -// @Router /v1/board/tiers/{id} [delete] +// @Router /v1/board/tiers/{tier} [delete] func (h *BoardHandler) DeleteTier(c *gin.Context) { ctx := c.Request.Context() - id, err := strconv.Atoi(c.Param("id")) + tierName, err := strconv.ParseInt(c.Param("tier"), 10, 64) if err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid tier number", @@ -357,7 +359,7 @@ func (h *BoardHandler) DeleteTier(c *gin.Context) { return } - if err := h.boardService.DeleteTier(ctx, int64(id)); err != nil { + if err := h.boardService.DeleteTier(ctx, tierName); err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "Failed to delete tier", }) @@ -376,7 +378,7 @@ func (h *BoardHandler) DeleteTier(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Success 200 {array} dbmodels.Position "List of positions" +// @Success 200 {array} dto.Position "List of positions" // @Failure 500 {object} map[string]string // @Router /v1/board/positions [get] func (h *BoardHandler) GetPositions(c *gin.Context) { @@ -390,7 +392,11 @@ func (h *BoardHandler) GetPositions(c *gin.Context) { return } - c.JSON(http.StatusOK, positions) + dtoPositions := make([]dto.Position, len(positions)) + for i, pos := range positions { + dtoPositions[i] = dto.PositionDomainToDto(&pos) + } + c.JSON(http.StatusOK, dtoPositions) } // GetPosition godoc @@ -401,7 +407,7 @@ func (h *BoardHandler) GetPositions(c *gin.Context) { // @Accept json // @Produce json // @Param id path string true "Officer full name" -// @Success 200 {object} dbmodels.Position "Position details" +// @Success 200 {object} dto.Position "Position details" // @Failure 404 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /v1/board/positions/{id} [get] @@ -424,7 +430,7 @@ func (h *BoardHandler) GetPosition(c *gin.Context) { return } - c.JSON(http.StatusOK, position) + c.JSON(http.StatusOK, dto.PositionDomainToDto(&position)) } // CreatePosition godoc @@ -434,23 +440,23 @@ func (h *BoardHandler) GetPosition(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Param body body dbmodels.CreatePositionParams true "Position data" +// @Param body body dto.Position true "Position data" // @Success 200 {object} map[string]interface{} "Success message" // @Failure 400 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /v1/board/positions [post] func (h *BoardHandler) CreatePosition(c *gin.Context) { ctx := c.Request.Context() - var params dbmodels.CreatePositionParams - - if err := c.ShouldBindJSON(¶ms); err != nil { + var body dto.Position + if err := c.ShouldBindJSON(&body); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid request body. " + err.Error(), }) return } - if err := h.boardService.CreatePosition(ctx, params); err != nil { + position, err := h.boardService.CreatePosition(ctx, body.ToDomain()) + if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "Failed to create position. " + err.Error(), }) @@ -459,9 +465,7 @@ func (h *BoardHandler) CreatePosition(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Position created successfully", - "oid": params.Oid, - "semester": params.Semester, - "tier": params.Tier, + "position": dto.PositionDomainToDto(&position), }) } @@ -472,7 +476,7 @@ func (h *BoardHandler) CreatePosition(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Param body body dbmodels.UpdatePositionParams true "Updated position data (must include oid, semester, tier)" +// @Param body body dto.UpdatePosition true "Updated position data (must include oid, semester, tier)" // @Success 200 {object} map[string]string "Success message" // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string @@ -480,16 +484,15 @@ func (h *BoardHandler) CreatePosition(c *gin.Context) { // @Router /v1/board/positions [put] func (h *BoardHandler) UpdatePosition(c *gin.Context) { ctx := c.Request.Context() - var params dbmodels.UpdatePositionParams - - if err := c.ShouldBindJSON(¶ms); err != nil { + var body dto.UpdatePosition + if err := c.ShouldBindJSON(&body); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid request body. " + err.Error(), }) return } - if err := h.boardService.UpdatePosition(ctx, params); err != nil { + if err := h.boardService.UpdatePosition(ctx, body.ToDomain()); err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "Failed to update position. " + err.Error(), }) @@ -497,10 +500,7 @@ func (h *BoardHandler) UpdatePosition(c *gin.Context) { } c.JSON(http.StatusOK, gin.H{ - "message": "Position updated successfully", - "oid": params.Oid, - "semester": params.Semester, - "tier": params.Tier, + "message": "Position updated successfully", }) } @@ -511,7 +511,7 @@ func (h *BoardHandler) UpdatePosition(c *gin.Context) { // @Tags Board // @Accept json // @Produce json -// @Param body body dbmodels.DeletePositionParams true "Position identifier" +// @Param body body dto.DeletePosition true "Position identifier" // @Success 200 {object} map[string]string "Success message" // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string @@ -519,16 +519,15 @@ func (h *BoardHandler) UpdatePosition(c *gin.Context) { // @Router /v1/board/positions [delete] func (h *BoardHandler) DeletePosition(c *gin.Context) { ctx := c.Request.Context() - var params dbmodels.DeletePositionParams - - if err := c.ShouldBindJSON(¶ms); err != nil { + var body dto.DeletePosition + if err := c.ShouldBindJSON(&body); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid request body. " + err.Error(), }) return } - if err := h.boardService.DeletePosition(ctx, params); err != nil { + if err := h.boardService.DeletePosition(ctx, body.ToDomain()); err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "Failed to delete position", }) diff --git a/internal/api/routes/v1.go b/internal/api/routes/v1.go index 48f13c6b..beb7e3ff 100644 --- a/internal/api/routes/v1.go +++ b/internal/api/routes/v1.go @@ -55,7 +55,7 @@ func SetupV1(router *gin.Engine, eventService services.EventsServicer, board.GET("/officers/:id", bh.GetOfficer) board.GET("/tiers", bh.GetTiers) - board.GET("/tiers/:id", bh.GetTier) + board.GET("/tiers/:tier", bh.GetTier) board.GET("/positions", bh.GetPositions) board.GET("/positions/:id", bh.GetPosition) @@ -83,8 +83,8 @@ func SetupV1(router *gin.Engine, eventService services.EventsServicer, // Tiers board.POST("/tiers", bh.CreateTier) - board.PUT("/tiers/:id", bh.UpdateTier) - board.DELETE("/tiers/:id", bh.DeleteTier) + board.PUT("/tiers/:tier", bh.UpdateTier) + board.DELETE("/tiers/:tier", bh.DeleteTier) // Positions board.POST("/positions", bh.CreatePosition) diff --git a/internal/api/services/board.go b/internal/api/services/board.go index d9bf2d07..2ccf9b94 100644 --- a/internal/api/services/board.go +++ b/internal/api/services/board.go @@ -17,18 +17,18 @@ type BoardServicer interface { DeleteOfficer(ctx context.Context, id string) error // Tier methods - GetTier(ctx context.Context, tierName int64) (dbmodels.Tier, error) - ListTiers(ctx context.Context, filters ...any) ([]dbmodels.Tier, error) - CreateTier(ctx context.Context, params dbmodels.CreateTierParams) error - UpdateTier(ctx context.Context, params dbmodels.UpdateTierParams) error + GetTier(ctx context.Context, tierName int64) (domain.Tier, error) + ListTiers(ctx context.Context, filters ...any) ([]domain.Tier, error) + CreateTier(ctx context.Context, params domain.Tier) (domain.Tier, error) + UpdateTier(ctx context.Context, tierName int64, params domain.UpdateTier) error DeleteTier(ctx context.Context, tierName int64) error // Position methods - GetPosition(ctx context.Context, oid string) (dbmodels.Position, error) - ListPositions(ctx context.Context, filters ...any) ([]dbmodels.Position, error) - CreatePosition(ctx context.Context, params dbmodels.CreatePositionParams) error - UpdatePosition(ctx context.Context, params dbmodels.UpdatePositionParams) error - DeletePosition(ctx context.Context, arg dbmodels.DeletePositionParams) error + GetPosition(ctx context.Context, oid string) (domain.Position, error) + ListPositions(ctx context.Context, filters ...any) ([]domain.Position, error) + CreatePosition(ctx context.Context, params domain.Position) (domain.Position, error) + UpdatePosition(ctx context.Context, params domain.UpdatePosition) error + DeletePosition(ctx context.Context, arg domain.DeletePosition) error } type BoardService struct { @@ -55,7 +55,8 @@ type PositionFilter interface { Apply(positions []dbmodels.Position) []dbmodels.Position } -// Officer Methods +// ==== Officer Methods ======================================================== + func (s *BoardService) GetOfficer(ctx context.Context, uuid string) (domain.Officer, error) { row, err := s.q.GetOfficer(ctx, uuid) if err != nil { @@ -96,7 +97,6 @@ func (s *BoardService) CreateOfficer(ctx context.Context, officer domain.Officer func (s *BoardService) UpdateOfficer(ctx context.Context, uuid string, updateOfficer domain.UpdateOfficer) error { - // NOTE: domain.UpdateOfficer has a uuid field, do we need the seperate function param here? dbParams := store.UpdateOfficerDomainToDB(updateOfficer) dbParams.Uuid = uuid return s.q.UpdateOfficer(ctx, dbParams) @@ -106,12 +106,17 @@ func (s *BoardService) DeleteOfficer(ctx context.Context, uuid string) error { return s.q.DeleteOfficer(ctx, uuid) } -// Tier Methods -func (s *BoardService) GetTier(ctx context.Context, tierName int64) (dbmodels.Tier, error) { - return s.q.GetTier(ctx, tierName) +// ==== Tier Methods =========================================================== + +func (s *BoardService) GetTier(ctx context.Context, tierName int64) (domain.Tier, error) { + dbTier, err := s.q.GetTier(ctx, tierName) + if err != nil { + return domain.Tier{}, err + } + return store.TierDBToDomain(dbTier), nil } -func (s *BoardService) ListTiers(ctx context.Context, filters ...any) ([]dbmodels.Tier, error) { +func (s *BoardService) ListTiers(ctx context.Context, filters ...any) ([]domain.Tier, error) { tiers, err := s.q.GetTiers(ctx) if err != nil { return nil, err @@ -124,28 +129,43 @@ func (s *BoardService) ListTiers(ctx context.Context, filters ...any) ([]dbmodel } } - return result, nil + domainTiers := make([]domain.Tier, len(result)) + for i, tier := range result { + domainTiers[i] = store.TierDBToDomain(tier) + } + return domainTiers, nil } -func (s *BoardService) CreateTier(ctx context.Context, params dbmodels.CreateTierParams) error { - _, err := s.q.CreateTier(ctx, params) - return err +func (s *BoardService) CreateTier(ctx context.Context, params domain.Tier) (domain.Tier, error) { + dbTier, err := s.q.CreateTier(ctx, store.TierDomainToDB(params)) + if err != nil { + return domain.Tier{}, err + } + return store.TierDBToDomain(dbTier), nil } -func (s *BoardService) UpdateTier(ctx context.Context, params dbmodels.UpdateTierParams) error { - return s.q.UpdateTier(ctx, params) +func (s *BoardService) UpdateTier(ctx context.Context, tierName int64, + params domain.UpdateTier) error { + dbParams := store.UpdateTierDomainToDB(params) + dbParams.Tier = tierName + return s.q.UpdateTier(ctx, dbParams) } func (s *BoardService) DeleteTier(ctx context.Context, tierName int64) error { return s.q.DeleteTier(ctx, tierName) } -// Position Methods -func (s *BoardService) GetPosition(ctx context.Context, oid string) (dbmodels.Position, error) { - return s.q.GetPosition(ctx, oid) +// ==== Position Methods ======================================================= + +func (s *BoardService) GetPosition(ctx context.Context, oid string) (domain.Position, error) { + dbPosition, err := s.q.GetPosition(ctx, oid) + if err != nil { + return domain.Position{}, err + } + return store.PositionDBToDomain(dbPosition), nil } -func (s *BoardService) ListPositions(ctx context.Context, filters ...any) ([]dbmodels.Position, error) { +func (s *BoardService) ListPositions(ctx context.Context, filters ...any) ([]domain.Position, error) { positions, err := s.q.GetPositions(ctx) if err != nil { return nil, err @@ -158,18 +178,26 @@ func (s *BoardService) ListPositions(ctx context.Context, filters ...any) ([]dbm } } - return result, nil + domainPositions := make([]domain.Position, len(result)) + for i, pos := range result { + domainPositions[i] = store.PositionDBToDomain(pos) + } + return domainPositions, nil } -func (s *BoardService) CreatePosition(ctx context.Context, params dbmodels.CreatePositionParams) error { - _, err := s.q.CreatePosition(ctx, params) - return err +func (s *BoardService) CreatePosition(ctx context.Context, + params domain.Position) (domain.Position, error) { + dbPosition, err := s.q.CreatePosition(ctx, store.PositionDomainToDB(params)) + if err != nil { + return domain.Position{}, err + } + return store.PositionDBToDomain(dbPosition), nil } -func (s *BoardService) UpdatePosition(ctx context.Context, params dbmodels.UpdatePositionParams) error { - return s.q.UpdatePosition(ctx, params) +func (s *BoardService) UpdatePosition(ctx context.Context, params domain.UpdatePosition) error { + return s.q.UpdatePosition(ctx, store.UpdatePositionDomainToDB(params)) } -func (s *BoardService) DeletePosition(ctx context.Context, arg dbmodels.DeletePositionParams) error { - return s.q.DeletePosition(ctx, arg) +func (s *BoardService) DeletePosition(ctx context.Context, arg domain.DeletePosition) error { + return s.q.DeletePosition(ctx, store.DeletePositionDomainToDB(arg)) } diff --git a/internal/api/store/board_mapper.go b/internal/api/store/board_mapper.go index 7a08b257..e8fa3bc3 100644 --- a/internal/api/store/board_mapper.go +++ b/internal/api/store/board_mapper.go @@ -15,7 +15,6 @@ func OfficerDomainToDB(officer domain.Officer) dbmodels.CreateOfficerParams { func UpdateOfficerDomainToDB(officer domain.UpdateOfficer) dbmodels.UpdateOfficerParams { return dbmodels.UpdateOfficerParams{ - Uuid: officer.Uuid, FullName: stringValue(officer.FullName), Picture: stringToNullString(officer.Picture), Github: stringToNullString(officer.Github), @@ -77,41 +76,41 @@ func TierDBToDomain(tier dbmodels.Tier) domain.Tier { func PositionDomainToDB(position domain.Position) dbmodels.CreatePositionParams { return dbmodels.CreatePositionParams{ - Oid: position.Oid, - Semester: position.Semester, - Tier: int64(position.Tier), - FullName: position.FullName, - Title: stringToNullString(position.Title), - Team: stringToNullString(position.Team), + OfficerID: position.OfficerID, + Semester: position.Semester, + Tier: int64(position.Tier), + FullName: position.FullName, + Title: stringToNullString(position.Title), + Team: stringToNullString(position.Team), } } func UpdatePositionDomainToDB(position domain.UpdatePosition) dbmodels.UpdatePositionParams { return dbmodels.UpdatePositionParams{ - Oid: position.Oid, - Semester: position.Semester, - Tier: int64(position.Tier), - FullName: position.FullName, - Title: stringToNullString(position.Title), - Team: stringToNullString(position.Team), + OfficerID: position.OfficerID, + Semester: position.Semester, + Tier: int64(position.Tier), + FullName: position.FullName, + Title: stringToNullString(position.Title), + Team: stringToNullString(position.Team), } } -func DeletePositionDomainToDB(position domain.Position) dbmodels.DeletePositionParams { +func DeletePositionDomainToDB(position domain.DeletePosition) dbmodels.DeletePositionParams { return dbmodels.DeletePositionParams{ - Oid: position.Oid, - Semester: position.Semester, - Tier: int64(position.Tier), + OfficerID: position.OfficerID, + Semester: position.Semester, + Tier: position.Tier, } } func PositionDBToDomain(position dbmodels.Position) domain.Position { return domain.Position{ - Oid: position.Oid, - Semester: position.Semester, - Tier: int(position.Tier), - FullName: position.FullName, - Title: nullStringPtr(position.Title), - Team: nullStringPtr(position.Team), + OfficerID: position.OfficerID, + Semester: position.Semester, + Tier: position.Tier, + FullName: position.FullName, + Title: nullStringPtr(position.Title), + Team: nullStringPtr(position.Team), } } diff --git a/internal/api/store/dbmodels/board.sql.go b/internal/api/store/dbmodels/board.sql.go index a8b8ef80..46dc0e2a 100644 --- a/internal/api/store/dbmodels/board.sql.go +++ b/internal/api/store/dbmodels/board.sql.go @@ -54,7 +54,7 @@ func (q *Queries) CreateOfficer(ctx context.Context, arg CreateOfficerParams) (O const createPosition = `-- name: CreatePosition :one INSERT INTO position ( - oid, + officer_id, semester, tier, full_name, @@ -63,21 +63,21 @@ position ( ) VALUES (?, ?, ?, ?, ?, ?) -RETURNING oid, semester, tier, full_name, title, team +RETURNING officer_id, semester, tier, full_name, title, team ` type CreatePositionParams struct { - Oid string - Semester string - Tier int64 - FullName string - Title sql.NullString - Team sql.NullString + OfficerID string + Semester string + Tier int64 + FullName string + Title sql.NullString + Team sql.NullString } func (q *Queries) CreatePosition(ctx context.Context, arg CreatePositionParams) (Position, error) { row := q.db.QueryRowContext(ctx, createPosition, - arg.Oid, + arg.OfficerID, arg.Semester, arg.Tier, arg.FullName, @@ -86,7 +86,7 @@ func (q *Queries) CreatePosition(ctx context.Context, arg CreatePositionParams) ) var i Position err := row.Scan( - &i.Oid, + &i.OfficerID, &i.Semester, &i.Tier, &i.FullName, @@ -146,19 +146,19 @@ func (q *Queries) DeleteOfficer(ctx context.Context, uuid string) error { const deletePosition = `-- name: DeletePosition :exec DELETE FROM position WHERE - oid = ? + officer_id = ? AND semester = ? AND tier = ? ` type DeletePositionParams struct { - Oid string - Semester string - Tier int64 + OfficerID string + Semester string + Tier int64 } func (q *Queries) DeletePosition(ctx context.Context, arg DeletePositionParams) error { - _, err := q.db.ExecContext(ctx, deletePosition, arg.Oid, arg.Semester, arg.Tier) + _, err := q.db.ExecContext(ctx, deletePosition, arg.OfficerID, arg.Semester, arg.Tier) return err } @@ -245,7 +245,7 @@ func (q *Queries) GetOfficers(ctx context.Context) ([]Officer, error) { const getPosition = `-- name: GetPosition :one SELECT - oid, + officer_id, semester, tier, full_name, @@ -254,14 +254,14 @@ SELECT FROM position WHERE - oid = ? + officer_id = ? ` -func (q *Queries) GetPosition(ctx context.Context, oid string) (Position, error) { - row := q.db.QueryRowContext(ctx, getPosition, oid) +func (q *Queries) GetPosition(ctx context.Context, officerID string) (Position, error) { + row := q.db.QueryRowContext(ctx, getPosition, officerID) var i Position err := row.Scan( - &i.Oid, + &i.OfficerID, &i.Semester, &i.Tier, &i.FullName, @@ -273,7 +273,7 @@ func (q *Queries) GetPosition(ctx context.Context, oid string) (Position, error) const getPositions = `-- name: GetPositions :many SELECT - oid, + officer_id, semester, tier, full_name, @@ -293,7 +293,7 @@ func (q *Queries) GetPositions(ctx context.Context) ([]Position, error) { for rows.Next() { var i Position if err := rows.Scan( - &i.Oid, + &i.OfficerID, &i.Semester, &i.Tier, &i.FullName, @@ -416,18 +416,18 @@ SET title = COALESCE(?2, title), team = COALESCE(?3, team) WHERE - oid = ?4 + officer_id = ?4 AND semester = ?5 AND tier = ?6 ` type UpdatePositionParams struct { - FullName string - Title sql.NullString - Team sql.NullString - Oid string - Semester string - Tier int64 + FullName string + Title sql.NullString + Team sql.NullString + OfficerID string + Semester string + Tier int64 } func (q *Queries) UpdatePosition(ctx context.Context, arg UpdatePositionParams) error { @@ -435,7 +435,7 @@ func (q *Queries) UpdatePosition(ctx context.Context, arg UpdatePositionParams) arg.FullName, arg.Title, arg.Team, - arg.Oid, + arg.OfficerID, arg.Semester, arg.Tier, ) diff --git a/internal/api/store/dbmodels/models.go b/internal/api/store/dbmodels/models.go index a961babd..f0415f86 100644 --- a/internal/api/store/dbmodels/models.go +++ b/internal/api/store/dbmodels/models.go @@ -34,12 +34,12 @@ type Officer struct { } type Position struct { - Oid string - Semester string - Tier int64 - FullName string - Title sql.NullString - Team sql.NullString + OfficerID string + Semester string + Tier int64 + FullName string + Title sql.NullString + Team sql.NullString } type Tier struct { diff --git a/internal/domain/officer.go b/internal/domain/officer.go index 6c8e7c88..8cddd7ed 100644 --- a/internal/domain/officer.go +++ b/internal/domain/officer.go @@ -9,7 +9,6 @@ type Officer struct { } type UpdateOfficer struct { - Uuid string FullName *string Picture *string Github *string diff --git a/internal/domain/position.go b/internal/domain/position.go index 6b07cb3a..9954b0c6 100644 --- a/internal/domain/position.go +++ b/internal/domain/position.go @@ -1,19 +1,25 @@ package domain type Position struct { - Oid string - Semester string - Tier int - FullName string - Title *string - Team *string + OfficerID string + Semester string + Tier int64 + FullName string + Title *string + Team *string } type UpdatePosition struct { - Oid string - Semester string - Tier int - FullName string - Title *string - Team *string + OfficerID string + Semester string + Tier int64 + FullName string + Title *string + Team *string +} + +type DeletePosition struct { + OfficerID string + Semester string + Tier int64 } diff --git a/internal/dto/position.go b/internal/dto/position.go index f7a2ea84..e64e7d10 100644 --- a/internal/dto/position.go +++ b/internal/dto/position.go @@ -5,60 +5,66 @@ import ( ) type Position struct { - Oid string `json:"oid"` - Semester string `json:"semester"` - Tier int `json:"tier"` - FullName string `json:"full_name"` - Title *string `json:"title"` - Team *string `json:"team"` + OfficerID string `json:"officer_id"` + Semester string `json:"semester"` + Tier int64 `json:"tier"` + FullName string `json:"full_name"` + Title *string `json:"title"` + Team *string `json:"team"` } func PositionDomainToDto(p *domain.Position) Position { return Position{ - Oid: p.Oid, - Semester: p.Semester, - Tier: p.Tier, - FullName: p.FullName, - Title: p.Title, - Team: p.Team, + OfficerID: p.OfficerID, + Semester: p.Semester, + Tier: p.Tier, + FullName: p.FullName, + Title: p.Title, + Team: p.Team, } } -func (p *Position) ToDomain() domain.Position { - if p == nil { - return domain.Position{} - } - +func (p Position) ToDomain() domain.Position { return domain.Position{ - Oid: p.Oid, - Semester: p.Semester, - Tier: p.Tier, - FullName: p.FullName, - Title: p.Title, - Team: p.Team, + OfficerID: p.OfficerID, + Semester: p.Semester, + Tier: p.Tier, + FullName: p.FullName, + Title: p.Title, + Team: p.Team, } } type UpdatePosition struct { - Oid string `json:"oid"` - Semester string `json:"semester"` - Tier int `json:"tier"` - FullName string `json:"full_name"` - Title *string `json:"title"` - Team *string `json:"team"` + OfficerID string `json:"officer_id"` + Semester string `json:"semester"` + Tier int64 `json:"tier"` + FullName string `json:"full_name"` + Title *string `json:"title"` + Team *string `json:"team"` } -func (p *UpdatePosition) ToDomain() domain.UpdatePosition { - if p == nil { - return domain.UpdatePosition{} +func (p UpdatePosition) ToDomain() domain.UpdatePosition { + return domain.UpdatePosition{ + OfficerID: p.OfficerID, + Semester: p.Semester, + Tier: p.Tier, + FullName: p.FullName, + Title: p.Title, + Team: p.Team, } +} - return domain.UpdatePosition{ - Oid: p.Oid, - Semester: p.Semester, - Tier: p.Tier, - FullName: p.FullName, - Title: p.Title, - Team: p.Team, +type DeletePosition struct { + OfficerID string `json:"officer_id"` + Semester string `json:"semester"` + Tier int64 `json:"tier"` +} + +func (p DeletePosition) ToDomain() domain.DeletePosition { + return domain.DeletePosition{ + OfficerID: p.OfficerID, + Semester: p.Semester, + Tier: p.Tier, } } diff --git a/internal/dto/tier.go b/internal/dto/tier.go index 13647e7a..56343387 100644 --- a/internal/dto/tier.go +++ b/internal/dto/tier.go @@ -34,7 +34,6 @@ func TierDomainToDto(t *domain.Tier) Tier { } type UpdateTier struct { - Tier int `json:"tier"` Title *string `json:"title"` Tindex *int `json:"t_index"` Team *string `json:"team"` @@ -46,7 +45,6 @@ func (t *UpdateTier) ToDomain() domain.UpdateTier { } return domain.UpdateTier{ - Tier: t.Tier, Title: t.Title, Tindex: t.Tindex, Team: t.Team, diff --git a/sql/migrations/000003_create_officers.up.sql b/sql/migrations/000003_create_officers.up.sql index 55a46147..2b90fdb4 100644 --- a/sql/migrations/000003_create_officers.up.sql +++ b/sql/migrations/000003_create_officers.up.sql @@ -16,13 +16,13 @@ CREATE TABLE IF NOT EXISTS tier ( ); CREATE TABLE IF NOT EXISTS position ( - oid VARCHAR(4) NOT NULL, + officer_id VARCHAR(4) NOT NULL, semester VARCHAR(3) NOT NULL, tier INTEGER NOT NULL, full_name VARCHAR(30) NOT NULL, title VARCHAR(40), team VARCHAR(20), - PRIMARY KEY (oid, semester, tier), - CONSTRAINT fk_officer FOREIGN KEY (oid) REFERENCES officer (uuid), + PRIMARY KEY (officer_id, semester, tier), + CONSTRAINT fk_officer FOREIGN KEY (officer_id) REFERENCES officer (uuid), CONSTRAINT fk_tier FOREIGN KEY (tier) REFERENCES tier (tier) ); diff --git a/sql/queries/board.sql b/sql/queries/board.sql index 32b3a3dd..8f82bcc1 100644 --- a/sql/queries/board.sql +++ b/sql/queries/board.sql @@ -26,7 +26,7 @@ RETURNING *; -- name: CreatePosition :one INSERT INTO position ( - oid, + officer_id, semester, tier, full_name, @@ -61,7 +61,7 @@ WHERE -- name: GetPosition :one SELECT - oid, + officer_id, semester, tier, full_name, @@ -70,7 +70,7 @@ SELECT FROM position WHERE - oid = ?; + officer_id = ?; -- NOTE: Had to declare above table as :one, may need to change later to :many @@ -100,7 +100,7 @@ SET title = COALESCE(:title, title), team = COALESCE(:team, team) WHERE - oid = :oid + officer_id = :officer_id AND semester = :semester AND tier = :tier; @@ -115,7 +115,7 @@ WHERE tier = ?; -- name: DeletePosition :exec DELETE FROM position WHERE - oid = ? + officer_id = ? AND semester = ? AND tier = ?; @@ -142,7 +142,7 @@ ORDER BY -- name: GetPositions :many SELECT - oid, + officer_id, semester, tier, full_name,