Skip to content

mohammedabualsoud/express-transnational-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Expreess Web Server

Postman APIs: https://www.getpostman.com/collections/bf2e41da1e2ac0ea42bd

💫 Welcome! 🎉

This backend exercise involves building a Node.js/Express.js app that will serve a REST API.

Data Models

All models are defined in src/model.js

Profile

A profile can be either a client or a contractor. clients create contracts with contractors. contractor does jobs for clients and get paid. Each profile has a balance property.

Contract

A contract between and client and a contractor. Contracts have 3 statuses, new, in_progress, terminated. contracts are considered active only when in status in_progress Contracts group jobs within them.

Job

contractor get paid for jobs by clients under a certain contract.

Getting Set Up

The exercise requires Node.js to be installed. We recommend using the LTS version.

  1. Start by cloning this repository.

  2. In the repo root directory, run npm install to gather all dependencies.

  3. Next, npm run seed will seed the local SQLite database. Warning: This will drop the database if it exists. The database lives in a local file database.sqlite3.

  4. Then run npm start which should start both the server and the React client.

Technical Notes

  • The server is running with nodemon which will automatically restart for you when you modify and save a file.

  • The database provider is SQLite, which will store data in a file local to your repository called database.sqlite3. The ORM Sequelize is on top of it. You should only have to interact with Sequelize.

  • To authenticate users use the getProfile middleware that is located under src/middleware/getProfile.js. users are authenticated by passing profile_id in the request header. after a user is authenticated his profile will be available under req.profile. make sure only users that are on the contract can access their contracts.

  • The server is running on port 3001.

APIs To Implement

Below is a list of the required API's for the application.

  1. GET /contracts/:id

  2. GET /contracts - Returns a list of contracts belonging to a user (client or contractor), the list should only contain non terminated contracts.

  3. GET /jobs/unpaid - Get all unpaid jobs for a user (either a client or contractor), for active contracts only.

  4. POST /jobs/:job_id/pay - Pay for a job, a client can only pay if his balance >= the amount to pay. The amount should be moved from the client's balance to the contractor balance.

  5. POST /balances/deposit/:userId - Deposits money into the the the balance of a client, a client can't deposit more than 25% his total of jobs to pay. (at the deposit moment)

  6. GET /admin/best-profession?start=<date>&end=<date> - Returns the profession that earned the most money (sum of jobs paid) for any contactor that worked in the query time range.

  7. GET /admin/best-clients?start=<date>&end=<date>&limit=<integer> - returns the clients the paid the most for jobs in the query time period. limit query parameter should be applied, default limit is 2.

 [
    {
        "id": 1,
        "fullName": "Reece Moyer",
        "paid" : 100.3
    },
    {
        "id": 200,
        "fullName": "Debora Martin",
        "paid" : 99
    },
    {
        "id": 22,
        "fullName": "Debora Martin",
        "paid" : 21
    }
]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published