Challenge Overview

Welcome to IBM Castle Connect Calendars with Domino contest. As part of this contest, you will implement three endpoints to connect to a proxy API service.

 

In case your submission gets a score greater than 93, we will award you an additional $200 - up to three submissions.

 

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 Details

We have a Nodejs application named “Castle” that has been built using Strongloop’s loopback framework. We wish to enhance this application to create three endpoints that will interface with a proxy API named Domino. The details of this proxy will be shared in the contest forum.

 

Following are the endpoints that we need you to implement / update in Castle and in its description we have specified which corresponding endpoint to call in Domino. Only the backend needs to be updated. No changes expected in the front end for this contest.

  1. POST /calendars/search

    This endpoint is to get the list of calendar objects for a user. This Castle endpoint will in turn call GET /api/calendar in Domino. Currently, the endpoint interacts with CouchDB but you can remove this interaction. Instead, proceed to call the Domino API directly and return with its response. The response will be in JSON format. The format of the request body when carrying out this request will be shared in the contest forum.

 

  1. GET /calendars/{calendarId}

    This endpoint is to get a specific calendar object. This Castle endpoint will in turn call GET /api/calendarentry/{calendarId} in Domino. Currently, the endpoint interacts with CouchDB but you can remove this interaction. Instead, proceed to call the Domino API directly and return with its response. The response from Domino will be of type application/calendar or VCAL. You will need to convert this to JSON before returning the response to the end user

 

  1. POST /calendars

    This endpoint creates a new calendar event. This Castle endpoint will in turn call POST /api/calendar in Domino. Currently, the endpoint interacts with CouchDB but you can remove this interaction. Instead, proceed to call the Domino API directly and return with its response. Domino expects the calendar to be of type application/calendar or VCAL. While Castle receives the calendar event in JSON, before passing it to Domino, you need to convert it to VCAL format. The format of the request body when carrying out this request will be shared in the contest forum.

 

For each of the above endpoints, you are required to:

  1. Update the Unit Tests accordingly. Remove any test that is no longer applicable (with respect to the above three endpoints) and add new ones as required.

  2. Ensure that the AirBnb linter does not throw errors. Do not add exceptions to the linter

  3. Update the Swagger Specification present in the application for the above three endpoints. Do not make updates to any other endpoints.

  4. Ensure that you don’t break any other endpoints. Just work on the three endpoints mentioned above.

 

Additionally, kindly note the following:

  1. 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. DO NOT add any exceptions to the linter.

  2. For the to and from conversion to VCAL, you can use one of the following libraries - icalendar or cozy-ical. If you wish to use any other library, please first check in the contest forum.

  3. You will need to use the REST-connector when having Castle interact with Domino.

  4. Each of the three Domino endpoints require you to pass a JTW token for authorization. You can get this token if you login with Domino. More details provided in the contest forum.



Final Submission Guidelines

Kindly make sure that before uploading your submission, it:

  1. Meets the requirements mentioned above.

  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: 30053673