11from flask import Blueprint , jsonify , request
2- from flask_rest_jsonapi .exceptions import ObjectNotFound
32from flask_jwt_extended import current_user , jwt_required
4- from sqlalchemy .orm .exc import NoResultFound
53from flask_limiter .util import get_remote_address
4+ from sqlalchemy .orm .exc import NoResultFound
65
76
87from app import limiter
98from app .models import db
109from app .api .auth import return_file
1110from app .api .helpers .db import safe_query
1211from app .api .helpers .mail import send_email_to_attendees
13- from app .api .helpers .errors import ForbiddenError , NotFoundError , UnprocessableEntityError
14- from app .api .helpers .order import create_pdf_tickets_for_holder , calculate_order_amount
12+ from app .api .helpers .errors import ForbiddenError , UnprocessableEntityError , NotFoundError
13+ from app .api .helpers .order import calculate_order_amount , create_pdf_tickets_for_holder
1514from app .api .helpers .storage import UPLOAD_PATHS
1615from app .api .helpers .storage import generate_hash
1716from app .api .helpers .ticketing import TicketingManager
1817from app .api .helpers .permission_manager import has_access
19- from app .models .event_invoice import EventInvoice
2018from app .models .discount_code import DiscountCode
2119from app .models .order import Order
2220
23- ticket_blueprint = Blueprint ('ticket_blueprint' , __name__ , url_prefix = '/v1' )
21+ order_blueprint = Blueprint ('order_blueprint' , __name__ , url_prefix = '/v1/orders' )
22+ ticket_blueprint = Blueprint ('ticket_blueprint' , __name__ , url_prefix = '/v1/tickets' )
2423
2524
26- @ticket_blueprint .route ('/tickets/<string:order_identifier>' )
25+ @ticket_blueprint .route ('/<string:order_identifier>' )
26+ @order_blueprint .route ('/<string:order_identifier>/tickets-pdf' )
2727@jwt_required
2828def ticket_attendee_authorized (order_identifier ):
2929 if current_user :
@@ -45,51 +45,7 @@ def ticket_attendee_authorized(order_identifier):
4545 return ForbiddenError ({'source' : '' }, 'Authentication Required to access ticket' ).respond ()
4646
4747
48- @ticket_blueprint .route ('/orders/invoices/<string:order_identifier>' )
49- @jwt_required
50- def order_invoices (order_identifier ):
51- if current_user :
52- try :
53- order = Order .query .filter_by (identifier = order_identifier ).first ()
54- except NoResultFound :
55- return NotFoundError ({'source' : '' }, 'Order Invoice not found' ).respond ()
56- if current_user .can_download_tickets (order ):
57- key = UPLOAD_PATHS ['pdf' ]['order' ].format (identifier = order_identifier )
58- file_path = '../generated/invoices/{}/{}/' .format (key , generate_hash (key )) + order_identifier + '.pdf'
59- try :
60- return return_file ('invoice' , file_path , order_identifier )
61- except FileNotFoundError :
62- create_pdf_tickets_for_holder (order )
63- return return_file ('invoice' , file_path , order_identifier )
64- else :
65- return ForbiddenError ({'source' : '' }, 'Unauthorized Access' ).respond ()
66- else :
67- return ForbiddenError ({'source' : '' }, 'Authentication Required to access Invoice' ).respond ()
68-
69-
70- @ticket_blueprint .route ('/events/invoices/<string:invoice_identifier>' )
71- @jwt_required
72- def event_invoices (invoice_identifier ):
73- if not current_user :
74- return ForbiddenError ({'source' : '' }, 'Authentication Required to access Invoice' ).respond ()
75- try :
76- event_invoice = EventInvoice .query .filter_by (identifier = invoice_identifier ).first ()
77- event_id = event_invoice .event_id
78- except NoResultFound :
79- return NotFoundError ({'source' : '' }, 'Event Invoice not found' ).respond ()
80- if not current_user .is_organizer (event_id ) and not current_user .is_staff :
81- return ForbiddenError ({'source' : '' }, 'Unauthorized Access' ).respond ()
82- key = UPLOAD_PATHS ['pdf' ]['event_invoices' ].format (identifier = invoice_identifier )
83- file_path = '../generated/invoices/{}/{}/' .format (key , generate_hash (key )) + invoice_identifier + '.pdf'
84- try :
85- return return_file ('event-invoice' , file_path , invoice_identifier )
86- except FileNotFoundError :
87- raise ObjectNotFound ({'source' : '' },
88- "The Event Invoice isn't available at the moment. \
89- Invoices are usually issued on the 1st of every month" )
90-
91-
92- @ticket_blueprint .route ('/orders/resend-email' , methods = ['POST' ])
48+ @order_blueprint .route ('/resend-email' , methods = ['POST' ])
9349@limiter .limit (
9450 '5/minute' , key_func = lambda : request .json ['data' ]['user' ], error_message = 'Limit for this action exceeded'
9551)
@@ -124,7 +80,7 @@ def resend_emails():
12480 return ForbiddenError ({'source' : '' }, "Co-Organizer Access Required" ).respond ()
12581
12682
127- @ticket_blueprint .route ('/orders /calculate-amount' , methods = ['POST' ])
83+ @order_blueprint .route ('/calculate-amount' , methods = ['POST' ])
12884@jwt_required
12985def calculate_amount ():
13086 data = request .get_json ()
0 commit comments