Challenge Overview

Mentor ME is a responsive mobile app with the objective at assisting underachieving high school students – particularly those at risk of becoming school dropouts. Mentor ME enables, empowers and inspires new talent by building networking relationships from a list of mentors that assist you sharing ideas, guidance, learning and connecting with other leaders.

The propose of Mentor ME is be more effective and efficient at mentorship programs and to increase the coverage of current programs where younger adults can have access to volunteer mentors to get guidance and motivation to graduate. The core of Mentor ME is the match between the Mentee interests and opportunities to Mentor Skill.

The whole project consists of three parts:
- The mentor and mentee Android application.  
- A set of REST-based services to support data access and updates for the mobile applications.
- A batch Java application which updates the Haven OnDemand recommendation model with Professional and Personal Interest weightings and uses the Google Maps Geocoding API convert provided address info into Longitude and Latitude coordinates.

In this challenge, we’re going to update our services to become fully localized and also deal with some technical debt in our original architecture.  We have a number of tables and fields which aren’t being used or are misnamed for their actual purposes.  Here are the changes that we need to make:

1. Create a locale table.  We’re going to support English (en) and Spanish(es) locales initially.

2. Create a country_locale table (join table between locale and country).  This will contain the localized name for every country in both English and Spanish.

3. Create a state_locale table (join table between locale and state).  This will contain the localized name for every state in both English and Spanish.

4. Create a professional_interest_locale table (join table between locale and professional_interest and locale)

5. Create a personal_interest_locale table (join table between locale and personal_interest and locale).

6. Create a skill_locale table (join table between skill and locale).

6a. (New Requirement) Create a professional_consultant_area_locale table (join table between professional_consultant_area and locale) English: Psychology, Nutrition, Law, Social Work, Medicine, Financial Counseling.  Spanish:  Psicología, Nutrición, Derecho, Trabajo Social, Medicina, Consultoría Financiera

7. Rename the following table:  program_skills to institutional_program_skill.

8. Remove the following fields in the data model:
goal.goal_category_id
institutional_program.program_category_id 
goal.custom (New Requirement)
task.custom (New Requirement)

9. Remove the following tables:
custom_assigned_goal_data
custom_assigned_task_data
document_type
goal_category
professional_consultant_area
program_category
task_document
task_useful_link

9a. (New Requirement) - Add a language field to the institutional_program table. (values will be 'en' or 'es').  It should not be nullable.

10. Update our ddl.sql to reflect to the current data structure.

11. Update our testdata.sql to include locale-based reference data.  Spanish versions of the locale-based data can be found init-es.sql.  The one thing that is missing is a Spanish version of the “States” from the US.  Here they are:
Alabama, Alaska, Arizona, Arkansas, California, Carolina del Norte, Carolina del Sur, Colorado, Conécticut, Dakota del Norte, Dakota del Sur, Delaware, Distrito Federal de Columbia, Florida, Georgia, Hawái, Ídaho, Ilinóis, Indiana, Iowa, Isla de Rode, Kansas, Kentucky, Luisiana, Maine, Máriland, Masachusets, Míchigan, Minesota, Misisipi, Misuri, Montana, Nebraska, Nevada, Nueva Jersey, Nueva York, Nuevo Hampshire, Nuevo México, Ohio, Oklahoma, Oregón, Pensilvania, Texas, Tenesí, Utah, Vermont, Virginia, Virginia Occidental, Wáshington, Wisconsin, Wyoming.

12. Combine the init-es.sql and init-en.sql into single init.sql file which includes the new locale tables and data.

13. Update the drop.sql and clear.sql scripts to reflect the latest schema changes.

14. (Requirement Updated) Update our Lookup Controller REST endpoints to reflect the current table structure.  Let’s remove endpoints for document type, goal category, program categories, and personal consultant areas since we’re removing the underlying tables.  Also please update the GET endpoints for Countries, States, Personal Interest, Professional Interests, Professional Consultant Areas and Skills in our Lookup Controller to return data from the new locale-based tables based on the language header.  All this locale-based data is reference data and won’t be updatable by Mentor and Mentee user roles.  Our code should use headers to identify the language of the requester as suggested here:  http://apiux.com/2013/04/25/how-to-localize-your-api/

15. Update Institution Controller to accept the language header and to return locale-based data for Countries and States.

15a. (New Requirement) Update the Institution Program Controller so that it accepts the language header and only returns Institutional Programs based on the language provided in the request (either English or Spanish but not both).  

16. Update User Controller, MenteeController and MentorController to accept the language header to return and process locale-based data for Countries, States, Professional Interest, Personal Interests, Professional Consultant Areas and Skills.

17. Create new unit tests to cover the new functionality.

18. Update our postman files to reflect current state of the API.

Final Submission Guidelines

You can find the code for this challenge here:  https://github.com/topcoderinc/HPE-LP-MentorMe-Services
This repository is public.  You should fork the repository if you plan to participate in the challenge and upload a zip of your locally updated repo.
The winning submission will be asked to submit a pull request to the repository with their changes.

Your submission must also include a verification guide with details on how to verify the changes you made.

ELIGIBLE EVENTS:

2017 TopCoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30057140