Add categories endpoint in API (#460)

* Add categories endpoint in API

* FIX eager load parent and subcategories associations

* FIX update specs to match

* Add rswag spec

* FIX openapi spec

* FIX final warns
This commit is contained in:
soky srm
2025-12-17 15:00:01 +01:00
committed by GitHub
parent 9d54719007
commit 7be799fac7
12 changed files with 924 additions and 16 deletions

View File

@@ -110,18 +110,33 @@ RSpec.describe 'API V1 Transactions', type: :request do
description: 'Filter by category ID'
parameter name: :merchant_id, in: :query, type: :string, required: false,
description: 'Filter by merchant ID'
parameter name: :start_date, in: :query, type: :string, format: :date, required: false,
description: 'Filter transactions from this date'
parameter name: :end_date, in: :query, type: :string, format: :date, required: false,
description: 'Filter transactions until this date'
parameter name: :start_date, in: :query, required: false,
description: 'Filter transactions from this date',
schema: { type: :string, format: :date }
parameter name: :end_date, in: :query, required: false,
description: 'Filter transactions until this date',
schema: { type: :string, format: :date }
parameter name: :min_amount, in: :query, type: :number, required: false,
description: 'Filter by minimum amount'
parameter name: :max_amount, in: :query, type: :number, required: false,
description: 'Filter by maximum amount'
parameter name: :type, in: :query, type: :string, enum: %w[income expense], required: false,
description: 'Filter by transaction type'
parameter name: :type, in: :query, required: false,
description: 'Filter by transaction type',
schema: { type: :string, enum: %w[income expense] }
parameter name: :search, in: :query, type: :string, required: false,
description: 'Search by name, notes, or merchant name'
parameter name: :account_ids, in: :query, required: false,
description: 'Filter by multiple account IDs',
schema: { type: :array, items: { type: :string } }
parameter name: :category_ids, in: :query, required: false,
description: 'Filter by multiple category IDs',
schema: { type: :array, items: { type: :string } }
parameter name: :merchant_ids, in: :query, required: false,
description: 'Filter by multiple merchant IDs',
schema: { type: :array, items: { type: :string } }
parameter name: :tag_ids, in: :query, required: false,
description: 'Filter by tag IDs',
schema: { type: :array, items: { type: :string } }
response '200', 'transactions listed' do
schema '$ref' => '#/components/schemas/TransactionCollection'
@@ -174,6 +189,7 @@ RSpec.describe 'API V1 Transactions', type: :request do
date: { type: :string, format: :date, description: 'Transaction date' },
amount: { type: :number, description: 'Transaction amount' },
name: { type: :string, description: 'Transaction name/description' },
description: { type: :string, description: 'Alternative to name field' },
notes: { type: :string, description: 'Additional notes' },
currency: { type: :string, description: 'Currency code (defaults to family currency)' },
category_id: { type: :string, format: :uuid, description: 'Category ID' },
@@ -294,7 +310,9 @@ RSpec.describe 'API V1 Transactions', type: :request do
date: { type: :string, format: :date },
amount: { type: :number },
name: { type: :string },
description: { type: :string, description: 'Alternative to name field' },
notes: { type: :string },
currency: { type: :string, description: 'Currency code' },
category_id: { type: :string, format: :uuid },
merchant_id: { type: :string, format: :uuid },
nature: { type: :string, enum: %w[income expense inflow outflow] },