Init
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
# 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
|
||||
|
||||
``` text
|
||||
raylab-core/
|
||||
│
|
||||
├── docs/
|
||||
├── docker/
|
||||
├── prisma/
|
||||
├── scripts/
|
||||
├── tests/
|
||||
├── src/
|
||||
├── .env.example
|
||||
├── .gitignore
|
||||
├── docker-compose.yml
|
||||
├── package.json
|
||||
├── tsconfig.json
|
||||
└── README.md
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
# Struktur Source Code
|
||||
|
||||
``` text
|
||||
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.
|
||||
|
||||
``` text
|
||||
modules/
|
||||
├── identity/
|
||||
├── authorization/
|
||||
├── registry/
|
||||
├── configuration/
|
||||
├── storage/
|
||||
├── media/
|
||||
├── audit/
|
||||
├── dashboard/
|
||||
└── health/
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
# Struktur Internal Module
|
||||
|
||||
``` text
|
||||
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.
|
||||
|
||||
``` text
|
||||
adapters/
|
||||
├── nextcloud/
|
||||
├── jellyfin/
|
||||
├── immich/
|
||||
├── minecraft/
|
||||
└── ...
|
||||
```
|
||||
|
||||
Adapter tidak menyimpan business logic.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
# Prisma
|
||||
|
||||
``` text
|
||||
prisma/
|
||||
├── schema.prisma
|
||||
├── migrations/
|
||||
└── seed.ts
|
||||
```
|
||||
|
||||
Seluruh perubahan database dilakukan melalui migration.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
# Tests
|
||||
|
||||
``` text
|
||||
tests/
|
||||
├── unit/
|
||||
├── integration/
|
||||
└── e2e/
|
||||
```
|
||||
|
||||
Pengujian dipisahkan berdasarkan jenisnya.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
# Dokumentasi
|
||||
|
||||
``` text
|
||||
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:
|
||||
|
||||
``` text
|
||||
identity
|
||||
authorization
|
||||
media
|
||||
```
|
||||
|
||||
## File
|
||||
|
||||
Menggunakan nama yang deskriptif.
|
||||
|
||||
Contoh:
|
||||
|
||||
``` text
|
||||
create-user.dto.ts
|
||||
user.repository.ts
|
||||
users.controller.ts
|
||||
```
|
||||
|
||||
## Class
|
||||
|
||||
Menggunakan PascalCase.
|
||||
|
||||
Contoh:
|
||||
|
||||
``` text
|
||||
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.
|
||||
Reference in New Issue
Block a user