Challenge Overview

Welcome to the Topcoder challenge. You may implement this task and submit your solution until the deadline. Reviewers would score it and 2 people with higher scores (not less than minimal) would get the prizes. Learn "How to compete" and read the task below.

Context

Project Context

Topcoder Admin is an internal Topcoder application that lets Topcoder admins perform various admin operations like manage users, groups, clients, devices and so on.

Challenge Context

We already have several sections implemented to manage various kinds of objects, and in this challenge, we would implement a new section to manage terms in a similar way.

Expected Outcome

Basic functionality to manage terms of use: list with the ability to filter, create, update and delete them.

Challenge Details

Technology Stack

  • AngularJS 1.4

  • Bootstrap

  • CSS

Code access

The work for this challenge has to be done in one repository:

- Admin App repo https://github.com/topcoder-platform/admin-app branch `feature/terms-management` commit `48fc3aa5206f10716ebd62dc7330a51da71f855d` or later.

- A brief setup guide with credentials to access Terms API are provided on the challenge forum.

Individual requirements

Implement a new section to manage terms of use similar to other sections like "Devices", see a screenshot and link (when deployed locally). Note, with the credentials we provide you can see data at the "Devices" section, but cannot edit it.

  • The main features to implement are: 1) list terms with the ability to filter, 2) create, 3) edit and 4) delete terms.

  • Terms of use can be managed using Terms Service. See swagger file which describes Terms API. You may open it via Online Swagger Editor.

  • Add a new section "Terms of Use" to the left sidebar. Please, choose some appropriate icon.

  • On the "list" page:
    - implement filter by "Legacy ID" (allow enter only numbers)
    - initially, terms of use should be shown without any filters applied
    - show columns: "ID", "Legacy ID", "Title", "URL", "Agreeability Type", "Modified At". Add one more extra column with the "Delete" button, similar to the screenshot.
    - the id should be a link that opens an editing form
    - don't add sorting to the columns, as Terms Service doesn't support it
    - support server-side pagination as it's done for Devices
    - add a "+ Add Terms" button which would open a form for creating a new terms of use record. The same as it's done for the Devices section.

  • Create/edit form should let us enter the next fields (as per Terms Service requirements):
    - "Title" - required, text input
    - "Text" - optional, big textarea
    - "URL" - optional, text input
    - "Agreeability Type" - required, select dropdown with the next options:
     
      add these options as a constant so we can config them using an environment variable (one variable with possible options)
    - "Docusign Template ID" - should be only enabled and required if "DocuSignable" is selected as "Agreeability Type", otherwise it should be disabled
      add a configurable constant for the id of "DocuSignable" option, so we can config it using environment variable
    - "Legacy ID" - optional, text input
    - "Type ID" - required, text input

  • In create/edit form:
    - implement client-side validation for required fields
    - only allow enter numbers to the fields "Legacy ID" and "Type ID"

General requirements

  • Add a new constant for Terms Service base URL "TERMS_V5_API_URL" with values for "prod" => "https://api.topcoder.com/v5", "dev" => "https://api.topcoder-dev.com/v5", "local" and "qa" => "http://localhost:3000/v5". Value by default the same as for "dev".

  • Show errors from the server if they happen during any of the requests.

  • Use UI State router best practices - separate states for list / detail / new and other best practices of Angular.js.

  • Please, follow existent code structure and practices.

  • Make sure the newly added pages have consistent look and feel with the admin-app. Reuse existent styles for inputs, buttons and so on.

  • Don't delete or edit any existing terms of use records using Terms Service API which we share with you.
    - You may still add new terms of use, edit and delete the records you've added for testing.
    - Prefix all the records that you add with your Topcoder username so you don't collide with other participants.

Deployment guide and validation document

Please, provide an additional document that describes how to setup the app for testing locally, including how to patch the admin app using provided credentials. You may use the guide we share with you on the forum, but make sure it's complete and reviewers could use it to fully test your submission.

Scorecard Aid

  • This challenge would be scored using the Basic Code Challenge 0.0.5 scorecard.

  • The major requirement here is that we can successfully perform all the oprations 1) list terms with the ability to filter, 2) create, 3) edit and 4) delete terms

  • If some of the requirements are complitelity igonred, it's also a mojor issue, for example: not implemented pagination, not implemented client-side validation, not following Angular code best practices, not following the current code strucutre and so on. But if there is a small issue or missing some particular case, it could be treated as a minor issue.

If you have any questions or concerns, feel free to raise a question on the forum.



Final Submission Guidelines

Submit a zip file which would include:

  • Git patch with changes you’ve made to the code in our repository.

  • Deployment guide that describes how to set up the app for testing, including how to patch the admin app using provided credentials. 

Additionally, the winner would be required to raise a pull request to the repository after the challenge is completed.

ELIGIBLE EVENTS:

2020 Topcoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30122782