Skip to content

IbrhmSptra/FoodoWeb-Backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FOODO BACKEND

file-cover-1.png

Overview

Foodo adalah sebuah website dimana user bisa melihat resep dari berbagai jenis makanan dengan beberapa kategori yaitu, nusantara, jepang, korea, dan western. Beserta penjelasan bahan dan langkah untuk memasak makanan yang user inginkan dan juga disediakan fitur "delivery recipe" yaitu user dapat memesan bahan-bahan untuk memasak sesuai dengan menu yang dipilih, dengan pilih menu resep lalu isi alamat dan bayar maka bahan-bahan yang diperlukan untuk memasak akan dikirim ke alamat user.

Quick Start

Clone repository:

git clone https://github.com/HSBC-Kelompok-1/Foodo-Backend.git

Clone repository:

cd Foodo-Backend

Install dependencies & Create .env file from .env.example:

$ npm install

Start the server on development:

$ npm run dev

View the website at: http://localhost:3000

Start the server on production:

$ npm start

API

- Authentication

Endpoint : POST /auth/register

Summary : route for making new user account

Request :

  • Name : username
    In : body
    Description : username account max 12 char
    Required : true
    Type : String

  • Name : email
    In : body
    Description : email account, must be valid email format
    Required : true
    Type : String

  • Name : password
    In : body
    Description : password acoount, must be strong password
    Required : true
    Type : String

Response Success :

{
   "data": {
        "uuid": "0ff0a33e-c967-42ba-b842-35a1f871e5db",
        "email": "admin100@gmail.com",
        "username": "ibrhmsptra"
    },
    "message": "Create Account Success"
}

Response Error :

{
   "message" : "Email alredy exists"
}



Endpoint : POST /auth/login

Summary : route for login and authenticate user

Request :

  • Name : email
    In : body
    Description : email account, must be valid email format
    Required : true
    Type : String

  • Name : password
    In : body
    Description : Must be the same password used for that email
    Required : true
    Type : String

Response Success :

{
   "data": {
        "uuid": "0ff0a33e-c967-42ba-b842-35a1f871e5db",
        "email": "admin100@gmail.com",
        "username": "ibrhmsptra"
    }
}

Set Cookie :

token =
  "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiYjVhZjg1YjYtZmE1OS00ZmZkLThhNDctZTRiN2U5ZDFiZTEzIiwiZW1haWwiOiJpYnJobXNwdHJhQGdtYWlsLmNvbSIsInVzZXJuYW1lIjoiaWJyaG1zcHRyYSIsImlhdCI6MTcxMzQzMjE2MCwiZXhwIjoxNzEzNDM1NzYwfQ.NzpYiArtWNbo9WKfKv-ueGsqRoTEbtylE_6ty9L6kfA";

Response Error :

{
   "message" : "Invalid credentials"
}



Endpoint : DELETE /auth/logout

Summary : route for logout and remove cookie token from user

Response Success :

{
    "message" : "Successfully logout"
}

Set Cookie :

token = null;

Response Error :

{
   "message" : "Unauthorized user"
}

Endpoint : GET /auth/validate

Summary : route for verify JWT from cookie HTTP-Only

Request :

  • Name : token
    In : cookies
    Description : JWT auth user
    Required : true
    Type : String

Response Success :

{
    "message": "valid",
    "user": {
        "uuid": "170df627-bce2-4feb-81ce-1fedda2b718d",
        "email": "ibrhmsptra@gmail.com",
        "username": "IbrhmSptra",
        "iat": 1715672235,
        "exp": 1716277035
    }
}

Response Error :

{
   "message" : "Unauthorized user"
}

- Categories

Endpoint : GET /api/categories

Summary : To get all food categories on foodo website.

Response Success :

