# BackOffice.BFF > Backend For Frontend layer برای BackOffice UI ## 📋 خلاصه BackOffice.BFF لایه واسط بین BackOffice UI و CMS microservices است که: - درخواست‌های UI را aggregate می‌کند - قراردادهای gRPC اختصاصی ارائه می‌دهد - منطق سطح BFF را پیاده‌سازی می‌کند ## 🏗️ معماری ### Protobuf Projects (Own Contracts) BackOffice.BFF از قراردادهای Protobuf **اختصاصی خودش** استفاده می‌کند: | Project | Version | Namespace | Purpose | |---------|---------|-----------|----------| | BackOffice.BFF.ClubMembership.Protobuf | 0.0.7 | Foursat.BackOffice.BFF.ClubMembership.Protos | باشگاه مشتریان | | BackOffice.BFF.Commission.Protobuf | 0.0.13 | Foursat.BackOffice.BFF.Commission.Protos | کمیسیون | | BackOffice.BFF.Configuration.Protobuf | 1.0.20 | BackOffice.BFF.Configuration.Protobuf.Protos | تنظیمات + AppVersion | | BackOffice.BFF.NetworkMembership.Protobuf | 0.0.11 | Foursat.BackOffice.BFF.NetworkMembership.Protos | شبکه | **تغییر معماری (۱۷ آذر ۱۴۰۴)**: - ❌ **قبلا**: استفاده مستقیم از `CMSMicroservice.Protobuf` (Anti-Pattern) - ✅ **حالا**: Protobuf اختصاصی با namespace مجزا - ✅ **مزایا**: جدایی concerns، versioning مستقل، کاهش coupling ### GrpcServices Mode همه پروژه‌های Protobuf با `GrpcServices="Both"` پیکربندی شده‌اند: - **Server**: Base classes برای پیاده‌سازی در BFF - **Client**: Client classes برای استفاده در BackOffice UI ### HTTP Annotations (Swagger) همه 33 endpoint با HTTP annotations پیاده‌سازی شده‌اند: ```protobuf import "google/api/annotations.proto"; rpc GetClubMembershipById(GetClubMembershipByIdRequest) returns (GetClubMembershipByIdResponse) { option (google.api.http) = { get: "/GetClubMembershipById" }; } ``` **Package**: Google.Api.CommonProtos v2.10.0 ## 🔧 Mapster Configuration ### Immutable Type Handling Protobuf messages دارای فیلدهای immutable هستند. از `MapWith()` استفاده کنید: ```csharp config.NewConfig() .MapWith(src => new GetNetworkTreeResponse { Items = { src.Items.Select(x => new NetworkTreeNodeModel { UserId = x.UserId, FirstName = x.FirstName, // ... }) } }); ``` **Profiles**: - NetworkMembershipProfile.cs - ProductsProfile.cs ## 📦 Package Publishing برای publish به GitLab registry: ```bash cd BackOffice.BFF.{Module}.Protobuf dotnet pack -c Release # Auto-push via PushToFourSat target ``` **Registry**: https://git.afrino.co/api/packages/FourSat/nuget ## 🔗 Related Docs - [Architecture Patterns](../../../02-ARCHITECTURE/README.md) - [API Coverage](api-coverage.md) - [Protobuf Dependencies](protobuf-dependencies.md)