Open Event Front-end uses ember data which is a data persistence library for Ember.js. It uses promises to manage loading and saving records using JSON API format. Ember data uses models to which represent the API response to handle all the requests to be made to the server. Lets see how do we retrieve events & create new events using the Orga Server.
Installing ember data
npm install ember-data
Creating a model
We need a model in ember data which is a class containing all the attributes in the API response. We can create a model using ember cli command:
ember g model event
Populating the model
We must add all the attributes from the API response in the newly generated event model. Ember data automatically takes care of the ajax calls with high level of abstraction using promises.
identifier : attr('string'), name : attr('string'), description : attr('string'), startTime : attr('date', { defaultValue: () => moment().add(1, 'months').startOf('day').toDate() }), endTime : attr('date', { defaultValue: () => moment().add(1, 'months').hour(17).minute(0).toDate() }), locationName : attr('string'), searchableLocationName : attr('string'), thumbnail : attr('string'), large : attr('string'), backgroundImage : attr('string'), placeholderUrl : attr('string'), longitude : attr('number'), latitude : attr('number'), type : attr('string'), topic : attr('string'), subTopic : attr('string'), schedulePublishedOn: attr('date'), organizerName : attr('string'), organizerDescription : attr('string'), email : attr('string'), eventUrl : attr('string'), ticketUrl : attr('string'), codeOfConduct : attr('string'), state : attr('string'), privacy : attr('string'), licenceDetails : attr(), copyright : attr(), callForPapers : fragment('call-for-speakers'), version : fragment('version'), socialLinks : fragmentArray('social-link')
We add all the attributes in the Orga server API response to the event model class.
Once we create the model containing all the attributes we are all set to make API requests in our application. We will now see how to make GET & POST requests in Open Event Front-end project.
GET requests
Ember data lets us retrieve records of a single type using store. The records to be fetched must have respective model in the application. We can make a GET request using
this.store.findAll(‘event’)
This will return a model which contains all the events from the Orga Server, it also contains the events from past as well as the events which are unpublished.
this.store.query('event', { include : 'event_topic,event_sub_topic,event_type', filter : [ { name : 'starts_at', op : 'ge', val : moment().toISOString() }, { name : 'state', op : 'eq', val : 'Published' } ] });
To get all the published events we use the query method which lets us add query parameters to the request. We will filter the events on the basis of the state and the end time of the event.
POST requests
Ember data lets us create & update records using the createRecord method of the store. We can create an event using
event = this.store.createRecord(‘event’)
This will create a record locally in the application to send a POST request we use the save() method which send the request to the server.
event.set(‘name’, ‘Event Test’); event.save();
Thank you for reading the blog, you can check the source code for the example here.
We will discuss in detail how to implement API in Open Event Front-end in the next post.
Resources
- Official Ember Data documentation
- Ember JS