# FrontOffice.BFF ## Overview FrontOffice.BFF (Backend-For-Frontend) is a gRPC-based API gateway that serves the FrontOffice web application. It communicates with the CMS microservice via gRPC and exposes APIs to the frontend. ## Architecture ``` Frontend (FrontOffice) → FrontOffice.BFF → CMS Microservice ``` ## Project Structure ``` FrontOffice.BFF/ ├── src/ │ ├── FrontOffice.BFF.Application/ # CQRS handlers, DTOs, interfaces │ ├── FrontOffice.BFF.Domain/ # Domain entities │ ├── FrontOffice.BFF.Infrastructure/ # gRPC clients, DI config │ ├── FrontOffice.BFF.WebApi/ # gRPC services, mappings │ └── Protobufs/ # Proto definitions for frontend │ ├── FrontOffice.BFF.Category.Protobuf/ │ ├── FrontOffice.BFF.DiscountShop.Protobuf/ # NEW │ ├── FrontOffice.BFF.Package.Protobuf/ │ ├── FrontOffice.BFF.Products.Protobuf/ │ ├── FrontOffice.BFF.ShopingCart.Protobuf/ │ ├── FrontOffice.BFF.Transaction.Protobuf/ │ ├── FrontOffice.BFF.User.Protobuf/ │ ├── FrontOffice.BFF.UserAddress.Protobuf/ │ ├── FrontOffice.BFF.UserOrder.Protobuf/ │ └── FrontOffice.BFF.UserWallet.Protobuf/ ``` ## Feature Modules ### DiscountShopCQ (New - Jan 2025) فروشگاه تخفیفی برای اعضای باشگاه مشتریان **Queries:** - `GetDiscountProducts` - لیست محصولات تخفیفی - `GetDiscountCategories` - دسته‌بندی‌های فروشگاه - `GetMyDiscountCart` - سبد خرید تخفیفی کاربر - `GetMyDiscountOrders` - سفارشات تخفیفی کاربر **Commands:** - `AddToDiscountCart` - افزودن به سبد خرید - `RemoveFromDiscountCart` - حذف از سبد خرید - `PlaceDiscountOrder` - ثبت سفارش ### CommissionCQ سیستم کمیسیون شبکه‌ای **Queries:** - `GetMyCommissionPayouts` - لیست پرداخت‌های کمیسیون - `GetMyWeeklyBalances` - بالانس‌های هفتگی ### NetworkMembershipCQ عضویت شبکه‌ای و درخت باینری **Queries:** - `GetMyNetworkPosition` - موقعیت کاربر در شبکه - `GetMyNetworkStatistics` - آمار شبکه - `GetMyNetworkTree` - درخت شبکه ### ClubMembershipCQ عضویت باشگاه مشتریان **Queries:** - `GetMyClubMembership` - وضعیت عضویت **Commands:** - `ActivateMyClubMembership` - فعال‌سازی عضویت ### UserWalletCQ کیف پول کاربر **Queries:** - `GetUserWallet` - موجودی کیف پول - `GetAllUserWalletChangeLog` - تاریخچه تراکنش‌ها **Commands:** - `WithdrawBalance` - درخواست برداشت - `TransferUserWalletBallance` - انتقال موجودی (TODO: needs CMS proto) - `DeleteUser` - حذف کاربر ## gRPC Clients (CMS Connection) Defined in `IApplicationContractContext.cs`: - `ProductContract` - محصولات - `CategoryContract` - دسته‌بندی‌ها - `ShopingCartContract` - سبد خرید - `TransactionContract` - تراکنش‌ها - `UserWalletContract` - کیف پول - `UserContract` - کاربران - `UserOrderContract` - سفارشات - `NetworkMembershipContract` - عضویت شبکه - `CommissionContract` - کمیسیون - `ClubMembershipContract` - باشگاه مشتریان - `DiscountProductContract` - محصولات تخفیفی (NEW) - `DiscountCategoryContract` - دسته‌بندی تخفیفی (NEW) - `DiscountShoppingCartContract` - سبد خرید تخفیفی (NEW) - `DiscountOrderContract` - سفارش تخفیفی (NEW) ## Build & Run ```bash cd FrontOffice.BFF/src dotnet build dotnet run --project FrontOffice.BFF.WebApi ``` ## Last Updated January 2025 - Added DiscountShop integration (4 gRPC clients, 7 handlers, Proto service)