{
   "data" :[
      {
         "id" : 1,
         "name" : "Korea",
         "header_image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/Banner/Korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9CYW5uZXIvS29yZWEucG5nIiwiaWF0IjoxNzA5ODc4NzgzLCJleHAiOjE3NzI5NTA3ODN9.TgW03aNnWHB6tb1lFYYnbc6YzyNCyclGETKgzOPeKSE&t=2024-03-08T06%3A19%3A43.378Z",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z"
      },
      {
         "id" : 2,
         "name" : "Jepang",
         "header_image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/Banner/Jepang.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9CYW5uZXIvS29yZWEucG5nIiwiaWF0IjoxNzA5ODc4NzgzLCJleHAiOjE3NzI5NTA3ODN9.TgW03aNnWHB6tb1lFYYnbc6YzyNCyclGETKgzOPeKSE&t=2024-03-08T06%3A19%3A43.378Z",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/jepang.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z"
      }
   ]
}

Response Error :

{
   "message" : "Data not found"
}



Endpoint : GET /api/categories/:id

Summary : To get one category by id

Request :

  • Name : id
    In : params
    Description : spesific id for category
    Required : true
    Type : Int

Response Success :

{
   "data": {
        "id": 21,
        "name": "Nusantara",
        "header_image": "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/Banner/Nusantara.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9CYW5uZXIvTnVzYW50YXJhLnBuZyIsImlhdCI6MTcwOTg4Nzg3MiwiZXhwIjoxNzcyOTU5ODcyfQ.8YywnlmJsDq_0Abpos3MX0CHynoke1gEYgm87LuxCtc&t=2024-03-08T08%3A51%3A12.688Z",
        "image": "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/nusantara.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9udXNhbnRhcmEucG5nIiwiaWF0IjoxNzA5NjM5NjIxLCJleHAiOjE3NzI3MTE2MjF9.f5dnmz8XE-zmdbyomuaJQkloaoYm0qZSoU6LYlCye3U&t=2024-03-05T11%3A53%3A42.072Z"
    }
}

Response Error :

{
   "message" : "Data not found"
}

- Food

Endpoint : GET /api/food?page=1

Summary : to get food data

Request :

  • Name : page
    In : query
    Description : To set pagination on data
    Required : true
    Type : Int
    Default : 1

  • Name : category
    In : query
    Description : To get food data by categories using category id
    Required : false
    Type : Int

  • Name : price
    In : query
    Description : To get food sorted by price can be asc or desc
    Required : true
    Type : String
    Default : "asc"

  • Name : rating
    In : query
    Description : To get food sorted by rating can be asc or desc
    Required : false
    Type : String

  • Name : order
    In : query
    Description : To get food sorted by order can be asc or desc
    Required : false
    Type : String

Response Success :

{
   "page" : 2,
   "total_pages" : 5,
   "total_results" : 20,
   "data" :[
      {
         "id" : 1,
         "name" : "Nasi Goreng",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 20000,
         "rating" : 5,
         "order" : 18
      },
      {
        "id" : 2,
         "name" : "Ramen",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 25000,
         "rating" : 3,
         "order" : 13
      },
      {
        "id" : 3,
         "name" : "Taco",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 10000,
         "rating" : 4,
         "order" : 12
      },
      {
        "id" : 4,
         "name" : "Soto Ayam",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 15000,
         "rating" : 0,
         "order" : 0
      },
   ]
}

Response Error :

{
   "message" : "Data not found"
}



Endpoint : GET /api/food/:id

Summary : to get food detail

Request :

  • Name : id
    In : params
    Description : send id food to get food details
    Required : true
    Type : Int

Response Success :

