# Packages
# README
สรุปวิธีการใช้งานโปรเจค SE ทั้งฝั่ง Backend และ Frontend
ฝั่ง Backend
- ติดตั้งสิ่งที่ต้องมี: ต้องมี Docker, Docker Compose และ Go
- ติดตั้งโปรเจค:
- โคลนโปรเจคด้วยคำสั่ง
git clone https://github.com/B1gdawg0/se-project-backend.git
- เข้าไปที่โฟลเดอร์โปรเจคด้วย
cd <project directory>
- อัพเดต dependencies ด้วย
go mod tidy
- คัดลอกไฟล์
.env
ด้วยคำสั่งcp .env.example .env
แล้วตั้งค่าให้เหมาะสม
- โคลนโปรเจคด้วยคำสั่ง
- รันโปรเจค:
- ใช้ Docker Compose เริ่มระบบด้วยคำสั่ง
docker-compose up
- รันแอปพลิเคชันด้วยคำสั่ง
go run main.go
- ใช้ Docker Compose เริ่มระบบด้วยคำสั่ง
- ทดสอบ API: สามารถทดสอบ API โดยใช้ Postman หรือ
curl
เช่นcurl -X GET "http://localhost:8000/user"
ติดตั้งและตั้งค่า PostgreSQL สำหรับโปรเจคนี้
-
ติดตั้ง PostgreSQL: ก่อนเริ่มใช้งาน ให้ติดตั้ง PostgreSQL บนเครื่องของคุณ หากยังไม่ได้ติดตั้ง สามารถดาวน์โหลดได้ที่ PostgreSQL Download
-
ตั้งค่าฐานข้อมูล: หลังจากติดตั้ง PostgreSQL เรียบร้อยแล้ว สร้างฐานข้อมูลใหม่ตามชื่อที่กำหนดไว้ในไฟล์
.env
ของโปรเจค -
ตั้งค่าไฟล์ .env: เปิดไฟล์
.env
และตั้งค่าการเชื่อมต่อกับ PostgreSQL โดยระบุชื่อฐานข้อมูล, ชื่อผู้ใช้ (username) และรหัสผ่าน (password) ที่คุณกำหนดไว้ -
Automigrate เมื่อรันโปรเจค: เมื่อติดตั้งและตั้งค่า PostgreSQL แล้ว ให้รันโปรเจคโดยใช้คำสั่ง
go run main.go
ระบบจะทำการ automigrate โดยอัตโนมัติ ซึ่งจะสร้างตารางตามโครงสร้างของ Entity ต่าง ๆ ที่กำหนดในโปรเจคให้ในฐานข้อมูล
ฝั่ง Frontend
- ติดตั้งสิ่งที่ต้องมี: ต้องมี Node.js และ Git
- ติดตั้งโปรเจค:
- โคลนโปรเจคด้วยคำสั่ง
git clone https://github.com/B1gdawg0/se-project-frontend.git
- เข้าไปที่โฟลเดอร์โปรเจคด้วย
cd <project-directory>
- ติดตั้ง dependencies ด้วยคำสั่ง
npm install
- โคลนโปรเจคด้วยคำสั่ง
- รันโปรเจค:
- เริ่มเซิร์ฟเวอร์พัฒนา (development server) ด้วยคำสั่ง
npm run dev
- เข้าใช้งานแอปพลิเคชันได้ที่
http://localhost:3000/homepage
- เริ่มเซิร์ฟเวอร์พัฒนา (development server) ด้วยคำสั่ง
- ทดสอบหน้าแรก: เข้าแอปพลิเคชันแล้วทดสอบการทำงานโดยคลิกปุ่มที่หน้าแรก
ข้อมูลโปรเจค
ชื่อโปรเจค : THE GROOVE & ROOM บริการร้านเครื่องดื่มที่ให้คุณจองโต๊ะอาหาร สั่งอาหาร ส่วนลด ขอเพลง แชร์ Instagram และ สมัครสมาชิก เพื่อ เข้าถึงบริการพิเศษได้ง่ายดาย นอกจากนี้ เรายังมีระบบแอดมิน สำหรับตรวจสอบออเดอร์และการจอง เพื่อให้บริการลูกค้าเป็นไปอย่างราบรื่น เราเลือกใช้ Go Fiber เพราะมีประสิทธิภาพสูงในการจัดการคำขอ HTTP ทำให้สามารถสร้างเว็บแอปพลิเคชันที่ตอบสนองได้อย่างรวดเร็ว นอกจากนี้ Fiber ยังมี API ที่ใช้งานง่าย ทำให้การพัฒนาระบบเป็นไปได้อย่างรวดเร็วและไม่ซับซ้อน นอกจากนี้ Fiber ยังรองรับ Middleware ที่ยืดหยุ่น ช่วยให้เราสามารถเพิ่มฟังก์ชันการทำงานเพิ่มเติมได้อย่างสะดวก เช่น การจัดการคุกกี้ การทำ Logging และการตรวจสอบความปลอดภัย สิ่งเหล่านี้ทำให้การพัฒนาแอปพลิเคชันของเรามีความยืดหยุ่นและสามารถปรับเปลี่ยนได้ตามความต้องการ สุดท้าย Fiber ยังรองรับการเชื่อมต่อแบบ WebSocket ทำให้เหมาะสำหรับการพัฒนาแอปพลิเคชันที่ต้องการการสื่อสารแบบเรียลไทม์ ซึ่งเป็นข้อได้เปรียบที่สำคัญสำหรับโปรเจคของเรา
รายละเอียดฟีเจอร์ของ โปรเจค : User Registration and Login (ระบบลงทะเบียนและเข้าสู่ระบบ) ระบบอนุญาตให้ลูกค้าสามารถลงทะเบียนและเข้าสู่ระบบเพื่อสร้างบัญชีผู้ใช้ โดยลูกค้าสามารถกรอกข้อมูลส่วนบุคคล เช่น ชื่อ อีเมล และรหัสผ่าน เพื่อใช้ในการเข้าสู่ระบบในครั้งถัดไป
Table Reservation (การจองโต๊ะ) ลูกค้าสามารถจองโต๊ะล่วงหน้าได้ โดยระบุวันและเวลาที่ต้องการ รวมถึงจำนวนคนที่ต้องการใช้บริการ ซึ่งจะช่วยให้การจัดการโต๊ะเป็นไปอย่างมีระเบียบ
Food Ordering (การสั่งอาหาร) แอปพลิเคชันมีฟีเจอร์สำหรับให้ลูกค้าสามารถสั่งอาหารและเครื่องดื่มจากเมนูที่มีให้เลือก โดยลูกค้าสามารถดูรายละเอียดของอาหารแต่ละรายการและเลือกสินค้าที่ต้องการได้ อย่างสะดวก
Payment Processing (การชำระเงิน) ระบบรองรับการชำระเงินออนไลน์ เพื่อให้ลูกค้าสามารถชำระเงินสำหรับ การจองโต๊ะและการสั่งอาหารได้อย่างรวดเร็ว และปลอดภัย
Admin Order Management (การจัดการคำสั่งซื้อของผู้ดูแล) ระบบมีฟีเจอร์สำหรับผู้ดูแล (Admin) ที่ช่วยในการตรวจสอบคำสั่งซื้อและการจองโต๊ะ โดยผู้ดูแลสามารถดูรายละเอียดคำสั่งซื้อและสถานะการจองโต๊ะได้อย่างชัดเจน
Reservation Confirmation (การยืนยันการจอง) แอดมินสามารถยืนยันการมารับโต๊ะหลังจากที่ทำการจอง
Song Request Feature (ฟีเจอร์การขอเพลง) ลูกค้าสามารถส่งคำขอเพลงที่ต้องการฟังในระหว่างที่อยู่ในร้าน โดยเพลงที่ลูกค้าขอจะถูกแสดงขึ้นบนจอใหญ่ในร้าน เพื่อให้ทุกคนสามารถเห็นและร่วมสนุกกับเพลงที่เลือก
Instagram Sharing (การแชร์ Instagram) ฟีเจอร์นี้อนุญาตให้ลูกค้าสามารถแชร์ Instagram ของตนเองขึ้นบนจอใหญ่ในร้าน เพื่อสร้างการเชื่อมต่อทางสังคมและให้ผู้ใช้งานคนอื่นในร้านสามารถติดตามบัญชี Instagram ของลูกค้าได้
Security System (ระบบรักษาความปลอดภัย) แอปพลิเคชันมีระบบรักษาความปลอดภัยที่ยืนยันตัวตนโดยใช้ token เมื่อมีการเรียกข้อมูลจากเซิร์ฟเวอร์ เพื่อป้องกันการเข้าถึงข้อมูลโดยไม่ได้ รับอนุญาตและให้แน่ใจว่าข้อมูลที่ถูกเรียกใช้มีความปลอดภัย
สรุปหน้าต่าง ๆ ในเว็บไซต์
1. Order Page (src/app/admin/order/page.js
)
- แสดงรายการออเดอร์พร้อมรายละเอียด (เช่น เลขที่ออเดอร์, เลขที่โต๊ะ, เวลาสั่ง, สถานะ)
- ให้แอดมินดูและจัดการออเดอร์
- ใช้
axios
เพื่อดึงข้อมูลออเดอร์จากเซิร์ฟเวอร์
2. Order Detail Page (src/app/admin/order/[...id]/page.js
)
- แสดงรายละเอียดของออเดอร์เฉพาะ (เช่น เลขที่ออเดอร์, เลขที่โต๊ะ, เวลาสั่ง, สถานะ, ยอดรวม)
- ให้แอดมินดูและจัดการรายละเอียดออเดอร์
- ใช้
axios
เพื่อดึงข้อมูลออเดอร์จากเซิร์ฟเวอร์และuseParams
เพื่อดึง ID ออเดอร์จาก URL
3. Menu Page (src/app/admin/menu/page.js
)
- แสดงรายการเมนูพร้อมรายละเอียด (เช่น เลขที่เมนู, ชื่อ, คำอธิบาย, ราคา)
- ให้แอดมินดูและจัดการรายการเมนู
- ใช้
axios
เพื่อดึงข้อมูลเมนูจากเซิร์ฟเวอร์
4. Add Menu Page (src/app/admin/addmenu/page.js
)
- ให้แอดมินเพิ่มรายการเมนูใหม่
- ใช้
axios
เพื่อส่งข้อมูลเมนูใหม่ไปยังเซิร์ฟเวอร์
5. Login Page (src/app/(auth)/login/page.jsx
)
- ให้ผู้ใช้เข้าสู่ระบบเว็บไซต์
- ใช้
axios
เพื่อส่งข้อมูลล็อกอินไปยังเซิร์ฟเวอร์ - ใช้
useRouter
เพื่อเปลี่ยนหน้าไปยังหน้าโฮมเมื่อเข้าสู่ระบบสำเร็จ
6. Homepage (src/app/(have-header)/homepage/page.jsx
)
- แสดงข้อความต้อนรับและแนะนำผู้ใช้ไปยังหน้าดูเมนู
- ใช้
useRouter
เพื่อเปลี่ยนหน้าไปยังหน้าเมนู
7. Menu Page (src/app/order/page.tsx
)
- แสดงรายการเมนูพร้อมรายละเอียด (เช่น เลขที่เมนู, ชื่อ, คำอธิบาย, ราคา)
- ให้ผู้ใช้ดูและสั่งเมนู
- ใช้
axios
เพื่อดึงข้อมูลเมนูจากเซิร์ฟเวอร์
8. Order History Page (src/app/history/page.jsx
)
- แสดงประวัติการสั่งซื้อของผู้ใช้
- ให้ผู้ใช้ดูประวัติออเดอร์ของตนเอง
- ใช้
axios
เพื่อดึงข้อมูลออเดอร์จากเซิร์ฟเวอร์
9. Reservation Page (src/app/(have-header)/reservation/page.jsx
)
- ให้ผู้ใช้จองโต๊ะ
- ใช้
axios
เพื่อส่งข้อมูลการจองไปยังเซิร์ฟเวอร์
10. Receipt Page (src/app/receipt/page.tsx
)
- แสดงใบเสร็จสำหรับออเดอร์เฉพาะ
- ให้ผู้ใช้ดูใบเสร็จของตน
- ใช้
axios
เพื่อดึงข้อมูลออเดอร์จากเซิร์ฟเวอร์
สรุปโครงสร้างระบบและการทำงาน backend
1. Adapters (ตัวเชื่อมต่อ)
- Repositories: จัดการการเข้าถึงข้อมูลจากฐานข้อมูล เป็นเลเยอร์ที่คั่นกลางระหว่างตรรกะของระบบกับการเชื่อมต่อฐานข้อมูล
- Handlers: รับและตอบสนองคำขอ HTTP โดยทำหน้าที่ตรวจสอบความถูกต้องของคำขอ เรียกใช้ตรรกะธุรกิจที่เกี่ยวข้อง และส่งผลลัพธ์กลับไป
- Rest: เก็บ API endpoints ที่เป็น RESTful สำหรับการเข้าถึงฟังก์ชันต่าง ๆ ของแอปพลิเคชัน
2. Infrastructure (โครงสร้างพื้นฐาน)
- Entities: โครงสร้างข้อมูลที่ใช้ในระบบ เช่น ผู้ใช้ ออเดอร์ และสินค้า
- Queries: รวบรวมคำสั่งที่ใช้ในการเข้าถึงและจัดการข้อมูลในฐานข้อมูลผ่าน repositories
- Init: จัดการการเชื่อมต่อฐานข้อมูลให้พร้อมใช้งาน
3. Use Cases (การใช้งานหลัก)
- User: ตรรกะธุรกิจที่เกี่ยวกับการทำงานของผู้ใช้ เช่น การสมัครสมาชิกและการเข้าสู่ระบบ
- Order: ตรรกะที่เกี่ยวข้องกับการจัดการออเดอร์ เช่น การสร้างและการแก้ไขออเดอร์
- Discount: ตรรกะที่เกี่ยวกับการจัดการส่วนลด
- Menu: ตรรกะการจัดการเมนู
- Table: ตรรกะการจัดการโต๊ะ
- Igline และ Musicline: ตรรกะการทำงานที่เกี่ยวข้องกับ igline และ musicline ตามการใช้งานที่กำหนด
4. Authentication and Authorization (การยืนยันตัวตนและการอนุญาต)
- Auth: ตรรกะที่เกี่ยวกับการยืนยันตัวตนและการให้สิทธิ์เข้าใช้งาน รวมถึงการใช้ JWT (JSON Web Tokens)
- JWT: ใช้สำหรับการสร้างและตรวจสอบความถูกต้องของ JSON Web Tokens
5. Database (ฐานข้อมูล)
- PostgreSQL: ระบบใช้ PostgreSQL เป็นฐานข้อมูลหลัก
- GORM: ใช้ GORM เป็นเครื่องมือ ORM (Object-Relational Mapping) ในการจัดการข้อมูลเชิงวัตถุในฐานข้อมูล
6. API
- Router: จัดการเส้นทาง (routing) สำหรับ API endpoints ของระบบ
- Middleware: ฟังก์ชัน middleware ที่ใช้ในการกำหนดเงื่อนไข เช่น การจัดการ CORS และการตรวจสอบสิทธิ์
7. Utilities (เครื่องมือเสริม)
- Utils: ฟังก์ชันเสริมที่ใช้ในระบบ เช่น การจัดการสตริงและการจัดการข้อผิดพลาด
โครงสร้างระบบนี้ออกแบบให้โมดูลาร์ (modular) และขยายได้ง่าย โดยแบ่งความรับผิดชอบแต่ละส่วนอย่างชัดเจน ทำให้สามารถพัฒนาและบำรุงรักษาระบบได้อย่างมีประสิทธิภาพ
ข้อมูลผู้พัฒนา
จัดทําโดย
- 6510450160 กวินท์ สินธพสิริพร
- 6510450399 ทิเบต เจริญศรีไพบูลย์
- 6510450658 ปิ่นปวัฒน์ ลิ้มสุวัฒน์
- 6510450691 พจนินท์ วชิรวิทยากุล
- 6510450917 เลิศพิพัฒน์ กาญจนเรืองโรจน์
- 6510451131 อิทธิกร อึงนิยม