"""Blueprint for payment minimum API.""" from http import HTTPStatus from common_apispec import doc, marshal_with, use_kwargs from flask import Blueprint from payment.constants.openapi import PAYMENT_MINIMUMS_BY_CURRENCY_RESPONSES from payment.logic import payment_minimum as logic from payment.schemas.payment_minimum import ( PaymentMinimumListSchema, PaymentMinimumPutSchema, PaymentMinimumSchema, ) from payment.utils.authorization import check_access payment_minimum_api = Blueprint('payment_minimum_api', __name__) @payment_minimum_api.route( '/payment-minimums/', methods=['GET'] ) @doc(tags=['payment-minimums'], description='Get payment minimum by currency code.') @check_access @marshal_with( PaymentMinimumSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_payment_minimum(currency_code: str) -> tuple: """Endpoint to GET the payment minimum amount for a specific currency code.""" return logic.get_payment_minimum(currency_code), HTTPStatus.OK @payment_minimum_api.route('/payment-minimums', methods=['GET']) @doc(tags=['payment-minimums'], description='List all payment minimums.') @check_access @marshal_with( PaymentMinimumListSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def list_payment_minimums() -> tuple: """Endpoint to GET all existing payment minimum amounts.""" return logic.list_payment_minimums(), HTTPStatus.OK @payment_minimum_api.route('/payment-minimums', methods=['PUT']) @doc(tags=['payment-minimums'], description='Bulk update payment minimums.') @check_access @use_kwargs(PaymentMinimumPutSchema(many=True), location='json', required=True) @marshal_with( PaymentMinimumSchema(many=True), code=HTTPStatus.CREATED, description=HTTPStatus.CREATED.phrase, ) def bulk_update_minimums(*minimums) -> tuple: """Endpoint to bulk update payment minimum amounts.""" return logic.bulk_update_payment_minimums(minimums), HTTPStatus.CREATED @payment_minimum_api.route('/payment-minimums/by-currency/', methods=['GET']) @doc( tags=['payment-minimums'], description='Get all payment minimum amounts grouped by currency code.', responses=PAYMENT_MINIMUMS_BY_CURRENCY_RESPONSES, ) @check_access @marshal_with( None, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, apply=False, ) def get_payment_minimums_by_currency() -> tuple: """Endpoint to GET all existing payment minimum amounts grouped by currency code.""" return logic.get_payment_minimums_by_currency(), HTTPStatus.OK