{
   "data" :{
      "id" : 1,
      "name" : "Nasi Goreng",
      "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
      "description" : "Nasi goreng adalah makanan berupa nasi yang digoreng dan dicampur dalam minyak goreng, margarin, atau mentega.",
      "rating" : 5,
      "order" : 20,
      "category" : "Nusantara",
      "ingredients" : [
         {
            "amount" : 4,
            "name" : "sdt garam",
            "price" : 4000
         },
         {
            "amount" : 2,
            "name" : "potong ayam",
            "price" : 10000
         },
         {
            "amount" : 1,
            "name" : "siung bawang",
            "price" : 1000
         },
      ],
      "Method" : [
         {
            "step" : 1,
            "how" : "Panaskan minyak dan siapkan nasi yang sudah dingin"
         },
         {
            "step" : 2,
            "how" : "Masuan nasi dan aduk dengan bumbu"
         },
         {
            "step" : 3,
            "how" : "masukan telur dan ayam yang sudah di masak dengan matang"
         },
         {
            "step" : 4,
            "how" : "sajian di piring hangat hangat"
         },
      ]
   }
}

Response Error :

{
   "message" : "Data not found"
}



Endpoint : GET /api/food/search

Summary : to search food data by user query

Request :

  • Name : query
    In : query
    Description : To get food by query search from user
    Required : true
    Type : String

Response Success :

{
   "data" :[
      {
         "id" : 1,
         "name" : "Nasi Goreng",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "category" : "Nusantara"
      },
      {
        "id" : 2,
         "name" : "Ramen",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "category" : "Jepang"
      },
      {
        "id" : 3,
         "name" : "Taco",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "category" : "Western"
      },
      {
        "id" : 4,
         "name" : "Soto Ayam",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "category" : "Nusantara"
      },
   ]
}

Response Error :

{
   "data" : [],
   "message" : "Data not found"
}



Endpoint : GET /api/food/random

Summary : to get food data with random with limitation

Request :

  • Name : limit
    In : query
    Description : To set limit on data
    Required : true
    Type : Int
    Default : 1

Response Success :

{
   "data" :[
      {
         "id" : 1,
         "name" : "Nasi Goreng",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 20000,
         "rating" : 5,
         "order" : 18
      },
      {
        "id" : 2,
         "name" : "Ramen",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 25000,
         "rating" : 3,
         "order" : 13
      },
      {
        "id" : 3,
         "name" : "Taco",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 10000,
         "rating" : 4,
         "order" : 12
      },
      {
        "id" : 4,
         "name" : "Soto Ayam",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 15000,
         "rating" : 0,
         "order" : 0
      },
   ]
}

Response Error :

{
   "message" : "Something went wrong"
}

- Bookmark

Endpoint : POST /api/bookmark/:food_id

Summary : to add food on their bookmark / favorite

Request :

  • Name : user_uuid
    In : cookie
    Description : uuid account from that user
    Required : true
    Type : Int

  • Name : food_id
    In : params
    Description : id food from users click
    Required : true
    Type : Int

Response Success :

{
   "data" :{
      "id" : 1,
      "name" : "Nasi Goreng",
      "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
      "description" : "Nasi goreng adalah makanan berupa nasi yang digoreng dan dicampur dalam minyak goreng, margarin, atau mentega.",
      "rating" : 5,
      "order" : 20,
      "category" : "Nusantara",
      "ingredients" : [
         {
            "amount" : 4,
            "name" : "sdt garam",
            "price" : 4000
         },
         {
            "amount" : 2,
            "name" : "potong ayam",
            "price" : 10000
         },
         {
            "amount" : 1,
            "name" : "siung bawang",
            "price" : 1000
         },
      ],
      "Method" : [
         {
            "step" : 1,
            "how" : "Panaskan minyak dan siapkan nasi yang sudah dingin"
         },
         {
            "step" : 2,
            "how" : "Masuan nasi dan aduk dengan bumbu"
         },
         {
            "step" : 3,
            "how" : "masukan telur dan ayam yang sudah di masak dengan matang"
         },
         {
            "step" : 4,
            "how" : "sajian di piring hangat hangat"
         },
      ]
   },
   "message" : "Food successfully added to bookmark"
}

Response Error :

{
   "message" : "data insert failed"
}



Endpoint : DELETE /api/bookmark/:food_id

