Challenge Overview
Challenge Overview
QED is a mobile application that will be used to help users find information that at the same time will help them solve some problems. We have built an ionic based prototype app that runs on both iOS and Android devices, now we need your help to build the backend API to support
Assets provided in Forums (available on registration)
The prototype app code, you need to run it locally to see what features need to be supported in the app.
Challenge Requirements
Overall
- Overall we need to develop a set of REST API to support all features in the app, please make sure you carefully go through all screens and features in the app to make sure your API coverage is good.
- The API will need to be built using Node.js + MongoDB
- All API should handle authentication / authorization properly, using JWT should be ok.
- You code must be clearly documented
- Provide a Swagger document covering all the endpoints
- The service code needs to do proper logging
- You need to provide a word / excel based document that lists the mapping from your API to the features / screens in the app
Screen Notes
Here's is a potentially incomplete list of features that need to be covered, you should still check the prototype app and make sure everything is covered.
Login Screen
- Get Code: there should be an API that takes a valid email address and name (first name and last name) as input, and send a system generated unique code to that email. There needs to be an approved status field, and any email that matches the pre-configured domains are automatically approved. For emails not matching any of the configured domains, approved field is set to false and will require the admin to update the approved field manually in the database. The user model probably also needs a role field, so that we know whether a user is admin or normal user.
- Get Access: there should be an API that takes a code as input, verifies that's a valid code and then grants user access to full content. The app will also need to send the code whenever any "modify" action happens, like bookmarking content, change settings, etc.
- Guest Access: this should grant the app limited access to the content. Basically anything that requires saving something to the server (like saving reading progress, bookmarks, push notifications, my account, etc...) won't be available to guest access. So it's basically the home screen that will show some Recent Content
Home Screen
- Get user's in-progress content
- Get newest content
- Bookmark a content
- Search content
- Save search
- Get recent searches
- Get notifications list
- Mark notification read
- Filter content
Content Details Screen
- Get full content details (including content - which could be text / audio / video, tags, author details, reviews, rating, etc..)
- Mark content as completed
- Rate the content
- Tag the content
- Get related content by the same author
- Download content
- Bookmark the content
- Search members by name
- Share content to in-app user: this should generate a notification for the user so he / she can click that notification to see the content
- Share content to users by email: this should send the users an email containing the content and a link to download the app
Bookmark Screen
- Get bookmarked contents
- Remove bookmark
My Account Screen
- Get downloaded contents (perhaps no need for API, double check please)
- Get completed contents
- Remove deleted contents (perhaps no need for API, double check please)
- Get list of FAQs
Settings Screen
- Get / update user settings
Contact Us Screen
- Send contact info
General
- Push notifications support
- Approve User API that can only be called by admins
Technologies
Node.js
MongoDB
REST
Final Submission Guidelines
Submission Deliverables
- Zipped project source code that covers everything
- Deployment guide in markdown format, should cover how to configure, deploy and verify the API
- Swagger document covering all the endpoints
- Postman collection file(s) to test the API