Skip to content

mayconcarlete/FullStackWebDeveloperChallenge

 
 

Repository files navigation

Full Stack Web Developer Challenge

Principles:

  • SRP - Single Responsability Principle
  • OCP - Open Closed Principle
  • LSP - Liskov Substitution Principle
  • ISP - Interface Segregation Principle
  • DIP - Dependency Inversion Principle
  • SOC - Separation of Concerns
  • DRY - Don't Repeat Yourself
  • KISS - Keep It Simple, Silly
  • Composition Over Inheritance
  • Small Commits

Design Patterns:

  • Factory
  • Adapter
  • Dependency Injection
  • Singleton

Health Commits only:

  • Using Husky with Lint-Staged to make sure that only will be commit/push code that pass in all unit and integration tests.

Methodology and Design:

  • TDD
  • Conventional Commits
  • Modular Design

Top Level Architecture Design

GetThreeWordsController

alt text

UpdateWordController

alt text

DeleteWordController

alt text

Start Application

  • rename file .env.example to .env
  • docker-compose up
  • You can test the api opening swagger docs or calling each specific route
  • localhost:3000/api-docs
  • localhost:3000/delete-word/:word
  • localhost:3000/get-three-words/:word
  • localhost:3000/update-word/:word

Swagger

alt text

Test Driven Development is awesome!

  • Coverage over all core system

alt text

Search algorithm used: Levenshtein

Task Description

Your task for this challenge is to create a small search engine comprising of two parts, a web-based user interface and a server component that exposes a REST API which provides search results retrieved from a corpus of text that will be provided to you in corpus/hemingway.txt.

Your submission will be evaluated for conforming to the specifications outlined below as well as code quality (maintainability, scalability, performance etc.). You are permitted to use any resources and libraries you wish, however, you should be able to justify design choices in your code.

Requirements

The basic search engine should be capable of the following three operations.

  1. Given a query consisting of a single word, display the 3 most similar words in the search corpus according to some similarity metric of your choosing.
  2. Given a single word w, update the search corpus with w. The new word w should immediately be queryable.
  3. Given a single word w, remove the most similar word to w in the corpus from further search results.

User Interface

The user interface should be a browser-based application developed using your JavaScript web framework of choice. It should support the three aforementioned operations. How this is done is completely up to you. Use your creativity and imagination to create a UI that will set your submission apart!

REST API

The REST API can be implemented using whatever language and frameworks of your choosing. Again, like the UI, it needs to support the three operations listed above. How you choose to accomplish this task is up to you.

Deliverables

To submit your challenge, fork this repository and provide the link to your forked repository. You should also update this README to include instructions on how to run your search engine. Tests are not mandatory but will be considered bonus points if you provide them.

About

Take home challenge for full stack web developers

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 97.5%
  • JavaScript 1.4%
  • Other 1.1%