Refactored transaction input handling and removed unused receipt-related definitions in Swagger.

This commit is contained in:
2026-05-09 12:53:36 +03:00
parent a57f918d23
commit c3f90b57c2
16 changed files with 410 additions and 838 deletions
+34 -246
View File
@@ -99,19 +99,13 @@
"400": {
"description": "invalid body",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "internal server error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
@@ -149,28 +143,19 @@
"400": {
"description": "invalid id",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "family not found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "internal server error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
@@ -206,28 +191,19 @@
"400": {
"description": "invalid id",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "family not found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "internal server error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
@@ -272,146 +248,17 @@
"400": {
"description": "name is required",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "family not found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "internal server error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/api/v1/receipts": {
"post": {
"description": "Загружает чек из внешнего сервиса и опционально автоматически создает связанную транзакцию",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Receipts"
],
"summary": "Загрузить чек",
"parameters": [
{
"description": "Receipt payload",
"name": "receipt",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/domain.AddReceiptRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/domain.AddReceiptResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/receipts/photo": {
"post": {
"description": "Принимает фото, распознает текст через Google OCR и создает чек с позициями; опционально создает связанную транзакцию",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Receipts"
],
"summary": "Загрузить чек по фото",
"parameters": [
{
"type": "file",
"description": "Receipt photo",
"name": "photo",
"in": "formData",
"required": true
},
{
"type": "integer",
"description": "Family ID for auto-created transaction",
"name": "family_id",
"in": "formData"
},
{
"type": "integer",
"description": "User ID for auto-created transaction",
"name": "created_by",
"in": "formData"
},
{
"type": "string",
"description": "Transaction type, default expense",
"name": "type",
"in": "formData"
},
{
"type": "string",
"description": "Transaction category, default receipt",
"name": "category",
"in": "formData"
},
{
"type": "string",
"description": "Transaction description override",
"name": "description",
"in": "formData"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/domain.AddReceiptResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
@@ -504,9 +351,10 @@
}
},
"post": {
"description": "Создает новую транзакцию и при необходимости привязывает к ней чек",
"description": "Создает транзакцию одним из трех способов.\n1. application/json: ручная транзакция с полями family_id, created_by, type, category, amount, datetime.\n2. application/json: транзакция по чеку с полями family_id, created_by, receipt_number, receipt_date.\n3. multipart/form-data: транзакция по фото чека с полями photo, family_id, created_by и опциональными type, category, description.\nВ одном JSON-запросе нельзя смешивать ручные поля транзакции с полями receipt_number и receipt_date.",
"consumes": [
"application/json"
"application/json",
"multipart/form-data"
],
"produces": [
"application/json"
@@ -517,10 +365,9 @@
"summary": "Создать транзакцию",
"parameters": [
{
"description": "Transaction payload",
"description": "JSON payload for manual or receipt-based transaction creation",
"name": "transaction",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.CreateTransactionRequest"
}
@@ -805,13 +652,13 @@
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
@@ -849,19 +696,19 @@
"400": {
"description": "invalid telegram id",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "user not found",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "internal server error",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
@@ -899,19 +746,19 @@
"400": {
"description": "invalid id",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "user not found",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "internal server error",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
@@ -947,19 +794,19 @@
"400": {
"description": "invalid id",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "user not found",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "internal server error",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
@@ -1004,19 +851,19 @@
"400": {
"description": "invalid id or invalid body",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "user not found",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "internal server error",
"schema": {
"$ref": "#/definitions/domain.UserErrorResponse"
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
@@ -1024,55 +871,6 @@
}
},
"definitions": {
"domain.AddReceiptRequest": {
"type": "object",
"required": [
"date",
"number"
],
"properties": {
"category": {
"type": "string"
},
"created_by": {
"type": "integer"
},
"date": {
"type": "string"
},
"description": {
"type": "string"
},
"family_id": {
"type": "integer"
},
"number": {
"type": "string",
"maxLength": 24,
"minLength": 24
},
"type": {
"type": "string"
}
}
},
"domain.AddReceiptResponse": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"id": {
"type": "integer"
},
"number": {
"type": "string"
},
"transaction_id": {
"type": "integer"
}
}
},
"domain.CreateFamilyRequest": {
"type": "object",
"properties": {
@@ -1171,14 +969,6 @@
}
}
},
"domain.UserErrorResponse": {
"type": "object",
"properties": {
"error": {
"type": "string"
}
}
},
"domain.UserResponse": {
"type": "object",
"properties": {
@@ -1256,14 +1046,6 @@
},
"dto.CreateTransactionRequest": {
"type": "object",
"required": [
"amount",
"category",
"created_by",
"datetime",
"family_id",
"type"
],
"properties": {
"amount": {
"type": "number"
@@ -1283,9 +1065,15 @@
"family_id": {
"type": "integer"
},
"receipt_date": {
"type": "string"
},
"receipt_id": {
"type": "integer"
},
"receipt_number": {
"type": "string"
},
"type": {
"type": "string"
}