ยินดีต้อนรับสู่โปรเจกต์ Expense Tracker API ซึ่งเป็นระบบ Backend สำหรับจัดการรายรับ-รายจ่ายส่วนบุคคล ถูกพัฒนาด้วย Node.js และ TypeScript โดยใช้ Fastify Framework เพื่อความรวดเร็วและประสิทธิภาพสูง
โปรเจกต์นี้มีเป้าหมายเพื่อช่วยให้ผู้ใช้สามารถติดตามและบริหารจัดการสถานะทางการเงินรายวันได้อย่างมีประสิทธิภาพ โดยมีฟีเจอร์เด่นดังนี้:
- การจัดการยอดเงินคงเหลือรายวัน (Daily Budget): ระบบจะคำนวณยอดเงินคงเหลือที่ผู้ใช้สามารถใช้จ่ายได้ต่อวันจนถึงวันสิ้นเดือน เพื่อให้ผู้ใช้สามารถควบคุมการใช้จ่ายได้อย่างเป็นระบบ
- ตัวอย่าง: หากคุณมีเงินเหลืออยู่ 500 บาท มีรายจ่ายที่รออยู่ 300 บาท และเหลือเวลาอีก 10 วันจนถึงสิ้นเดือน ระบบจะแนะนำว่าคุณสามารถใช้จ่ายได้วันละ 20 บาท
- การติดตามงบประมาณ (Budget Tracking): ระบบรองรับการแสดงยอดเงินคงเหลือ (ทั้งหมด) และยอดเงินที่ตั้งไว้สำหรับใช้จ่ายในแต่ละเดือน (อนาคต)
โปรเจกต์นี้ถูกสร้างขึ้นด้วยเทคโนโลยีหลักดังนี้:
-
ภาษา (Language): TypeScript
-
เฟรมเวิร์ก (Framework): Fastify (Node.js)
-
ฐานข้อมูล (Database): PostgreSQL
-
ORM (Object-Relational Mapping): TypeORM
-
Validation: Zod
- การตั้งค่า Environment Variables
โปรเจกต์นี้ใช้ไฟล์ .env สำหรับการตั้งค่าระบบ กรุณาตั้งค่าตัวแปรสำคัญดังต่อไปนี้:
# Server port
PORT=<your_port>
# Database Credentials
DB_HOST=<your_db_host>
DB_USER=<your_db_user>
DB_PASSWORD=<your_db_password>
DB_NAME=<your_db_name>
# Cloudinary (สำหรับการจัดการไฟล์รูปภาพ/ใบเสร็จ)
CLOUDINARY_CLOUD_NAME=<your_cloudinary_cloud_name>
CLOUDINARY_API_KEY=<your_cloudinary_API_key>
CLOUDINARY_API_SECRET=<your_cloudinary_API_secret>
# JWT (สำหรับการยืนยันตัวตน)
JWT_SECRET=<your_secret>
- เตรียมตัวก่อนรันโปรเจกต์ (Prerequisites)
เนื่องจากโปรเจกต์มีการเขียน docker-compose.yml สำหรับการติดตั้งฐานข้อมูล PostgreSQL อย่างรวดเร็ว จึงจำเป็นต้องติดตั้ง Docker ก่อนดำเนินการต่อ
-
Windows (Windows 10/11 Pro/Home): ดาวน์โหลด Docker Desktop จาก https://www.docker.com/products/docker-desktop/ และทำตามขั้นตอนการติดตั้ง
-
MacOS: ดาวน์โหลด Docker Desktop จาก https://www.docker.com/products/docker-desktop/
ตรวจสอบการติดตั้ง:
docker --version
docker compose version- การรันโปรเจกต์
3.1 รันด้วย Docker (แนะนำสำหรับ Local Setup)
ใช้คำสั่ง docker compose เพื่อสร้างและรัน Container ทั้งหมด (API และ Database):
docker compose up -d(เพิ่ม -d เพื่อรันในพื้นหลัง)
3.2 การรันแบบ Local Development (Non-Docker)
หากต้องการรันเฉพาะ API Server บนเครื่องของคุณ:
-
ติดตั้ง Dependencies ทั้งหมด: npm install
-
คอมไพล์ TypeScript: npm run build
-
รันเซิร์ฟเวอร์ด้วย Hot Reload (Development Mode): npm run dev
-
รันเซิร์ฟเวอร์ Production (ต้องรัน npm run build ก่อน): npm start
สิ่งสำคัญของ API นี้คือความแข็งแกร่งของข้อมูล:
-
มีการใช้ Zod Validation ในทุก ๆ Request เพื่อตรวจสอบ Query, Body (Payload), และ Parameter (รวมถึง Optional Parameter) อย่างเข้มงวด หากข้อมูลไม่ถูกต้อง จะส่งคืน HTTP 400 Bad Request
-
มีการบังคับใช้ UUID Format สำหรับ ID ทุกประเภท (เช่น category_id, transId) เพื่อความถูกต้องในการอ้างอิงข้อมูลในฐานข้อมูล
เอกสาร API สำหรับ Endpoint ทั้งหมดถูกสร้างขึ้นด้วย Fastify Swagger
- Development Mode: เข้าถึงได้ที่
http://localhost:8085/documentation
- Production: [เพิ่มลิงก์ไปยัง API Docs ที่นี่]