<h3>
Version 1 of Our Application
</h3>
> **Currently, we have two roles in our application**
> 1- Cookers
> 2- Users(customers)
<hr>
> ## For both users and cookers
<h3>Authentication: /auth</h3>
* POST **/register**: Creates a new user account using Email,Google and Facebook
* POST **/login**: Authenticates a user and generates an access token.
* POST **/logout**: Invalidates the access token and logs out the user.
<hr>
> ## For users
<h3>User Profile: /users</h3>
* GET **/:userId/profile**: Retrieves user profile information by ID.
* GET **/:userId/orders**: Retrieves past orders for a specific user.
<hr>
<h3>Food Choices: /foods</h3>
* GET **/foods**: Retrieves a list of food choices.
* GET **/foods/:foodId**: Retrieves the details of a specific food item by ID.
<hr>
<h3>Cart: /cart</h3>
* GET **/cart**: Retrieves the user's cart.
* POST **/cart**: Adds an item to the user's cart.
* PUT **/cart/:itemId**: Updates the quantity of an item in the user's cart.
* DELETE **/cart/:itemId**: Removes an item from the user's cart.
* DELETE **/cart**: Clears the user's cart.
<hr>
<h3>Reviews and Ratings:</h3>
* GET **/foods/:foodId/reviews**: Retrieves reviews for a specific food item by ID.
* POST **/foods/:foodId/reviews**: Creates a new review for a specific food item.
<hr>
<h3>Filters:</h3>
* GET **/foods?location=:location**: Retrieves a list of food choices by location.
* GET **/foods?allergies=:allergies**: Retrieves a list of food choices based on specific allergies.
* GET **/foods?location=:location&allergies=:allergies**:
Retrieves a list of food choices based on a specific location AND specific allergies
* GET **/foods?preferences=:preferences:** Retrieves a list of food choices based on user preferences.
* GET **/foods?preferences=:preferences&location=:location&allergies=:allergies**:
Retrieves a list of food choices based upon a user preferences AND a specific location AND specific allergies.
<hr>
> ## For cookers
>
<h3>Cooker Dishes: /cookers</h3>
* GET **/cookers/:cookerId/dishes**: Retrieves the list of dishes associated with a specific cooker by ID.
* POST **/cookers/:cookerId/dishes**: Creates a new dish for a specific cooker by ID.
* PUT **/cookers/:cookerId/dishes/dishId**: Updates a new dish for a specific cooker by ID.
* DELETE **/cookers/:cookerId/dishes/dishId**: Deletes a new dish for a specific cooker by ID.
<hr>
| Endpoint | Authentication | Authorization |
| -------- | -------- | -------- |
/auth/register |No| No
/auth/login |No| No
/auth/logout |Yes |No
/users/:userId/profile |Yes |Yes
/users/:userId/profile-picture |Yes |Yes
/users/:userId/orders|Yes |Yes
/foods |No |No
/cookers/:cookerId/dishes |Yes |Yes
/foods/:foodId |No |No
/cart |Yes |Yes
/foods/:foodId/reviews |Yes |Yes
/foods?location=:location |No |No
/foods?allergies=:allergies |No |No
/foods?preferences=:preferences |No |No
/cookers/:cookerId/profile |Yes |Yes