--- title: 'Gameopedia - Tech Lead Developer ' --- Lead Developer Assessment === ![downloads](https://img.shields.io/apm/l/vim-mode) Hello! Thanks so much for your interest in joining Gameopedia tech team as a Lead developer! Below is a technical test for you! Please do let us know if you have any questions! You can email me on asit@gameopedia.com Best of luck! Technical description =========== We work on many of the latest and greatest of technologies and versions respectively. Hence we are always challenged with learning something or the other or sometimes simply revamping what we do. Hence this assessment is to get to know you or put you in an unfamiliar but similar situation. We look upto you to be familiar with at least (some of) the following technologies (if not all) and show the ability in your coding and architecture! ### Frontend technologies: * ECMA 6 * Frontend framework e.g. VueJS/AngularJS/ReactJS * Webpack * HTML/CSS as needed ### Backend technologies: * NodeJS 8+ with ECMA 6 * Golang 1+ * Python 3+ * Django 3+ * RoR 6+ * MYSQL or MongoDB or anything else of that kind * Redis or anything else of that kind (if you choose to use) ### Deployment * Docker (mandatory) & Kubernetes (optional) * or Serverless framework with AWS lambda or Cloud functions if you prefer so! ### Testing * Integration testing * Unit testing If you dont know something above, thats actually a great opportunity to learn it and implement it in this task. ## List of Tasks **The Challenge**: We all play games, games are often downloaded from marketplaces online. Success of such marketplaces depend on the relevance of games shown to a user. For example: if they show strategy games to a user who loves only driving and racing games, he may not buy them and move to another marketplace that meets his requirement. Or if we show child/baby games to a 21 year old or vice-versa, that would be *inappropriate* The task you are challenged today is to build an *e-storefront experience* in which **users** are shown games that are **appropriate** for their age and that satisfy **atleast one attribute** per game category. The relevancy is *Age* [TOC] ## Goal 1: Import data to a Database To show anything you need data. You can access it here on this [link](https://docs.google.com/spreadsheets/d/1BIrukMbQvBv8T5oy9ZpYHLcqqUff_bXpNzBwKJVTnJA/edit?usp=sharing). There are 8 users, their age, the categories of games they play and a few other helpful attributes are listed 1. Create a table/s with this data on any DB you choose 2. Create a user table, game table, attributes table 3. Import this data to reflect in the database 4. Create a second table with the list of games to be shown on the e-storefront 5. Test the DB Goal 2: Understand User story --- PS: See the excel sheet tab 'Users' [link](https://docs.google.com/spreadsheets/d/1BIrukMbQvBv8T5oy9ZpYHLcqqUff_bXpNzBwKJVTnJA/edit?usp=sharing) ```gherkin= Feature: Show appropriate games # The first example has two steps Scenario: Adrian wants to buy a game, decides to visit your app. He first logs in Appropriation: He loves war and SciFi games of shooting and sports game genre Then Your app should show Gears of War 4, Madden NFL 20, NBA 2K20 Then Adrian likes them. He buys the game. Logs out. # The second example has three steps Scenario: Breaker joins a game Given the Maker has started a game with the word "silky" When the Breaker joins the Maker's game Then the Breaker must guess a word with 5 characters ``` > "The desire to create is one of the deepest yearnings of the human soul." [name=Dieter F. Uchtdorf] ```gherkin= Feature: Buy Game As a Shopper I want to put items in my shopping cart Because I want to manage items before I check out. But in this case, lets just focus on a success message on a buy button but if you want to make it logical, here is the scenario Scenario: User adds item to cart Given I'm a logged-in User When I go to the Item page And I click "Add item to cart" Then the quantity of items in my cart should go up And my subtotal should increment And the warehouse inventory should decrement ``` > Note: You have to have a buy button under each game with as much details about the game that you could portray. If you choose to only showcase the backend and skip the front end part, you are welcome to do so, however, please integrate swagger and explore the REST APIs with user login and API token. The response should be in JSON format Goal 3: User flows --- ```sequence Adrian->Logs in: wants to buy a new game Note right of Landing page: appropriate games shown from DB Buy Game-->Adrian: Clicks Buy button.(generate dummy success message) Adrian->>Logs out: thats it thanks! ``` > Download userflow diagram here https://drive.google.com/file/d/1B6QxgOpcxJkmRmDkywJk40F8wyMgoog_/view?usp=sharing Goal 4: Build Login --- 1. Use any authentication system you like 2. Use any simple login page with minimal design 3. Apply html validations as needed 4. The user should login and land on a page that shows list of games. ## Goal 5 - Security **Security** (Optional) Young hackers are always around and growing. They need a playground to test their toys however Ambee can't be the target! Lets implement a rate limiter (redis?): * A single IP should not be able to hit your app more than 100 times per min * Integration of oAuth (https://auth0.com/), JWT or CSRF or SAML(SSO types) * Anything else you would like to do to secure your app? Goal 6: Dynamic landing page based on User preferences/choices --- 1. Based on user logged in the games that load should change 2. The games should load thumbnail from the URL 3. Put dummy costs, create additional columns as needed 4. Use of material design or bootstrap is expected. However, feel free to apply your own ideas and creativity 5. We follow TDD, please write appropriate tests for user actions. The higher the coverage the better it will be 6. Perform QA, test the application PS: Execute the app as one or more stateless processes Goal 7: Prep for deploying: Containerize --- 1. We use Dockers, please dockerize your app. Please use free DB service 2. Deploy your app to [Heroku](https://www.heroku.com/deploy-with-docker) 3. Share the link with us PS: If you choose any other cloud deployment that works too. Else your github with a readme and a link to this project also works. We'll run it locally. ## Finally **Happy testing!** Last but not the least, testing! You can follow TDD or FDD! * There should be a way to test the application features and functions. * Must have integration tests! * Must have unit tests! ### Submit your code - Please don't forget to write your readme file which should contain what/why your have done things in certain way! Documentation is highly appreciated! - Your solution should be committed back into this repository like you would do in a normal project. - You can commit and push as many times as you want. - We prefer https://12factor.net/. - We value a clean coding style. It would be nice if you follow something like Airbnb's JavaScript Style Guide! Best of luck! Estimated Timelines --- ```mermaid gantt title A Gantt Diagram section Development Login + DB :a1, 2020-05-20, 5hr Landing page + backend :after a1 , 4hr Landing page + frontend :after a1 , 6hr section Testing QA :2020-05-21 , 4hr deploy : 2hr ``` > Please discuss with Asit. Always ask for questions. Know that all parts of this task are flexible based on your time, commitment and availability. ## Appendix and FAQ :::info **Need help or have a query?** Contact Asit ::: ###### tags: `Asessment` `Gameopedia` ###### Copyrights: Gameopedia- All rights reserved ###### Notice: Copying of this document or sharing this information is strictly prohibited and subject to plagiarism and clauses of licences under MIT general licence