Lewati ke konten utama

Struktur Proyek

Pendahuluan

Dokumen ini memberikan rincian detail tentang struktur direktori proyek, menjelaskan tujuan dari setiap folder, konvensi kepemilikan file, pola namespace, dan file-file yang terkait dengan startup.


Direktori Root

ravenxcope-backend
Program.cs# Titik masuk aplikasi
Ravenxcope.Backend.csproj# File proyek dengan referensi NuGet
appsettings.json# Templat konfigurasi produksi
appsettings.Development.json# Penimpaan pengembangan lokal (diabaikan git)
Dockerfile# Build Docker multi-tahap
.gitlab-ci.yml# Pipa CI/CD
.gitignore# Aturan abaikan Git
API# Lapisan presentasi
Application# Definisi DTO
Domain# Definisi entitas
Infrastructure# Akses data dan layanan
Common# Pembantu bersama
Extensions# Komposisi startup
Protos# Definisi gRPC protocol buffer
Migrations# File migrasi EF Core
Scripts# Skrip utilitas
Seed# File data benih (seed)
Knowledge# Dokumentasi (folder ini)

Kepemilikan Folder

FolderTanggung Jawab
API/Controllers/Penangan titik akhir HTTP, perutean permintaan, atribut otorisasi
Application/DTOs/Kelas payload permintaan dan respons
Domain/Entities/Model domain yang disimpan di PostgreSQL melalui EF Core
Infrastructure/Data/ApplicationDbContext, pabrik design-time, konfigurasi persistensi
Infrastructure/Services/Layanan integrasi eksternal (JWT, Redis, InfluxDB, OpenSearch)
Infrastructure/Repositories/Abstraksi akses data dan implementasi repositori konkret
Common/Helpers/Kelas utilitas lintas-potong
Extensions/Komposisi startup (DI, middleware, pemeriksaan kesehatan, migrasi)
Protos/File gRPC .proto untuk definisi layanan
Migrations/File migrasi database EF Core
Seed/File data yang disalin ke kontainer Docker untuk seeding
Scripts/Skrip utilitas dan operasional

Organisasi Controller

Controller dikelompokkan berdasarkan domain fitur ke dalam subdirektori:

API
Controllers
Analytics# Titik akhir analitik InfluxDB
AnalyticsController.cs
OpenSearchController.cs# Titik akhir kueri OpenSearch
VirtualSensorsAnalyticsController.cs# Analitik sensor virtual
Auth
Locations
Organizations
Permissions
Roles
Sensors# Manajemen siklus hidup sensor
SensorsController.cs
VirtualSensorsController.cs# Operasi sensor virtual
SensorHeartbeatController.cs# Pemrosesan heartbeat
Users

Konvensi Namespace

Namespace root distandarisasi menjadi Ravenxcope.Backend, tetapi beberapa area menggunakan namespace yang disingkat:

DirektoriNamespace AktualCatatan
API/Controllers/Auth/Ravenxcope.Backend.Controllers.AuthDikelompokkan berdasarkan fitur
API/Controllers/Users/Ravenxcope.Backend.Controllers.UsersDikelompokkan berdasarkan fitur
Application/DTOs/Ravenxcope.Backend.DTOsNamespace datar untuk semua DTO
Domain/Entities/Ravenxcope.Backend.Domain.EntitiesSejajar dengan struktur folder
Infrastructure/Data/Ravenxcope.Backend.DataDisingkat
Infrastructure/Services/Ravenxcope.Backend.ServicesDisingkat
Common/Helpers/Ravenxcope.Backend.Helpers atau .Common.HelpersCampuran
Extensions/Ravenxcope.Backend.ExtensionsKonsisten

Catatan: Namespace entitas sekarang diselaraskan ke Ravenxcope.Backend.Domain.Entities.


File Terkait Startup

File-file ini terlibat langsung dalam startup aplikasi:

FilePeran
Program.csTitik masuk, mengatur fase-fase startup
Extensions/ServiceCollectionExtensions.csMendaftarkan semua layanan DI, DB, auth, Swagger
Extensions/WebApplicationExtensions.csMengonfigurasi pipa middleware
Extensions/ConfigurationValidationExtensions.csMemvalidasi kunci konfigurasi wajib saat startup
Extensions/StartupDependencyHealthChecksExtensions.csPemeriksaan kesehatan untuk dependensi eksternal
Extensions/DatabaseMigrationExtensions.csMigrasi otomatis dengan logika retry
Extensions/CorsExtensions.csRegistrasi kebijakan CORS
Extensions/BackendConfiguration.csKonstanta kunci konfigurasi dan opsi ber-tipe

Referensi Paket NuGet

File .csproj mereferensikan paket-paket berikut:

Paket Aplikasi

<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
<PackageReference Include="Grpc.AspNetCore" Version="2.70.0" />
<PackageReference Include="InfluxDB.Client" Version="4.18.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.0" />
<PackageReference Include="OpenSearch.Client" Version="1.8.0" />
<PackageReference Include="StackExchange.Redis" Version="2.10.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.9.0" />

Paket Database & ORM

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.1" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />

Paket Logging

<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Enrichers.Environment" Version="3.0.1" />
<PackageReference Include="Serilog.Settings.Configuration" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />

Pengaturan Proyek

Framework Target

<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>Ravenxcope.Backend</RootNamespace>
</PropertyGroup>
  • Nullable Reference Types: Diaktifkan di seluruh proyek
  • Implicit Usings: Diaktifkan untuk namespace umum System.* dan Microsoft.*
  • Root Namespace: Diatur ke Ravenxcope.Backend (menimpa namespace berbasis folder default)

Konfigurasi Docker

EXPOSE 5144
ENV ASPNETCORE_URLS=http://+:5144
ENTRYPOINT ["dotnet", "Ravenxcope.Backend.dll"]

Dockerfile menggunakan build multi-tahap dengan mcr.microsoft.com/dotnet/sdk:10.0 untuk build dan mcr.microsoft.com/dotnet/aspnet:10.0 untuk runtime. Direktori Seed/ disalin secara eksplisit dari tahap build ke gambar akhir.