Welcome to our JavaScript Engineer Challenge
This Challenge consists of a series of tasks which may take between 4–6 hours to complete, depending on your experience level. The primary purpose of this test is to infer your “logical thinking” and “problem-solving” skills.
We want you to create an application for managing users. The application must meet the following requirements:
- Create new users;
- List users;
- Edit users;
- Delete users;
Fork this repository (to jump-start your test) and
run npm install
on both the /api
and /front
directories, then follow the requirements for the
Backend and Frontend when
developing your application.
Feel free to use any library you are used to or to create things your way. Just keep in mind the required frameworks for the frontend and backend, confirm if the library you will use don't have any problems with it.
To create the backend of this application we want you to use Nest.js as the framework. It's ok not knowing all the perks of the framework, but we want to see how you manage to work with it.
Your backend must meet the following requirements:
- It has to use a relational database (PostgreSQL, MySQL, MariaDB, etc...);
- The user needs to have one relation, being the "user_type";
- It needs to have unit tests;
- Your API needs to have a CRUD for the users;
- Your API needs to have validations for the fields:
- Only boolean for
active
fields; - Only valid e-mails for
email
fields; - Max size of 255 for
string
fields; - Only
UUID
forid
fields;
- Only boolean for
- Your API needs to follow the patterns of a REST implementation;
user_type
{
"id": "a8d7f-1j4...", // required
"description": "test", // required
"active": true, // required
"updatedAt": "", // required
"createdAt": "" // required
}
user
{
"id": "a8d7f-1j4...", // required
"nickname": "test", // required
"name": "test", // required
"phone": "99999999999",
"email": "email@test.com", // required
"user_type": 999, // required (relation)
"active": true, // required
"updatedAt": "", // required
"createdAt": "" // required
}
To create the frontend of this application we want you to use Angular with Angular Material as the framework. It's ok not knowing all the perks of the framework, but we want to see how you manage to work with it.
Your frontend must meet the following requirements:
- It has to communicate with your backend;
- It has to have a home page with a side menu and a list of users;
- It has to have a route to create/edit a user;
- When creating/editing the
submit
button needs to be disable until all required fields are validated;
- When creating/editing the
- It has to have a route to detail the user;
- It has to have a route to delete the user;
- When deleting a user, it should ask
for confirmation. The button to confirm
needs to be
disabled
until the nickname of the user being deleted is informed and validated (like the deletion of repositories in Github).
- When deleting a user, it should ask
for confirmation. The button to confirm
needs to be
It's up to you how you will define the frontend layout, if you will use new pages of modals for each interaction.
There are some extras we would like to see in your repository. These aren't required, feel free to include them or not.
- Use an authentication method (like
OAuth
); - Use something to register logs from your
application (like
Winston
withRedis
); - Generate a
Docker
image withDocker Compose
and the requiredmigrations
andseeders
(if you don't useDocker
in your application, please make sure to include on the repository andatabase dump
).
- Keep it simple
- Please ensure your readme file contains valid and simple instructions
- Please use placeholder data only (i.e. do not use real or identifiable information)
- Feel free to validate fields according to your own validation logic
- Verify the full functionality of your application prior to submission
Please submit your test as a Github repository URL, along with a readme file containing instructions on how to set up and run your application. If you'd like to submit a private repository, please add Raphael with view access to the private repository.
The deadline for submission is 7 days after you receive this challenge.
Submissions will not be accepted after this date.
Submit the repository URL to the person who asked you to take this challenge.
If you have any doubts, please submit them to rh@maxxidata.com.