Challenge Overview

App environment:
  • ASP.Net MVC Core Web API
Basic requirements for this challenge:
  • Build ASP.Net MVC Core Web API based on Swagger
  • Web API need support Unit Testing that covered 90% or above
  • Create sql for sample data based on storyboard content
  • Create Postman collections and Configurations

Application Background
Our organization is structured by Value Streams after the SAFe industry model. A Value Stream represents an organizational sleeve that has a specific business focus with dedicated resources. For example, in our Insurance business we have multiple value streams such as Product, Inforce Operations, Marketing and Distribution etc. These values streams have roadmaps with target strategies and KPIs (Key Performance Indicators) they’re accountable to deliver on. The roadmaps are a rolling 4-6 Quarters of incremental outcomes representing the delivery of some type of business value. These outcomes ultimately achieve the strategy as measured by these KPIs.

We are looking for a solution to manage these roadmaps. This solution would be for a data entry UI , database repository, that will enable future Power BI data visualizations. This solution will enable multiple personas to access and input roadmap data and demonstrate how a Value Stream is achieving its strategy as measured by KPIs and delivery of incremental outcomes. Eventually, a simple integration between the UI and JH’s Backlog Management Tool (Rally) will be used to synch a few fields. This solution should enable an export of data that can be easily uploaded to a data visualization tool.

Problem
The primary goals for this UI and Database is to get users out of using excel spreadsheets and establish consistency in data being tracked across the division. Additionally, this solution will enable Value Streams to extract data in a format that’s ingestible by a Data Visualization tool reducing time spent creating manual PowerPoint presentations to demonstrate how strategy is progressing. Benefits are as follows:
  • Improved user experience tracking roadmap outcomes, KPIs and strategy progression.
  • Good usability and efficiency for entering data.
  • Consistency of roadmap data being tracked across all Value Streams in the U.S. Division with one source of truth.
  • Ability to easily export data and upload into a visualization tool enabling multiple personas to generate various data views.
Technology Stack Deployment environment requirements
  • localhost
  • Heroku - Create CI/CD from gitlab to AWS EC2
  • Database on Azure

General Requirements:
  • You must use ASP.Net MVC Core Web API for this base of REST API
  • Use Azure PaaS SQL as database layer. Refer more reference here: https://azure.microsoft.com/en-us/services/sql-database/
  • Getting started on ASP.Net MVC Core Web API here: https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.1
  • We will host REST API inside Docker with this ASP.Net Core Web API.
  • REST API need support logging file. Create external file to logging any activity
  • Make sure you submission support unit testings
  • The requests and responses should properly list all fields.
  • All endpoints must be protected and JWT passed in the request header must be used for authentication.
  • Suggest best practices endpoints format for the actual API implementations
  • Create sql for sample data based on storyboard content

Individual Requirements
You will build REST API for these following pages, here is list of endpoints to implement, you can suggest changes but you need to post in forums for confirmation and discussion.
Please check the detailed swagger file and initial ERD that you can use when create all required table and fields on database on challenge assets mentioned above
Make sure your REST API possible to consume for the frontend based on storyboard look and feel
Pay attention for request body and response format based on Swagger file
Let’s discuss if you find any things need adjusted when build the REST API

1). Security
- This is endpoint when user login and logout the application
- Required endpoints to build are:
POST /api/Security/login
POST /api/Security/logout

2). KPIGroup
- KPIGroup used on Associate with KPIs to select KPI Group
- Required endpoints to build are:
DELETE /api/KPIGroup/{id}
GET /api/KPIGroup/{id}
PUT /api/KPIGroup/{id}
GET /api/KPIGroup
POST /api/KPIGroup

3). KPIStatus
- KPIStatus used on Associate with KPIs, Add Outcomes,  to select KPI Status
- Required endpoints to build are:
DELETE /api/KPIStatus/{id}
GET /api/KPIStatus/{id}
PUT /api/KPIStatus/{id}
GET /api/KPIStatus
POST /api/KPIStatus

4). StrategyLevel
- This is endpoints to hold Strategy Level that used on Align to Strategy Level
- Note: remove type field
- Required endpoints to build are:
DELETE /api/StrategyLevel/{id}
GET /api/StrategyLevel/{id}
PUT /api/StrategyLevel/{id}
GET /api/StrategyLevel
POST /api/StrategyLevel

5). StrategyLevelTheme
- This is endpoints to hold Strategy Level Theme that used on Align to Strategy Level
- It need linked with Strategy Level Id
- Required endpoints to build are:
DELETE /api/StrategyLevelTheme/{id}
GET /api/StrategyLevelTheme/{id}
PUT /api/StrategyLevelTheme/{id}
GET /api/StrategyLevelTheme
POST /api/StrategyLevelTheme

