feat: create a new product
Summary
It adds a POST /products
route that creates a new product.
What's in the box
Error handling
This PR introduce a better error channel with a refinement at the end of the chain allowing each layer of the application to return their own shaped error that will be later on converted into an ApiError.
Sql statements
Even tho it is not yet within the application itself (for now) this PR changed the shape of the database as follow:
CREATE TABLE inventory (
art_id int CONSTRAINT inventory_unique_article_id PRIMARY KEY,
name varchar NOT NULL,
stock integer NOT NULL CHECK ( stock >= 0 )
);
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name varchar NOT NULL
);
CREATE TABLE product_to_inventory (
product_id int,
amount_of int NOT NULL CHECK (amount_of > 0),
art_id int,
CONSTRAINT pti_product_id_exist
FOREIGN KEY(product_id)
REFERENCES products(id),
CONSTRAINT pti_art_id_exist
FOREIGN KEY(art_id)
REFERENCES inventory(art_id)
);
It name all the constraints so that the error handling can differentiate different situation.
Other changes
POST /inventory
route
Fix on Inventory was failing due to content type not being right in the send part, this PR fix it.