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#6027Link to PR: fossasia/open-event-server#6208
