mirror of
https://github.com/we-promise/sure.git
synced 2026-05-10 14:15:01 +00:00
feat(exports): preserve transfer decisions (#1639)
* feat(exports): preserve transfer decisions * fix(api): apply transfer date filters to both sides * fix(api): refine transfer decision handling * fix(api): align transfer decision schemas * fix(api): use current context for transfer filters * fix(api): include either side in transfer date filters * fix(api): deduplicate transfer decision filters * fix(api): guard transfer decision exports
This commit is contained in:
@@ -1470,6 +1470,152 @@ components:
|
||||
"$ref": "#/components/schemas/Transaction"
|
||||
pagination:
|
||||
"$ref": "#/components/schemas/Pagination"
|
||||
TransferTransactionSide:
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- entry_id
|
||||
- date
|
||||
- amount
|
||||
- amount_cents
|
||||
- currency
|
||||
- name
|
||||
- kind
|
||||
- account
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
format: uuid
|
||||
entry_id:
|
||||
type: string
|
||||
format: uuid
|
||||
date:
|
||||
type: string
|
||||
format: date
|
||||
amount:
|
||||
type: string
|
||||
amount_cents:
|
||||
type: integer
|
||||
description: Signed amount in currency minor units
|
||||
currency:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
account:
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
- account_type
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
format: uuid
|
||||
name:
|
||||
type: string
|
||||
account_type:
|
||||
type: string
|
||||
nullable: true
|
||||
TransferDecision:
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- status
|
||||
- date
|
||||
- amount
|
||||
- amount_cents
|
||||
- currency
|
||||
- transfer_type
|
||||
- inflow_transaction
|
||||
- outflow_transaction
|
||||
- created_at
|
||||
- updated_at
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
format: uuid
|
||||
status:
|
||||
type: string
|
||||
enum:
|
||||
- pending
|
||||
- confirmed
|
||||
date:
|
||||
type: string
|
||||
format: date
|
||||
amount:
|
||||
type: string
|
||||
amount_cents:
|
||||
type: integer
|
||||
description: Absolute transfer amount in currency minor units
|
||||
currency:
|
||||
type: string
|
||||
transfer_type:
|
||||
type: string
|
||||
enum:
|
||||
- transfer
|
||||
- liability_payment
|
||||
- loan_payment
|
||||
notes:
|
||||
type: string
|
||||
nullable: true
|
||||
inflow_transaction:
|
||||
"$ref": "#/components/schemas/TransferTransactionSide"
|
||||
outflow_transaction:
|
||||
"$ref": "#/components/schemas/TransferTransactionSide"
|
||||
created_at:
|
||||
type: string
|
||||
format: date-time
|
||||
updated_at:
|
||||
type: string
|
||||
format: date-time
|
||||
TransferDecisionCollection:
|
||||
type: object
|
||||
required:
|
||||
- transfers
|
||||
- pagination
|
||||
properties:
|
||||
transfers:
|
||||
type: array
|
||||
items:
|
||||
"$ref": "#/components/schemas/TransferDecision"
|
||||
pagination:
|
||||
"$ref": "#/components/schemas/Pagination"
|
||||
RejectedTransfer:
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- inflow_transaction
|
||||
- outflow_transaction
|
||||
- created_at
|
||||
- updated_at
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
format: uuid
|
||||
inflow_transaction:
|
||||
"$ref": "#/components/schemas/TransferTransactionSide"
|
||||
outflow_transaction:
|
||||
"$ref": "#/components/schemas/TransferTransactionSide"
|
||||
created_at:
|
||||
type: string
|
||||
format: date-time
|
||||
updated_at:
|
||||
type: string
|
||||
format: date-time
|
||||
RejectedTransferCollection:
|
||||
type: object
|
||||
required:
|
||||
- rejected_transfers
|
||||
- pagination
|
||||
properties:
|
||||
rejected_transfers:
|
||||
type: array
|
||||
items:
|
||||
"$ref": "#/components/schemas/RejectedTransfer"
|
||||
pagination:
|
||||
"$ref": "#/components/schemas/Pagination"
|
||||
Valuation:
|
||||
type: object
|
||||
required:
|
||||
@@ -4919,6 +5065,111 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
"/api/v1/rejected_transfers":
|
||||
get:
|
||||
summary: List rejected transfers
|
||||
tags:
|
||||
- Rejected Transfers
|
||||
security:
|
||||
- apiKeyAuth: []
|
||||
parameters:
|
||||
- name: page
|
||||
in: query
|
||||
required: false
|
||||
description: 'Page number (default: 1)'
|
||||
schema:
|
||||
type: integer
|
||||
- name: per_page
|
||||
in: query
|
||||
required: false
|
||||
description: 'Items per page (default: 25, max: 100)'
|
||||
schema:
|
||||
type: integer
|
||||
- name: account_id
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
description: Filter rejected transfers involving this account
|
||||
- name: start_date
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: Filter rejected transfers from this date
|
||||
- name: end_date
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: Filter rejected transfers until this date
|
||||
responses:
|
||||
'200':
|
||||
description: rejected transfers listed
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/RejectedTransferCollection"
|
||||
'401':
|
||||
description: unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
'403':
|
||||
description: insufficient scope
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
'422':
|
||||
description: invalid filter
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
"/api/v1/rejected_transfers/{id}":
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
description: Rejected transfer ID
|
||||
schema:
|
||||
type: string
|
||||
get:
|
||||
summary: Retrieve a rejected transfer
|
||||
tags:
|
||||
- Rejected Transfers
|
||||
security:
|
||||
- apiKeyAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: rejected transfer retrieved
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/RejectedTransfer"
|
||||
'401':
|
||||
description: unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
'403':
|
||||
description: insufficient scope
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
'404':
|
||||
description: rejected transfer not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
"/api/v1/rule_runs":
|
||||
get:
|
||||
summary: List rule runs
|
||||
@@ -6184,6 +6435,120 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
"/api/v1/transfers":
|
||||
get:
|
||||
summary: List transfers
|
||||
tags:
|
||||
- Transfers
|
||||
security:
|
||||
- apiKeyAuth: []
|
||||
parameters:
|
||||
- name: page
|
||||
in: query
|
||||
required: false
|
||||
description: 'Page number (default: 1)'
|
||||
schema:
|
||||
type: integer
|
||||
- name: per_page
|
||||
in: query
|
||||
required: false
|
||||
description: 'Items per page (default: 25, max: 100)'
|
||||
schema:
|
||||
type: integer
|
||||
- name: status
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
enum:
|
||||
- pending
|
||||
- confirmed
|
||||
description: Filter by transfer status
|
||||
- name: account_id
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
description: Filter transfers involving this account
|
||||
- name: start_date
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: Filter transfers from this date
|
||||
- name: end_date
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: Filter transfers until this date
|
||||
responses:
|
||||
'200':
|
||||
description: transfers listed
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/TransferDecisionCollection"
|
||||
'401':
|
||||
description: unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
'403':
|
||||
description: insufficient scope
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
'422':
|
||||
description: invalid filter
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
"/api/v1/transfers/{id}":
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
description: Transfer ID
|
||||
schema:
|
||||
type: string
|
||||
get:
|
||||
summary: Retrieve a transfer
|
||||
tags:
|
||||
- Transfers
|
||||
security:
|
||||
- apiKeyAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: transfer retrieved
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/TransferDecision"
|
||||
'401':
|
||||
description: unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
'403':
|
||||
description: insufficient scope
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
'404':
|
||||
description: transfer not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
"/api/v1/users/reset":
|
||||
delete:
|
||||
summary: Reset account
|
||||
|
||||
Reference in New Issue
Block a user