Challenge Overview
Challenge Objectives
- For this contest, we are looking at updating the application named "Legacy Processor"
- The "Legacy Processor" challenge information can be found in http://www.topcoder.com/challenges/30067743/?type=develop&noncache=true
- We need to change the "Legacy Processor" application to support Marathon Match challenges.
Project Background
- Topcoder is updating its api and one of them being updated is the Submission API. One of the scenarios that we are taking care of here is that when an user uploads a submission to Topcoder for a contest
- An application (not relevant for this contest) creates a message that contains details about this submission and sends it to an Apache Kafka instance.
- This challenge is part of a series of challenge to support the new Submission API service.
- Submission API service documentation can be found in https://tc-submission-api-dev.herokuapp.com/docs/ - just for reference
Technology Stack
- The application being built is a Node.Js application. Latest 8.x version should be use
- The online review is a Java application and has as database IBM Informix
Individual requirements
1. The legacy processor already listens to the submission create event.
2. Update src/services/NewSubmissionService.js to check if the current challenge is a Marathon Match - check here for example.
3. Move the logic in src/services/NewSubmissionService.js from 87-127 to a new service that will handle non Marathon Match track.
4, Create a new service to handle Marathon Match track. This service will listen for create events in Kafka and insert data into the legacy Informix Database.
5. The new service from step 4) will need to populate Informix database tables. The description is below:
a) Mapping from Informix database column to submission record property:
coderID -> memberId
contestID -> challengeId
roundID -> will come from project_info table using as project_id = challengeId and project_info_type_id = 56
componentID -> will come from round and round_component table using as round_component.round_id = roundID and round.round_id = 17263
componentStateID -> will come from long_component_state table using as round_id = roundID and component_id = componentID and coder_id = coderID
contestID -> challengeId
roundID -> will come from project_info table using as project_id = challengeId and project_info_type_id = 56
componentID -> will come from round and round_component table using as round_component.round_id = roundID and round.round_id = 17263
componentStateID -> will come from long_component_state table using as round_id = roundID and component_id = componentID and coder_id = coderID
b) Update long_submission_state. See forum posts for details.
b) Populate long_submission table with data: componentStateID, submissionNoCount, submittedCode (will fetch from url property), openTime (time phase was opened), currentTime, 0, languageId (Java,C++,C#), isExample. The value open_time must be retrieved from long_problem_submission table.
Environment setup
- Legacy base code: https://github.com/topcoder-platform/legacy-sub-processor, branch: develop
- Online Review base code: https://github.com/topcoder-platform/tc-online-review, branch: maven
- Instructions to run OR: https://github.com/appirio-tech/tc-common-tutorials/tree/maven/docker/online_review, branch: maven
- Direct App base code: https://github.com/appirio-tech/direct-app, branch: dev
- Instructions to run Direct: https://github.com/appirio-tech/tc-common-tutorials/tree/maven/docker/direct-app, branch: maven
Final Submission Guidelines
- Full application in a zip file
- Deployment guide as described in specifications