Coder Social home page Coder Social logo

takehome's Introduction

Candidate Takehome Exercise

This is a simple backend engineer take-home test to help assess candidate skills and practices. We appreciate your interest in Voodoo and have created this exercise as a tool to learn more about how you practice your craft in a realistic environment. This is a test of your coding ability, but more importantly it is also a test of your overall practices.

If you are a seasoned Node.js developer, the coding portion of this exercise should take no more than 1-2 hours to complete. Depending on your level of familiarity with Node.js, Express, and Sequelize, it may not be possible to finish in 2 hours, but you should not spend more than 2 hours.

We value your time, and you should too. If you reach the 2 hour mark, save your progress and we can discuss what you were able to accomplish. We do not expect you to "go the extra mile" and spend more than 2 hours on this test. You will not get extra credit if you spend more than 2 hours.

The theory portions of this test are more open-ended. It is up to you how much time you spend addressing these questions. We recommend spending less than 1 hour. For the record, we are not testing to see how much free time you have, so there will be no extra credit for monumental time investments. We are looking for concise, clear answers that demonstrate domain expertise.

Project Overview

This project is a simple game database and consists of 2 components.

The first component is a Vue.js UI that communicates with an API and renders data in a simple browser-based UI.

The second component is an Express-based API server that queries and delivers data from a SQL-lite data source, using the Sequelize ORM.

This code is not necessarily representative of what you would find in a Voodoo production-ready codebase. However, this type of stack is in regular use at Voodoo.

Project Setup

You will need to have Node.js, NPM, and git installed locally. You should not need anything else.

To get started, initialize a local git repo by going into the root of this project and running git init. Then run git add . to add all of the relevant files. Then git commit to complete the repo setup. You will send us this repo as your final product.

Next, in a terminal, run npm install from the project root to initialize your dependencies.

Finally, to start the application, navigate to the project root in a terminal window and execute npm start

You should now be able to navigate to http://localhost:3000 and view the UI.

You should also be able to communicate with the API at http://localhost:3000/api/games

If you get an error like this when trying to build the project: ERROR: Please install sqlite3 package manually you should run npm rebuild from the project root.

Practical Assignments

Pretend for a moment that you have been hired to work at Voodoo. You have grabbed your first tickets to work on an internal game database application.

FEATURE A: Add Search to Game Database

The main users of the Game Database have requested that we add a search feature that will allow them to search by name and/or by platform. The front end team has already created UI for these features and all that remains is for the API to implement the expected interface. The new UI can be seen at /search.html

The new UI sends 2 parameters via POST to a non-existent path on the API, /api/games/search

The parameters that are sent are name and platform and the expected behavior is to return results that match the platform and match or partially match the name string. If no search has been specified, then the results should include everything (just like it does now).

Once the new API method is in place, we can move search.html to index.html and remove search.html from the repo.

FEATURE B: Populate your database with the top 100 apps

Add a populate button that calls a new route /api/games/populate. This route should populate your database with the top 100 games in the app store and the google play store. You are free to use any mean necessary to get and store the information. Please remember that simple solutions are preferred.

Theory Assignments

You should complete these only after you have completed the practical assignments.

The business goal of the game database is to provide an internal service to get data for all apps from all app stores. Many other applications at Voodoo will use this API when they need to get app data.

Question 1

For you what is missing in the project to make it production ready?

  • séparation des différents composants pour une architecture plus aéré, maintenable et évolutive

-- Routes -> middleware d'auth (si besoin), extraction des datas du JWT ou session -- handler -> séparation des datas du protocol (HTTP/autre) -> permet une meilleur evolutivité et plus simple de connecter différents protocol si besoin dans l'avenir -- business code -> séparation des différentes function de gestion par route -- file repo -> Model management with a class extend -- dynamic class repo for primary crud operation

-- folder helper: for account owning function, user access, ...

  • separate server start and app server settings
  • Input data test
  • Gestion d'erreur
  • logging management
  • var d'env config
  • hot reload for dev env (nodemon)
  • typescript

exemple: Folder manager

Question 2

To achieve the final business goal what is your Roadmap and Action plan?

0'- all on docker, sensitive data separation for access (gpg with blackbox)

0- git hooks, hot reload, linter, CI, automatic changelog, semver tag for deployement, different env 1- typescript, init documentation 2- create all managers 3- create route & data validation 4- create middleware 5- create handler 6- create generic & specific controller 7- create model & repo 8- start to separate different business function

// parallel

  • create typed data for all models, class
  • create test for all route
  • think about internal call between manager

// rules

  • repo file is specific by manager -- Game repo can't be called by User manager -- User business need to pas by an internal (folder) Game function

takehome's People

Contributors

stephane317 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.