Summary : to delete food on their bookmark / favorite

Request :

  • Name : user_uuid
    In : cookie
    Description : uuid account from that user
    Required : true
    Type : Int

  • Name : food_id
    In : params
    Description : id food from users click
    Required : true
    Type : Int

Response Success :

{
   "data" : null,
   "message" : "Food successfully deleted from bookmark"
}

Response Error :

{
   "message" : "data not found"
}



Endpoint : GET /api/bookmark?page=1

Summary : to get user food bookmark / favorite

Request :

  • Name : user_uuid
    In : cookie
    Description : uuid account from that user
    Required : true
    Type : Int

  • Name : page
    In : query
    Description : To set pagination on data
    Required : true
    Type : Int
    Default : 1

  • Name : price
    In : query
    Description : To get food sorted by price can be asc or desc
    Required : true
    Type : String
    Default : "asc"

  • Name : rating
    In : query
    Description : To get food sorted by rating can be asc or desc
    Required : false
    Type : String

  • Name : order
    In : query
    Description : To get food sorted by order can be asc or desc
    Required : false
    Type : String

Response Success :

{
   "page" : 2,
   "total_pages" : 5,
   "total_results" : 20,
   "data" :[
      {
         "id" : 1,
         "name" : "Nasi Goreng",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 20000,
         "rating" : 5,
         "order" : 18
      },
      {
        "id" : 2,
         "name" : "Ramen",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 25000,
         "rating" : 3,
         "order" : 13
      },
      {
        "id" : 3,
         "name" : "Taco",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 10000,
         "rating" : 4,
         "order" : 12
      },
      {
        "id" : 4,
         "name" : "Soto Ayam",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 15000,
         "rating" : 0,
         "order" : 0
      },
   ]
}

Response Error :

{
   "message" : "data not found"
}



Endpoint : GET /api/bookmark/:food_id

Summary : to find food on their bookmark / favorite

Request :

  • Name : user_uuid
    In : cookie
    Description : uuid account from that user
    Required : true
    Type : Int

  • Name : food_id
    In : params
    Description : id food that want to search
    Required : true
    Type : Int

Response Success :

{
   "data" :{
         "id" : 1,
         "name" : "Nasi Goreng",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 20000,
         "rating" : 5,
         "order" : 18
   }
}

Response Error :

{
   "message" : "data not found"
}

- Order

Endpoint : POST /api/order/:food_id

Summary : to create order / food transaction on table order

Request :

  • Name : user_uuid
    In : cookie
    Description : uuid account from that user
    Required : true
    Type : Int

  • Name : food_id
    In : params
    Description : id of food want to order by user
    Required : true
    Type : Int

  • Name : location
    In : body
    Description : Location where food will be sent
    Required : true
    Type : Int

Response Success :

{
   "data" :{
      "id" : 1,
      "name" : "Nasi Goreng",
      "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
      "description" : "Nasi goreng adalah makanan berupa nasi yang digoreng dan dicampur dalam minyak goreng, margarin, atau mentega.",
      "rating" : 5,
      "order" : 20,
      "category" : "Nusantara",
      "ingredients" : [
         {
            "amount" : 4,
            "name" : "sdt garam",
            "price" : 4000
         },
         {
            "amount" : 2,
            "name" : "potong ayam",
            "price" : 10000
         },
         {
            "amount" : 1,
            "name" : "siung bawang",
            "price" : 1000
         },
      ],
      "Method" : [
         {
            "step" : 1,
            "how" : "Panaskan minyak dan siapkan nasi yang sudah dingin"
         },
         {
            "step" : 2,
            "how" : "Masuan nasi dan aduk dengan bumbu"
         },
         {
            "step" : 3,
            "how" : "masukan telur dan ayam yang sudah di masak dengan matang"
         },
         {
            "step" : 4,
            "how" : "sajian di piring hangat hangat"
         },
      ]
   },
   "message" : "Food successfully ordered"
}

