4.5 KiB
RayLab Core Phase 7 --- Project Structure
Tujuan
Fase 7 mendefinisikan struktur repository, organisasi source code, serta standar penempatan file pada RayLab Core. Tujuannya adalah memastikan seluruh kode memiliki pola yang konsisten sehingga mudah dipelihara, dikembangkan, dan dipahami.
Prinsip
- Struktur mengikuti domain bisnis.
- Setiap module berdiri sendiri.
- Konfigurasi dipisahkan dari business logic.
- Dokumentasi menjadi bagian dari repository.
- Mudah diskalakan tanpa mengubah struktur dasar.
Struktur Repository
raylab-core/
│
├── docs/
├── docker/
├── prisma/
├── scripts/
├── tests/
├── src/
├── .env.example
├── .gitignore
├── docker-compose.yml
├── package.json
├── tsconfig.json
└── README.md
Struktur Source Code
src/
│
├── main.ts
├── app.module.ts
├── common/
├── config/
├── modules/
├── adapters/
└── shared/
Common
Berisi komponen yang digunakan lintas modul.
Contoh:
- Guards
- Filters
- Interceptors
- Middleware
- Logger
- Exceptions
- Decorators
- Pipes
- Utilities
Config
Berisi konfigurasi aplikasi.
Contoh:
- Database
- Redis
- JWT
- Environment
- Swagger
Seluruh konfigurasi diakses melalui ConfigService.
Modules
Setiap domain memiliki module sendiri.
modules/
├── identity/
├── authorization/
├── registry/
├── configuration/
├── storage/
├── media/
├── audit/
├── dashboard/
└── health/
Struktur Internal Module
identity/
│
├── controllers/
├── services/
├── domain/
├── repositories/
├── dto/
├── entities/
├── interfaces/
├── mappers/
├── events/
└── identity.module.ts
Seluruh file yang berkaitan dengan satu domain berada dalam module yang sama.
Adapters
Seluruh integrasi eksternal ditempatkan pada folder adapters.
adapters/
├── nextcloud/
├── jellyfin/
├── immich/
├── minecraft/
└── ...
Adapter tidak menyimpan business logic.
Prisma
prisma/
├── schema.prisma
├── migrations/
└── seed.ts
Seluruh perubahan database dilakukan melalui migration.
Tests
tests/
├── unit/
├── integration/
└── e2e/
Pengujian dipisahkan berdasarkan jenisnya.
Dokumentasi
docs/
├── architecture/
├── adr/
├── api/
├── modules/
└── guides/
Dokumentasi menjadi bagian dari source repository dan diperbarui bersamaan dengan perubahan kode.
Naming Convention
Folder
Menggunakan huruf kecil.
Contoh:
identity
authorization
media
File
Menggunakan nama yang deskriptif.
Contoh:
create-user.dto.ts
user.repository.ts
users.controller.ts
Class
Menggunakan PascalCase.
Contoh:
UsersController
CreateUserDto
UserRepository
Aturan Penempatan Kode
- Controller hanya berada di folder controllers.
- DTO hanya berada di folder dto.
- Entity hanya berada di folder entities.
- Repository hanya berada di folder repositories.
- Business logic berada di services dan domain.
- Integrasi eksternal berada di adapters.
Hasil Akhir Fase 7
Pada akhir fase ini, RayLab Core memiliki struktur repository dan organisasi kode yang baku. Setiap developer dapat mengetahui lokasi suatu komponen tanpa perlu menebak, sehingga pengembangan jangka panjang tetap konsisten dan mudah dipelihara.