Challenge Overview

Welcome to the IBM Castle - Enhance UI prototype with additional endpoints contest. As part of this contest, we would like you to enhance an existing Angularjs and Nodejs application and add additional features.

 

Project Overview

This project is the foundation for a complex, enterprise email, calendaring, and messaging system.  We will be building a full fledged email application and an API server to allow multiple clients to interface with it.

 

Contest Overview

We have an email application currently nicknamed Castle. It’s current state can be best described as follows:

  1. It has a backend application following Strongloop’s Loopback framework.

  2. The backend application exposes multiple endpoints that are used by the front end (some of the endpoints are in use, not all)

  3. The backend application interfaces with Couchdb and defines models and corresponding endpoints for Messages (Emails) and Calendars among others.

  4. The application also has a front end which, currently, is the mobile version of the email application. It has some very basic features that make use of the earlier endpoints.

 

Before we proceed with the requirements of the contest, we would like to give some background regarding the application to help you understand its current state better.

  1. The backend of the application, itself an API, was actually meant to interface with multiple “proxy” APIs.

  2. Instead, we have it currently interfacing with CouchDB.

  3. Eventually, we would like to replace the CouchDB interface with the interfaces for the multiple proxies.

 

As first step, we currently have a proxy nicknamed “Domino”. The API currently only interfaces with a single endpoint of Domino - sending emails. Thus, from the UI, you can compose emails and actually send them to valid email addresses.

 

Contest Details

We want you to enhance the application to make use of some more Domino’s endpoints. In particular, we want you to enhance the existing Castle app and expose endpoints that will in turn call the corresponding Domino endpoints. You will also enhance the User Interface to make use of these newly exposed endpoints. We will share the list of Domino endpoints with you in the contest forum. Note that these endpoints need you to pass a JWT token which you can get using another endpoint. The UI however does not have a login feature yet. This means that prior to execution of these endpoints, you will have to first retrieve the JWT token. Check out how the sending message API currently works.

 

Additionally, we want you to improve the existing Angularjs / user interface (client folder) code as follows:

  1. Remove use of async. There’s only one function that seems to use it and using an entire library for just one case seems to be an overkill. You can replace that with promises instead.

  2. Let the client / user interface use bower instead of directly shipping with the libraries.

  3. Currently, the backend uses ES6 and the linter is also configured as such. However, the front end uses ES5. Update the same linter configuration so that the javascript code inside the client folder is using ES5 rules whereas the rest of the application uses ES6.

  4. The controller is one big file. If it makes sense to break it down based on the page or component it is associated with, please do so.

  5. The lb-services.js file contains multiple services that are not even being used yet. Remove them and retain only those that are relevant.

  6. Remove any Deployment Guides and provide a single Deployment Guide. You can refer to the Deployment Steps that we will share in the contest forum and additionally, refer to the README file for the Timezone, Translation and File Preview services (that are not in scope but you need to include their deployment steps in the guide).

  7. Overall, clean the Angularjs code.

 

Kindly note the following additional points:

  1. We want you to use the AngularJS SDK for the loopback framework. The current UI makes use of it as well.

  2. The UI prototype can be hosted by the Loopback application itself. You can refer to the documentation on hosting static files and on creating custom express routes and check out the existing application.

  3. You need to use AirBnb’s ESLinter for both javascript code style and checks. This already exists in the existing code base. Make sure that you verify that your submission is free from any warnings and errors. This is only for the javascript aspects of the code. You can use the ES5 version of AirBnb for the front end javascript.

  4. The backend makes use of the Strongloop loopback framework. Thus, any updates to it must follow that best practices outlined for it. Please see the links shared above.



Final Submission Guidelines

Kindly make sure that before uploading your submission, it:

  1. Meets the specification documents shared

  2. Passes all the lint checks using the ESLint rules that we mentioned

  3. Implements all the endpoints requested

  4. Has all tests running successfully. Update any tests based on the new endpoints added.


Once you are ready, create a .zip file of the submission and upload this through the Submit and Review tool for this contest.

ELIGIBLE EVENTS:

2016 TopCoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30053619