mirror of
https://github.com/dancojocaru2000/foxbank.git
synced 2025-02-23 16:49:35 +02:00
47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
|
from flask.views import MethodView
|
||
|
from flask_smorest import Blueprint
|
||
|
from marshmallow import Schema, fields
|
||
|
|
||
|
from ..decorators import ensure_logged_in
|
||
|
from ..models import Transaction
|
||
|
from ..db_utils import get_transactions
|
||
|
from .. import returns
|
||
|
|
||
|
bp = Blueprint('transactions', __name__, description='Bank transfers and other transactions')
|
||
|
|
||
|
@bp.route('/')
|
||
|
class TransactionsList(MethodView):
|
||
|
class TransactionsParams(Schema):
|
||
|
account_id = fields.Int(min=1)
|
||
|
|
||
|
class TransactionsGetResponse(returns.SuccessSchema):
|
||
|
transactions = fields.List(fields.Nested(Transaction.TransactionSchema))
|
||
|
|
||
|
@ensure_logged_in
|
||
|
@bp.response(401, returns.ErrorSchema, description='Login failure')
|
||
|
@bp.doc(security=[{'Token': []}])
|
||
|
@bp.arguments(TransactionsParams, as_kwargs=True, location='query')
|
||
|
@bp.response(200, TransactionsGetResponse)
|
||
|
def get(self, account_id: int):
|
||
|
"""Get transactions for a certain account"""
|
||
|
return returns.success(
|
||
|
transactions=[t.to_json() for t in get_transactions(account_id)]
|
||
|
)
|
||
|
|
||
|
class TransactionsCreateParams(Schema):
|
||
|
account_id = fields.Int(min=1)
|
||
|
destination_iban = fields.Str()
|
||
|
amount = fields.Int(min=1)
|
||
|
|
||
|
class TransactionsCreateResponse(returns.SuccessSchema):
|
||
|
transaction = fields.Nested(Transaction.TransactionSchema)
|
||
|
|
||
|
@ensure_logged_in
|
||
|
@bp.response(401, returns.ErrorSchema, description='Login failure')
|
||
|
@bp.doc(security=[{'Token': []}])
|
||
|
@bp.arguments(TransactionsCreateParams)
|
||
|
@bp.response(200, TransactionsCreateResponse)
|
||
|
def post(self, account_id: int, destination_iban: str, amount: int):
|
||
|
"""Create a send_transfer transaction"""
|
||
|
raise NotImplementedError()
|