Allow Same Discount/Access Code for Multiple Events in the Open Event Server
In this Blog-Post, I will show how to allow the system to create the same Discount/Access Code for multiple events in the Open Event Server.
What was the issue:
The main problem was that the server used to identify the discount code and access code based on the discount code/access code itself, which did not allow multiple events to have the same discount/access codes.
Can you think of a better solution to this?
Yes, we should have been searching for it based on the discount/access code as well as the event they are associated with.
Changing the endpoint:
Now to do so, we want to pass the id of the event as well as discount/access code itself with the endpoint so that we can search the database based on the event_id and the code itself.
Changes in Discount/Access Code Endpoint:
'/event/<int:discount_event_id>/discount-code/<code>'
'/event/<int:access_event_id>/access-code/<code>'
Change logic for database search:
Now when searching for discount/access code in the database, we need to pass the event_id along with the discount/access code, so that we can get the column of discount/access code associated with that event, even if we have multiple discount/access code with the same name for a different event.
Changes in Database search logic:
access = db.session.query(AccessCode).filter_by(code=kwargs.get('code')
event_id = kwargs.get('access_event_id')).first()
discount = db.session.query(DiscountCode).filter_by(code=kwargs.get('code'),
event_id = kwargs.get('discount_event_id')).first()
Change endpoint in API docs and update Dredd hooks:
Now that we have changed the endpoint to get a discount/access code, we need to change API docs as well as Dredd hooks to accommodate the change in API docs.
Changes in API docs:
## Get Discount Code Detail using the code [/v1/event/{event_id}/discount-code/{code}]
## Get Access Code Detail using the code [/v1/event/{event_id}/access-code/{code}]
Changes in Dredd Hooks:
In discount code hook:
discount_code.event_id = 1
In access code hook:
event = EventFactoryBasic()
db.session.add(event)
db.session.commit()
Resources:
Link to Issue: fossasia/open-event-server#6027
Link to PR: fossasia/open-event-server#6208