0% found this document useful (0 votes)
45 views2 pages

DemoUpCliplister Coding Challenge Backend

The Cliplister Coding Challenge for Senior Developers involves a theoretical and practical task focused on backend development using Node.js and TypeScript. The theoretical part requires modeling data storage for Assets, Categories, and Collections in a microservice architecture, while the practical part involves creating a CRUD application for Assets using Express and PostgreSQL. Evaluation criteria include clarity of diagrams, organization of code, error handling, and documentation, with a total of 100 points possible across both parts.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views2 pages

DemoUpCliplister Coding Challenge Backend

The Cliplister Coding Challenge for Senior Developers involves a theoretical and practical task focused on backend development using Node.js and TypeScript. The theoretical part requires modeling data storage for Assets, Categories, and Collections in a microservice architecture, while the practical part involves creating a CRUD application for Assets using Express and PostgreSQL. Evaluation criteria include clarity of diagrams, organization of code, error handling, and documentation, with a total of 100 points possible across both parts.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

DemoUp-Cliplister Coding Challenge

Backend
Node.js | Typescript | Layered Architecture | TDD | Micro Services

Welcome! You are assigned the Cliplister Coding Challenge for Senior Developers consisting of a
theoretical and a practical part. The theoretical part includes conceptual work (no code), while
the practical part includes creating a backend application using the Express framework.

Theory (1h)
Model conceptually the data storage for millions of Assets, Categories and Collections within
their bounded contexts in a microservice-oriented architecture (no mono schema).

● Model the following entities and their microservice boundaries with a graphical tool of
your choice (Drawio, Miro, pen and paper, etc.):
o Asset (an Image or Document)
o Category
o Collection (a collection of Assets, being like a container for one or more assets)
● Model the relations
o An Asset has one or more Categories
o A Collection has one or more Assets
o A Collection has one or more Categories (same Categories from above)
● Justify/argue your solution with assumed requirements! When there are rejected
solutions, tell us why you rejected them.
● Pro task: distinguish between read and write optimized model.

Practice (2h)
You are provided with an initial boilerplate ↗ of an Express application and a Dockerfile for
setting up a Postgres database. The app should handle basic CRUD operations of an “Asset” (an
Asset here being a picture or a video). To query the database and for schema creation you can
use an ORM or native queries (schema creation code provided in the boilerplate).

● build a Postgres schema to store Assets


● Implement the following endpoints for the resource:
a. POST /assets: Create a new asset
b. GET /assets/:uuid: Retrieve a specific asset by UUID
● implement validation of user input
● implement error handling of application errors (i.e. invalid route) and client errors (i.e.
input validation) while returning meaningful error messages
● write unit and integration tests for the authentication and CRUD endpoints using a
testing framework like Jest
● optional: setup linting and commit hook.
● optional: add additional routes (GET /assets, DELETE /assets/:uuid)
● optional: Document the API endpoints and their expected request/response formats
using a tool like Swagger or by providing a detailed README file.
General Guidelines
● Ensure your code follows best practices, including separation of concerns, error
handling, and code reusability. Use a Layered Architecture approach.
● You are free to use any additional libraries or packages that you deem necessary.
● Use appropriate status codes and response formats for different scenarios according to
the REST API standard.
● Drop tasks when time pressure requires you to do so.

Evaluation
Your submission will be evaluated based on the following criteria:

● Theory part (50 pts)


○ 10 pts: Diagram clear, unambiguous, following modeling standards
○ 10 pts: Entities and relations modeled
○ 10 pts: reasoning explained / description given
○ 10 pts: bounded contexts are clear
○ 10 pts: additional read model provided
● Practical part (50 pts)
○ 10 pts: application, business code and database code are well organized.
○ 10 pts: proper error handling and validation
○ 10 pts: tests are implemented
○ 10 pts: additional routes are implemented
○ 5 pts: linting and commit hook implemented
○ 5 pts: documentation added

Deliverables
● A link to a repository (or a zip file) containing the project.
● Include additional instructions on how to use the application in README.
● Ensure that the application runs without any errors or issues.
● Include a brief explanation of your approach and any additional notes you feel are
necessary.

Note: The challenge is designed to be completed within 3 hours, but you can submit it within 24
hours if needed.

Have fun coding!

You might also like