6). StrategyUnit
- Strategy unit will be use as selector when create new roadmap, also main filter on dashboard page
- Required endpoints to build are:
DELETE /api/StrategyUnit/{id}
GET /api/StrategyUnit/{id}
PUT /api/StrategyUnit/{id}
GET /api/StrategyUnit
POST /api/StrategyUnit

7). ValueStream
- Similar with Strategy unit, Value Stream also will be use as selector when create new roadmap and main filter on dashboard page
- Required endpoints to build are:
DELETE /api/ValueStream/{id}
GET /api/ValueStream/{id}
PUT /api/ValueStream/{id}
GET /api/ValueStream
POST /api/ValueStream

8). VSStrategyStatus
- This VSStrategyStatus will be used when Define Value Stream Strategies, to set the status on the last column
- Required endpoints to build are:
DELETE /api/VSStrategyStatus/{id}
GET /api/VSStrategyStatus/{id}
PUT /api/VSStrategyStatus/{id}
GET /api/VSStrategyStatus
POST /api/VSStrategyStatus

9). User
- This is section to handle user accounts.
- Required endpoints to build are:
DELETE /api/User/{id}
GET /api/User/{id}
PUT /api/User/{id}
GET /api/User
POST /api/User

10). Role
- This is section to handle user roles.
- Required endpoints to build are:
DELETE /api/Role/{id}
GET /api/Role/{id}
PUT /api/Role/{id}
GET /api/Role
POST /api/Role

11). Roadmap
- Roadmap need able to contains all sub content when user create new wizard
- Required endpoints to build are:
DELETE /api/Roadmap/{id}
GET /api/Roadmap/{id}
PUT /api/Roadmap/{id}
GET /api/Roadmap
POST /api/Roadmap

12). History
- As possible we no need to delete any row on database. We just need update status to archived.
- For any updates we need to store any updates on each history table
- This should not be exposed as API. It should be done as a backend logic internally.
- Create related function and database that will cover these endpoints:
-- AlignOutcomeHistory
-- KPIHistory
-- OutcomeHistory
-- RoadmapHistory
-- StrategyHistory

Filtering
The parameters should be returned in the response with the total count of matching records as well, It is preferred if the default values are configurable.

Pagination
We need to add pagination when user scrolling the page, these endpoint should have the following parameters :
- offset (default 0)
- limit (default 20)
The parameters should be returned in the response with the total count of matching records as well, It is preferred if the default values are configurable.

Validation
Perform the following validation in each API endpoint :

Path parameters :
- They usually represents the ID of existing objects, a validation should be done that the entity with ID exists, otherwise return error.
- Required input parameters in create endpoints must be present. For update endpoints we can pass only the fields that should be updated.
- Required input parameters should be validated against their expected type.
- Optional input parameters should be validated against their expected type if provided.
- Foreign keys must be validated.
- Validation between callbacks must be performed.

Errors should be in json format with three fields :
- code : http status code
- status : success/failed
- message : reason of failure

Request and Response
- GET endpoints parameters will accept parameters as query strings, in key/value format.
- Create/Update endpoint parameters will accept input as JSON format.
- Exclude file upload endpoints which cannot work with application/json content type.
- Response should be in json format always.

Unit Testing
IMPORTANT! All of your code should be test covered. You must cover at least +90% of the code.
You need to test all cases and in test case assertion you need to assert accuracy of all fields.

Hosting
- It is preferred if you provide scripts and steps to deploy the application in AWS EC2
- Need support CI/CD from gitlab to AWS EC2
- SQL Server database on Azure

Documentation
- Provide a detailed README documentation for how to setup and configure the application.

Configurations
- You are expected to use environment variables to store sensitive information and environment-specific configurations.   

Scripts
- Provide scripts for create all tables/collection
- Provide script to insert default users.
- Provide script to insert sample data

Postman Client
- Create postman environment and collection file that will listing all calls and sample data.
- Group each routes on Postman collection into separate folder
- Provide description for endpoints
- Get Started with Postman : http://www.getpostman.com/

Final Submission Guidelines

Deliverables
- All required source code.
- Postman collections and configuration
- Sample init data sql
- .gitlab-ci.yml (CI/CD Deployment)
- Document(s) that will help future developer have better understand how to deploy and continue update the Web API.

ELIGIBLE EVENTS:

Topcoder Open 2019

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30082378