Categorygithub.com/B1gdawg0/se-project-backend
repositorypackage
0.0.0-20241104163832-519322f25394
Repository: https://github.com/b1gdawg0/se-project-backend.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author

# README

สรุปวิธีการใช้งานโปรเจค SE ทั้งฝั่ง Backend และ Frontend


ฝั่ง Backend

  1. ติดตั้งสิ่งที่ต้องมี: ต้องมี Docker, Docker Compose และ Go
  2. ติดตั้งโปรเจค:
    • โคลนโปรเจคด้วยคำสั่ง git clone https://github.com/B1gdawg0/se-project-backend.git
    • เข้าไปที่โฟลเดอร์โปรเจคด้วย cd <project directory>
    • อัพเดต dependencies ด้วย go mod tidy
    • คัดลอกไฟล์ .env ด้วยคำสั่ง cp .env.example .env แล้วตั้งค่าให้เหมาะสม
  3. รันโปรเจค:
    • ใช้ Docker Compose เริ่มระบบด้วยคำสั่ง docker-compose up
    • รันแอปพลิเคชันด้วยคำสั่ง go run main.go
  4. ทดสอบ API: สามารถทดสอบ API โดยใช้ Postman หรือ curl เช่น curl -X GET "http://localhost:8000/user"

ติดตั้งและตั้งค่า PostgreSQL สำหรับโปรเจคนี้

  1. ติดตั้ง PostgreSQL: ก่อนเริ่มใช้งาน ให้ติดตั้ง PostgreSQL บนเครื่องของคุณ หากยังไม่ได้ติดตั้ง สามารถดาวน์โหลดได้ที่ PostgreSQL Download

  2. ตั้งค่าฐานข้อมูล: หลังจากติดตั้ง PostgreSQL เรียบร้อยแล้ว สร้างฐานข้อมูลใหม่ตามชื่อที่กำหนดไว้ในไฟล์ .env ของโปรเจค

  3. ตั้งค่าไฟล์ .env: เปิดไฟล์ .env และตั้งค่าการเชื่อมต่อกับ PostgreSQL โดยระบุชื่อฐานข้อมูล, ชื่อผู้ใช้ (username) และรหัสผ่าน (password) ที่คุณกำหนดไว้

  4. Automigrate เมื่อรันโปรเจค: เมื่อติดตั้งและตั้งค่า PostgreSQL แล้ว ให้รันโปรเจคโดยใช้คำสั่ง go run main.go ระบบจะทำการ automigrate โดยอัตโนมัติ ซึ่งจะสร้างตารางตามโครงสร้างของ Entity ต่าง ๆ ที่กำหนดในโปรเจคให้ในฐานข้อมูล


ฝั่ง Frontend

  1. ติดตั้งสิ่งที่ต้องมี: ต้องมี Node.js และ Git
  2. ติดตั้งโปรเจค:
    • โคลนโปรเจคด้วยคำสั่ง git clone https://github.com/B1gdawg0/se-project-frontend.git
    • เข้าไปที่โฟลเดอร์โปรเจคด้วย cd <project-directory>
    • ติดตั้ง dependencies ด้วยคำสั่ง npm install
  3. รันโปรเจค:
    • เริ่มเซิร์ฟเวอร์พัฒนา (development server) ด้วยคำสั่ง npm run dev
    • เข้าใช้งานแอปพลิเคชันได้ที่ http://localhost:3000/homepage
  4. ทดสอบหน้าแรก: เข้าแอปพลิเคชันแล้วทดสอบการทำงานโดยคลิกปุ่มที่หน้าแรก

ข้อมูลโปรเจค

ชื่อโปรเจค : 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 อิทธิกร อึงนิยม