first init
This commit is contained in:
@@ -1 +1,233 @@
|
||||
@AGENTS.md
|
||||
# 🚀 SeTrip Project Architecture Guide
|
||||
|
||||
## 📌 Overview
|
||||
|
||||
Dokumen ini menjelaskan standar struktur project untuk aplikasi **SeTrip** menggunakan Next.js (App Router).
|
||||
|
||||
Tujuan:
|
||||
|
||||
- Menjaga code tetap rapi & scalable
|
||||
- Menghindari spaghetti code
|
||||
- Memudahkan AI / developer kontribusi
|
||||
|
||||
---
|
||||
|
||||
# 🧠 Core Principles
|
||||
|
||||
1. **Feature-based structure (WAJIB)**
|
||||
2. **Separation client vs server logic**
|
||||
3. **Colocation (file dekat dengan fitur)**
|
||||
4. **No over-engineering (keep it simple)**
|
||||
|
||||
---
|
||||
|
||||
# 🏗️ Project Structure
|
||||
|
||||
```bash
|
||||
src/
|
||||
├── app/ # Next.js App Router (UI & routing)
|
||||
│ ├── (public)/ # halaman publik
|
||||
│ ├── (auth)/ # login/register
|
||||
│ ├── trips/ # halaman trip
|
||||
│ ├── create-trip/
|
||||
│ └── profile/
|
||||
│
|
||||
├── features/ # 🔥 Business logic per domain
|
||||
│ ├── auth/
|
||||
│ ├── user/
|
||||
│ ├── trip/
|
||||
│ ├── booking/
|
||||
│ └── review/
|
||||
│
|
||||
├── server/ # 🔒 Backend-only logic
|
||||
│ ├── db/
|
||||
│ ├── services/
|
||||
│ └── repositories/
|
||||
│
|
||||
├── components/ # reusable UI components
|
||||
│ ├── ui/
|
||||
│ └── shared/
|
||||
│
|
||||
├── lib/ # helpers & utilities
|
||||
│ ├── prisma.ts
|
||||
│ ├── auth.ts
|
||||
│ └── utils.ts
|
||||
│
|
||||
├── hooks/ # custom react hooks
|
||||
├── types/ # global types
|
||||
└── config/ # config (env, constants)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 📂 Folder Rules
|
||||
|
||||
## 1. `/app` (Routing Layer)
|
||||
|
||||
Hanya untuk:
|
||||
|
||||
- page.tsx
|
||||
- layout.tsx
|
||||
- UI rendering
|
||||
- data fetching ringan
|
||||
|
||||
❌ DILARANG:
|
||||
|
||||
- business logic
|
||||
- query database langsung
|
||||
|
||||
---
|
||||
|
||||
## 2. `/features` (Domain Layer) 🔥
|
||||
|
||||
Setiap fitur punya folder sendiri:
|
||||
|
||||
```bash
|
||||
features/trip/
|
||||
├── components/
|
||||
├── services/
|
||||
├── hooks/
|
||||
├── api/
|
||||
└── types.ts
|
||||
```
|
||||
|
||||
Digunakan untuk:
|
||||
|
||||
- business logic
|
||||
- validation
|
||||
- orchestration
|
||||
|
||||
---
|
||||
|
||||
## 3. `/server` (Backend Layer)
|
||||
|
||||
```bash
|
||||
server/
|
||||
├── db/
|
||||
│ └── prisma.ts
|
||||
├── services/
|
||||
│ └── trip.service.ts
|
||||
└── repositories/
|
||||
└── trip.repo.ts
|
||||
```
|
||||
|
||||
Digunakan untuk:
|
||||
|
||||
- database access
|
||||
- heavy logic
|
||||
- internal backend
|
||||
|
||||
---
|
||||
|
||||
## 4. `/components`
|
||||
|
||||
```bash
|
||||
components/
|
||||
├── ui/ # button, input, modal
|
||||
└── shared/ # navbar, header
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. `/lib`
|
||||
|
||||
Utility global:
|
||||
|
||||
- prisma instance
|
||||
- auth helper
|
||||
- formatter
|
||||
|
||||
---
|
||||
|
||||
# 🔄 Data Flow Standard
|
||||
|
||||
```text
|
||||
UI (app/)
|
||||
↓
|
||||
Feature (features/)
|
||||
↓
|
||||
Service (server/services)
|
||||
↓
|
||||
Repository (server/repositories)
|
||||
↓
|
||||
Database
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 🧩 Example Flow (Create Trip)
|
||||
|
||||
1. User klik create trip (UI)
|
||||
2. Call feature service
|
||||
3. Feature validate data
|
||||
4. Call server service
|
||||
5. Service call repository
|
||||
6. Repository insert ke database
|
||||
|
||||
---
|
||||
|
||||
# ⚠️ Anti-Pattern (DILARANG)
|
||||
|
||||
❌ Jangan:
|
||||
|
||||
- query Prisma langsung di page.tsx
|
||||
- campur UI + logic
|
||||
- buat folder controller/service ala backend di Next.js
|
||||
- over abstraction di awal
|
||||
|
||||
---
|
||||
|
||||
# ✅ Best Practice
|
||||
|
||||
✔ Gunakan:
|
||||
|
||||
- Zod untuk validation
|
||||
- Prisma untuk ORM
|
||||
- Server Actions / API route secukupnya
|
||||
|
||||
✔ Naming:
|
||||
|
||||
- `trip.service.ts`
|
||||
- `trip.repo.ts`
|
||||
- `useTrip.ts`
|
||||
|
||||
---
|
||||
|
||||
# 🚀 Development Phases
|
||||
|
||||
## Phase 1 (MVP)
|
||||
|
||||
- Auth
|
||||
- Create Trip
|
||||
- Join Trip
|
||||
|
||||
## Phase 2
|
||||
|
||||
- Review
|
||||
- Limit & validation
|
||||
|
||||
## Phase 3
|
||||
|
||||
- Payment
|
||||
- Organizer role
|
||||
|
||||
---
|
||||
|
||||
# 🧠 Final Principle
|
||||
|
||||
> Build fast → validate → refactor later
|
||||
|
||||
Jangan terlalu fokus ke arsitektur sempurna di awal.
|
||||
|
||||
---
|
||||
|
||||
# 📌 Notes for AI / Contributors
|
||||
|
||||
- Ikuti struktur ini tanpa pengecualian
|
||||
- Jangan membuat folder baru tanpa alasan jelas
|
||||
- Semua fitur baru harus masuk ke `/features`
|
||||
- Semua akses DB harus lewat `/server`
|
||||
|
||||
---
|
||||
|
||||
**End of Document**
|
||||
|
||||
Reference in New Issue
Block a user