"""Blueprint for sales file API.""" from abacus_common_logic.views.create_view import CreateView from abacus_common_logic.views.item_view import ItemView from flask import Blueprint, request from owsrequest import flask_request from owsresponse import response from owsresponse.adaptors.flask import flaskify from royalties.constants.error import ERROR_CODE_AUTHORIZATION from royalties.logic import sales_file as logic from royalties.models import SalesFile from royalties.schemas import SalesFileDetailSchema, SalesFileUpdateSchema sales_file_api = Blueprint('sales_file_api', __name__) class SalesFileCreateView(CreateView): """Handles sales file creation.""" post_schema = SalesFileDetailSchema(only=('accounting_period_id', 'file_name')) def post(self, **kwargs): """Create sales file.""" access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=401, ) ) return super().post(**kwargs) def create_handler(self, **params): """Create sales file.""" return logic.create_sales_file(**params) class SalesFileItemView(ItemView): """Handles operations on existing sales files.""" model_class = SalesFile object_detail_schema = SalesFileDetailSchema() put_schema = SalesFileUpdateSchema( only=('amount_usd', 'main_url', 'row_count'), partial=True ) def get(self, object_id, **kwargs): """Get sales file by id.""" access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=401, ) ) return super().get(object_id, **kwargs) def put(self, object_id, **kwargs): """Update sales file.""" access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=401, ) ) return super().put(object_id, **kwargs) def update_handler(self, obj, **params): """Handle sales file updates.""" return logic.update_sales_file(obj, **params) sales_file_api.add_url_rule( '/sales-file', methods=['POST'], view_func=SalesFileCreateView.as_view('create_sales_file'), ) sales_file_api.add_url_rule( '/sales-file/', methods=['GET', 'PUT'], view_func=SalesFileItemView.as_view('sales_file'), )