You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.7 KiB
46 lines
1.7 KiB
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()
|
|
|