Response Error :

{
   "message" : "data insert failed"
}



Endpoint : PATCH /api/order/rating/:id

Summary : to give rating on food that already ordered and auto-update on rating food tables

Request :

  • Name : user_uuid
    In : cookie
    Description : uuid account from that user
    Required : true
    Type : Int

  • Name : id
    In : params
    Description : order id
    Required : true
    Type : Int

  • Name : rating
    In : body
    Description : rate from user value can be beetwen 1-5
    Required : true
    Type : Int

Response Success :

{
   "message" : "Food successfully rated"
}

Response Error :

{
   "message" : "Patch / Update data failed"
}



Endpoint : GET /api/order

Summary : to get user order history

Request :

  • Name : user_uuid
    In : cookie
    Description : uuid account from that user
    Required : true
    Type : Int

  • Name : page
    In : query
    Description : To set pagination on data
    Required : true
    Type : Int
    Default : 1

  • Name : date
    In : query
    Description : To get food sorted by date can be asc or desc
    Required : true
    Type : String
    Default : "desc"

  • Name : price
    In : query
    Description : To get food sorted by price can be asc or desc
    Required : false
    Type : String

Response Success :

{
   "page" : 2,
   "total_pages" : 5,
   "total_results" : 20,
   "data" :[
      {
         "id" : 1,
         "food_id" : 20,
         "name" : "Nasi Goreng",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "date" : "2024-04-16T05:01:13.613Z",
         "price" : 20000,
         "rating" : 5,
      },
      {
        "id" : 2,
        "food_id" : 26,
         "name" : "Ramen",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "date" : "2024-04-16T05:01:13.613Z",
         "price" : 25000,
         "rating" : 3,
      },
      {
        "id" : 3,
        "food_id" : 8,
         "name" : "Taco",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "date" : "2024-04-16T05:01:13.613Z",
         "price" : 10000,
         "rating" : 4,
      },
      {
        "id" : 4,
        "food_id" : 9,
         "name" : "Soto Ayam",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "date" : "2024-04-16T05:01:13.613Z",
         "price" : 15000,
         "rating" : 0,
      },
   ]
}

Response Error :

{
   "message" : "data not found"
}



Endpoint : GET /api/order/:id

Summary : to get user order detail

Request :

  • Name : user_uuid
    In : cookie
    Description : uuid account from that user
    Required : true
    Type : Int

  • Name :id
    In : params
    Description : id order from users click
    Required : true
    Type : Int

Response Success :

{
   "data" : {
         "id" : 1,
         "location" : "Jakarta Timur",
         "rating" : 5,
         "date" : "2024-04-16T05:01:13.613Z",
         "food_id" : 1,
         "name" : "Nasi Goreng",
         "image" : "https://qqnkeeuttacyfctgebzc.supabase.co/storage/v1/object/sign/WebFoodo/Kategori/korea.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJXZWJGb29kby9LYXRlZ29yaS9rb3JlYS5wbmciLCJpYXQiOjE3MDk2Mzk2MDUsImV4cCI6MTc3MjcxMTYwNX0.CrlG5v4LW3Zo9_9J82Y-qTfVlrydWMe4kPX_-M6HsdQ&t=2024-03-05T11%3A53%3A25.587Z",
         "price" : 20000,
         "ingredients" : [
         {
            "amount" : 4,
            "name" : "sdt garam",
            "price" : 4000
         },
         {
            "amount" : 2,
            "name" : "potong ayam",
            "price" : 10000
         },
         {
            "amount" : 1,
            "name" : "siung bawang",
            "price" : 1000
         },
      ]
   }
}

Response Error :

{
   "message" : "data not found"
}

Contributors

  • Agung
  • Adam Wisnu Pradana
  • Ibrahim Saputra
  • Fachrizal Kurniawan
  • Immanuel Bayumurti

About

Backend for Foodo Website

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors