From 8e84f419241899706c9f45936b12ae2ce2048096 Mon Sep 17 00:00:00 2001 From: IK Date: Mon, 21 Sep 2026 20:31:09 +0700 Subject: [PATCH] chore: publish bulk mapping API contract --- apps/api/openapi.json | 659 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 659 insertions(+) diff --git a/apps/api/openapi.json b/apps/api/openapi.json index c588edf..4e222dd 100644 --- a/apps/api/openapi.json +++ b/apps/api/openapi.json @@ -1093,6 +1093,104 @@ "title": "ExternalObservationAction", "type": "object" }, + "ExternalObservationBulkDecision": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/ExternalObservationBulkItem" + }, + "maxItems": 50, + "minItems": 1, + "title": "Items", + "type": "array" + }, + "reason": { + "maxLength": 1000, + "minLength": 1, + "title": "Reason", + "type": "string" + } + }, + "required": [ + "reason", + "items" + ], + "title": "ExternalObservationBulkDecision", + "type": "object" + }, + "ExternalObservationBulkItem": { + "properties": { + "expected_version": { + "minimum": 0.0, + "title": "Expected Version", + "type": "integer" + }, + "id": { + "format": "uuid", + "title": "Id", + "type": "string" + } + }, + "required": [ + "id", + "expected_version" + ], + "title": "ExternalObservationBulkItem", + "type": "object" + }, + "ExternalObservationBulkMapping": { + "properties": { + "fish_slug": { + "title": "Fish Slug", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/components/schemas/ExternalObservationBulkItem" + }, + "maxItems": 50, + "minItems": 1, + "title": "Items", + "type": "array" + }, + "note": { + "anyOf": [ + { + "maxLength": 1000, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Note" + }, + "waterbody_slug": { + "title": "Waterbody Slug", + "type": "string" + } + }, + "required": [ + "fish_slug", + "waterbody_slug", + "items" + ], + "title": "ExternalObservationBulkMapping", + "type": "object" + }, + "ExternalObservationBulkResult": { + "properties": { + "updated": { + "title": "Updated", + "type": "integer" + } + }, + "required": [ + "updated" + ], + "title": "ExternalObservationBulkResult", + "type": "object" + }, "ExternalObservationDecision": { "properties": { "expected_version": { @@ -1670,6 +1768,74 @@ "title": "ImportRunPublicOut", "type": "object" }, + "ModerationBulkItem": { + "properties": { + "expected_version": { + "minimum": 0.0, + "title": "Expected Version", + "type": "integer" + }, + "id": { + "format": "uuid", + "title": "Id", + "type": "string" + } + }, + "required": [ + "id", + "expected_version" + ], + "title": "ModerationBulkItem", + "type": "object" + }, + "ModerationBulkResult": { + "properties": { + "updated": { + "title": "Updated", + "type": "integer" + } + }, + "required": [ + "updated" + ], + "title": "ModerationBulkResult", + "type": "object" + }, + "ModerationBulkUpdate": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/ModerationBulkItem" + }, + "maxItems": 50, + "minItems": 1, + "title": "Items", + "type": "array" + }, + "reason": { + "anyOf": [ + { + "maxLength": 1000, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reason" + }, + "status": { + "title": "Status", + "type": "string" + } + }, + "required": [ + "status", + "items" + ], + "title": "ModerationBulkUpdate", + "type": "object" + }, "ModerationStatus": { "enum": [ "pending", @@ -1879,6 +2045,37 @@ "title": "PaginatedOfficialRecordOut", "type": "object" }, + "PaginatedRigOut": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/RigSummaryOut" + }, + "title": "Items", + "type": "array" + }, + "limit": { + "title": "Limit", + "type": "integer" + }, + "offset": { + "title": "Offset", + "type": "integer" + }, + "total": { + "title": "Total", + "type": "integer" + } + }, + "required": [ + "items", + "total", + "limit", + "offset" + ], + "title": "PaginatedRigOut", + "type": "object" + }, "PaginatedTackleItemOut": { "properties": { "items": { @@ -2136,6 +2333,86 @@ "title": "RigOut", "type": "object" }, + "RigSummaryOut": { + "properties": { + "component_count": { + "title": "Component Count", + "type": "integer" + }, + "id": { + "format": "uuid", + "title": "Id", + "type": "string" + }, + "missing_fields": { + "items": { + "type": "string" + }, + "title": "Missing Fields", + "type": "array" + }, + "name": { + "title": "Name", + "type": "string" + }, + "source_checked_at": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Checked At" + }, + "source_external_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source External Id" + }, + "source_system": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source System" + }, + "source_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Url" + } + }, + "required": [ + "id", + "name", + "source_system", + "source_external_id", + "source_url", + "source_checked_at", + "component_count" + ], + "title": "RigSummaryOut", + "type": "object" + }, "SourceStatusOut": { "properties": { "last_started_at": { @@ -2300,6 +2577,18 @@ "title": "Last Seen At", "type": "string" }, + "rig_id": { + "anyOf": [ + { + "format": "uuid", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Rig Id" + }, "role": { "title": "Role", "type": "string" @@ -2308,6 +2597,18 @@ "title": "Status", "type": "string" }, + "tackle_item_id": { + "anyOf": [ + { + "format": "uuid", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tackle Item Id" + }, "unique_players": { "title": "Unique Players", "type": "integer" @@ -2374,6 +2675,13 @@ "title": "Name", "type": "string" }, + "related_rigs": { + "items": { + "$ref": "#/components/schemas/TackleItemRigOut" + }, + "title": "Related Rigs", + "type": "array" + }, "source_checked_at": { "anyOf": [ { @@ -2458,6 +2766,55 @@ "title": "TackleItemOut", "type": "object" }, + "TackleItemRigOut": { + "properties": { + "component_count": { + "title": "Component Count", + "type": "integer" + }, + "id": { + "format": "uuid", + "title": "Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "source_checked_at": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Checked At" + }, + "source_system": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source System" + } + }, + "required": [ + "id", + "name", + "source_system", + "source_checked_at", + "component_count" + ], + "title": "TackleItemRigOut", + "type": "object" + }, "ValidationError": { "properties": { "loc": { @@ -2876,6 +3233,62 @@ "summary": "Admin Reports" } }, + "/api/v1/admin/catch-reports/bulk": { + "post": { + "operationId": "moderate_reports_bulk_api_v1_admin_catch_reports_bulk_post", + "parameters": [ + { + "in": "header", + "name": "authorization", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Authorization" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModerationBulkUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModerationBulkResult" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + } + }, + "summary": "Moderate Reports Bulk" + } + }, "/api/v1/admin/catch-reports/{report_id}": { "delete": { "operationId": "delete_report_api_v1_admin_catch_reports__report_id__delete", @@ -3204,6 +3617,118 @@ "summary": "Admin External Observations" } }, + "/api/v1/admin/external-observations/bulk-mapping": { + "patch": { + "operationId": "admin_map_external_observations_bulk_api_v1_admin_external_observations_bulk_mapping_patch", + "parameters": [ + { + "in": "header", + "name": "authorization", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Authorization" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExternalObservationBulkMapping" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExternalObservationBulkResult" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + } + }, + "summary": "Admin Map External Observations Bulk" + } + }, + "/api/v1/admin/external-observations/bulk-reject": { + "patch": { + "operationId": "admin_reject_external_observations_bulk_api_v1_admin_external_observations_bulk_reject_patch", + "parameters": [ + { + "in": "header", + "name": "authorization", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Authorization" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExternalObservationBulkDecision" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExternalObservationBulkResult" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + } + }, + "summary": "Admin Reject External Observations Bulk" + } + }, "/api/v1/admin/external-observations/{observation_id}/alias-suggestions": { "get": { "operationId": "admin_external_alias_suggestions_api_v1_admin_external_observations__observation_id__alias_suggestions_get", @@ -4087,6 +4612,22 @@ "title": "Method" } }, + { + "in": "query", + "name": "role", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + } + }, { "in": "query", "name": "hours", @@ -4580,6 +5121,23 @@ ], "title": "Entity Type" } + }, + { + "in": "query", + "name": "media_role", + "required": false, + "schema": { + "anyOf": [ + { + "pattern": "^(waterbody_cover|waterbody_map|waterbody_depth_map|waterbody_screenshot|tackle_card|tackle_detail|rig_diagram|tackle_screenshot)$", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Media Role" + } } ], "responses": { @@ -4721,6 +5279,22 @@ "title": "Category" } }, + { + "in": "query", + "name": "q", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Q" + } + }, { "in": "query", "name": "limit", @@ -5026,6 +5600,22 @@ "title": "Category" } }, + { + "in": "query", + "name": "q", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Q" + } + }, { "in": "query", "name": "brand", @@ -5164,6 +5754,75 @@ "summary": "Tackle Item" } }, + "/api/v1/tackle/rigs": { + "get": { + "operationId": "tackle_rigs_api_v1_tackle_rigs_get", + "parameters": [ + { + "in": "query", + "name": "q", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Q" + } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 48, + "maximum": 100, + "minimum": 1, + "title": "Limit", + "type": "integer" + } + }, + { + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "minimum": 0, + "title": "Offset", + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedRigOut" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + } + }, + "summary": "Tackle Rigs" + } + }, "/api/v1/tackle/rigs/{rig_id}": { "get": { "operationId": "rig_detail_api_v1_tackle_rigs__rig_id__get",