API profesional untuk manajemen feedback menggunakan Express.js, Prisma ORM, dan MySQL dengan dokumentasi Swagger lengkap.
- ✅ RESTful API dengan Express.js
- ✅ Prisma ORM untuk database MySQL
- ✅ Dokumentasi API dengan Swagger/OpenAPI
- ✅ Validasi input dengan express-validator
- ✅ Error handling yang komprehensif
- ✅ Pagination dan filtering
- ✅ CORS dan security headers (Helmet)
- ✅ Logging dengan Morgan
- ✅ Environment configuration
BNCCExpress/
├── prisma/
│ └── schema.prisma # Prisma schema untuk database
├── src/
│ ├── config/
│ │ ├── database.js # Konfigurasi Prisma client
│ │ ├── env.js # Environment variables
│ │ └── swagger.js # Konfigurasi Swagger
│ ├── controllers/
│ │ └── feedbackController.js # Business logic
│ ├── middlewares/
│ │ ├── errorHandler.js # Global error handler
│ │ ├── notFound.js # 404 handler
│ │ └── validators.js # Input validation
│ ├── routes/
│ │ └── feedbackRoutes.js # API routes
│ ├── app.js # Express app setup
│ └── index.js # Server entry point
├── .env # Environment variables
├── .env.example # Environment template
├── .gitignore # Git ignore file
├── package.json # Dependencies
└── README.md # Documentation
- Node.js (v16 atau lebih tinggi)
- MySQL (v8 atau lebih tinggi)
- npm atau yarn
cd BNCCExpressnpm installBuat database MySQL baru:
CREATE DATABASE bncc_feedback;Copy file .env.example ke .env dan sesuaikan konfigurasi:
cp .env.example .envEdit file .env dan sesuaikan dengan konfigurasi MySQL Anda:
PORT=3000
NODE_ENV=development
# Sesuaikan dengan kredensial MySQL Anda
DATABASE_URL="mysql://root:your_password@localhost:3306/bncc_feedback"
API_VERSION=v1
API_PREFIX=/apinpm run prisma:generate
npm run prisma:migrateKetika diminta nama migration, masukkan: init
Development mode (dengan auto-reload):
npm run devProduction mode:
npm startServer akan berjalan di http://localhost:3000
Base URL: http://localhost:3000/api/v1
| Method | Endpoint | Description |
|---|---|---|
| GET | /feedback |
Get all feedbacks (with pagination & filter) |
| GET | /feedback/:id |
Get single feedback by ID |
| POST | /feedback |
Create new feedback |
| PUT | /feedback/:id |
Update feedback |
| DELETE | /feedback/:id |
Delete feedback |
status: Filter by status (open, in_review, resolved)division: Filter by division (LnT, Eeo, PR, HRD, AnD)page: Page number (default: 1)limit: Items per page (default: 10)
Create Feedback (POST /feedback)
{
"name": "string (required, max 255)",
"email": "string (required, valid email)",
"eventName": "string (required, max 255)",
"division": "enum (required: LnT|Eeo|PR|HRD|AnD)",
"rating": "integer (required: 1-5)",
"comment": "string (optional)",
"suggestion": "string (optional)"
}Update Feedback (PUT /feedback/:id)
{
"eventName": "string (optional, max 255)",
"division": "enum (optional: LnT|Eeo|PR|HRD|AnD)",
"rating": "integer (optional: 1-5)",
"comment": "string (optional)",
"suggestion": "string (optional)",
"status": "enum (optional: open|in_review|resolved)"
}Swagger UI tersedia di: http://localhost:3000/api-docs
Di sana Anda bisa:
- Melihat semua endpoint yang tersedia
- Melihat request/response schema
- Testing API langsung dari browser
curl -X POST http://localhost:3000/api/v1/feedback \
-H "Content-Type: application/json" \
-d '{
"name": "John Doe",
"email": "john@example.com",
"eventName": "BNCC Workshop 2024",
"division": "LnT",
"rating": 5,
"comment": "Great event!",
"suggestion": "More hands-on sessions"
}'curl http://localhost:3000/api/v1/feedback?status=open&page=1&limit=10curl http://localhost:3000/api/v1/feedback/1curl -X PUT http://localhost:3000/api/v1/feedback/1 \
-H "Content-Type: application/json" \
-d '{
"status": "in_review",
"rating": 4
}'curl -X DELETE http://localhost:3000/api/v1/feedback/1| Field | Type | Description |
|---|---|---|
| id | Int | Auto-increment primary key |
| name | String | Name of person giving feedback |
| String | Email address | |
| eventName | String | Event name |
| division | Enum | Division (LnT, Eeo, PR, HRD, AnD) |
| rating | Int | Rating 1-5 |
| comment | String? | Optional comment |
| suggestion | String? | Optional suggestion |
| createdAt | DateTime | Auto-generated timestamp |
| status | Enum | Status (open, in_review, resolved) |
# Generate Prisma Client
npm run prisma:generate
# Create and run migrations
npm run prisma:migrate
# Open Prisma Studio (database GUI)
npm run prisma:studioAPI menggunakan format response yang konsisten:
Success Response:
{
"success": true,
"message": "Operation successful",
"data": { ... }
}Error Response:
{
"success": false,
"message": "Error message",
"errors": [ ... ]
}200- OK201- Created400- Bad Request (validation error)404- Not Found409- Conflict500- Internal Server Error
-
Gunakan Prisma Studio untuk melihat data:
npm run prisma:studio
-
Monitor logs di development mode dengan Morgan
-
Test API menggunakan Swagger UI atau tools seperti Postman/Insomnia
-
Untuk production, set
NODE_ENV=productiondi.env
- Pastikan MySQL server running
- Check kredensial di
.env - Pastikan database sudah dibuat
# Reset database (WARNING: akan hapus semua data)
npx prisma migrate reset
# Atau push schema tanpa migration
npx prisma db pushUbah PORT di file .env ke port lain (misal: 3001)
MIT
Untuk pertanyaan atau issue, silakan hubungi tim BNCC.