# DINO\_SCRUM ## MODEL ###Product ```json5 { "id": Int, "name": String, "price": Float, "quantity": Int, "quantityMax": Int, "imageLink": String } ``` ``id`` - id of product, ``name`` - name of product with minimal length 2; ``price`` price of product, cannot be under 0.00; ``quantity``: quantity of product in database, cannot be under 0; ``quantityMax``: maximum quantity of product in database, cannot be under 0; ``imageLink``: link to image of product Any of these couldn't be ``null`` ## API ###Edit quantity of the product. The service will handle `POST` requests for `/api/product/change-quantity`, by changing quantity of product in database. ``id`` - product's to change `id` ``change`` - value of change (positive value for increase quantity, negative valude for decrease). ```json POST /api/product/change-quantity Content-Type: application/json { "id": Int, "change": Int } ``` Response `HttpStatus.OK` with ``JSON``: ```json { "id": Int, "name": String, "price": Float, "quantity": Int, "quantityMax": Int, "imageLink": String } ``` * * * ###Retrieve a paginated list of products The service will handle `GET` requests for `/api/get-all`, by retreving a paginated list of products. Optionally with a `page`, `size` **or** `page`, `size` and`sort` parameters in the query string. Page start numbering on `page=0`. Default list is sorted by `id`. ```json GET /api/get-all?page=0&size=1&sort=id Content-Type: application/json ``` Response with ``HttpStatus.OK`` with ``JSON`` : ```json { "content": [ { "id": Int, "name": String, "price": Float, "quantity": Int, "quantityMax": Int, "imageLink": string }, { (...) } ], "pageable": { "sort": { "sorted": Boolean, "unsorted": Boolean, "empty": Boolean }, "offset": Int, "pageSize": Int, "pageNumber": Int, "unpaged": Boolean, "paged": Boolean }, "totalPages": Int, "totalElements": Int, "last": Boolean, "size": Int, "number": Int, "numberOfElements": Int, "first": Boolean, "sort": { "sorted": Boolean, "unsorted": Boolean, "empty": Boolean }, "empty": Boolean } ``` * * * ###Get price of all products. The service will handle `GET` request on `/api/get-price-of-all` returing `Float` price of all products in the database. ```json GET /api/get-price-of-all Content-Type: application/json ``` Response ``Http.Status.OK`` with ``JSON``: ```json { "price-of-all": Float } ``` * * * ###Create a new product. The service will handle `POST` request `/api/product/add`, by adding `Product` to database. ```json POST /api/product/add Content-Type: application/json { "id": Int, "name": String, "price": Float, "quantity": Int, "quantityMax": Int, "imageLink": String } ``` Response `HttpStatus.CREATED` with `JSON` ```json { "id": Int, "name": String, "price": Float, "quantity": Int, "quantityMax": Int, "imageLink": String } ``` * * * ###Delete product with `id`. The service will handle `DELETE` request `/api/delete-product`, by ```json DELETE /api/delete-product Content-Type: application/json { "id": Int } ``` ```json Response: HttpStatus.OK ``` * * * ###Get product with `id` The service wil handle `GET` request `/api/product/get-by-id`, by returning product with `id`. ```json GET /api/product/get-by-id Content-Type: application/json { "id": Int } ``` Response ``Http.Status.OK`` with `JSON`: ```json { "id": Int, "name": String, "price": Float, "quantity": Int, "quantityMax": Int, "imageLink": String } ``` * * * ###Update product The service will handle ``POST`` request `/api/product/update/{id}` with path variable `id`, by updating existing product. In request `id` is required, fields which won't be modified should be `null`. ```json POST /api/product/update/{id} Content-Type: application/json { "id": Int, "name": String, "price": Float, "quantity": Int, "quantityMax": Int, "imageLink": String } ``` Response ``Http.Status.OK`` with `JSON`: ```json { "id": Int, "name": String, "price": Float, "quantity": Int, "quantityMax": Int, "imageLink": String } ```