diff --git a/donutshop_ecommerce/src/app/api/categories/route.js b/donutshop_ecommerce/src/app/api/categories/route.js index a8a93a9..856a195 100644 --- a/donutshop_ecommerce/src/app/api/categories/route.js +++ b/donutshop_ecommerce/src/app/api/categories/route.js @@ -1,6 +1,8 @@ +import mongoose from "mongoose"; import { Category } from "../models/Category"; export async function POST(req){ + mongoose.connect(process.env.MONGO_URL) const {name} = await req.json(); const categoryDoc = await Category.create({name}) @@ -8,13 +10,15 @@ export async function POST(req){ } export async function PUT(req){ + mongoose.connect(process.env.MONGO_URL) const {_id, name} = await req.json(); await Category.updateOne({_id}, {name}); return Response.json(true); } -export async function GET(req){ +export async function GET(){ + mongoose.connect(process.env.MONGO_URL) return Response.json( await Category.find() ) diff --git a/donutshop_ecommerce/src/app/api/menu-items/route.js b/donutshop_ecommerce/src/app/api/menu-items/route.js new file mode 100644 index 0000000..0b98acb --- /dev/null +++ b/donutshop_ecommerce/src/app/api/menu-items/route.js @@ -0,0 +1,10 @@ +import mongoose from "mongoose"; +import { MenuItem } from "../models/MenuItem"; + +export async function POST(req){ + mongoose.connect(process.env.MONGO_URL) + const data = await req.json(); + const menuItemDoc = await MenuItem.create(data); + + return Response.json(menuItemDoc) +} \ No newline at end of file diff --git a/donutshop_ecommerce/src/app/api/models/MenuItem.js b/donutshop_ecommerce/src/app/api/models/MenuItem.js new file mode 100644 index 0000000..02d02ea --- /dev/null +++ b/donutshop_ecommerce/src/app/api/models/MenuItem.js @@ -0,0 +1,19 @@ +import { Schema, model, models } from "mongoose"; + +const MenuItemSchema = new Schema({ + itemName:{ + type: String + }, + menuImg:{ + type: String + }, + description:{ + type: String + }, + basePrice:{ + type: Number + }, + +}, {timestamps: true}) + +export const MenuItem = models?.MenuItem || model('MenuItem', MenuItemSchema) \ No newline at end of file diff --git a/donutshop_ecommerce/src/app/menu-items/page.js b/donutshop_ecommerce/src/app/menu-items/page.js index 28cb8b3..b54a8ea 100644 --- a/donutshop_ecommerce/src/app/menu-items/page.js +++ b/donutshop_ecommerce/src/app/menu-items/page.js @@ -1,13 +1,40 @@ "use client" -import React from 'react' +import React, { useState } from 'react' import UserTab from '../../components/layout/UserTab' import useProfile from '../../components/UseProfile' +import EditImage from '../../components/layout/EditImage' +import toast from 'react-hot-toast' const MenuItemsPage = () => { const {loading, data} = useProfile(); + const [menuImg, setMenuImg] = useState(''); + const [itemName, setItemName] = useState(''); + const [description, setDescription] = useState(''); + const [basePrice, setBasePrice] = useState(''); + async function handleMenuFormSubmit(ev){ + ev.preventDefault(); + const data = {menuImg, itemName, description, basePrice,}; + const menuSavingPromise = new Promise(async (resolve, reject) => { + const response = await fetch('/api/menu-items', { + method: 'POST', + body: JSON.stringify(data), + headers: {'Content-Type': 'application/json'} + }); + if(response.ok) + resolve(); + else + reject(); + }); + await toast.promise(menuSavingPromise, { + loading: 'Saving...', + success: 'Menu is saved', + error: 'Fail to save menu!', + }) + } + if(loading){ return
Loading...
@@ -16,22 +43,30 @@ const MenuItemsPage = () => { returnPlease login as an admin
} + return ( -Chocolate Beurre noisette Walnut Cream
+Desciption
$5.99