diff --git a/src/BackOffice.BFF.Application/BackOffice.BFF.Application.csproj b/src/BackOffice.BFF.Application/BackOffice.BFF.Application.csproj
index 0bb478b..792b1b6 100644
--- a/src/BackOffice.BFF.Application/BackOffice.BFF.Application.csproj
+++ b/src/BackOffice.BFF.Application/BackOffice.BFF.Application.csproj
@@ -16,12 +16,14 @@
+
+
diff --git a/src/BackOffice.BFF.Application/DiscountCategoryCQ/Commands/CreateDiscountCategory/CreateDiscountCategoryCommandHandler.cs b/src/BackOffice.BFF.Application/DiscountCategoryCQ/Commands/CreateDiscountCategory/CreateDiscountCategoryCommandHandler.cs
index d2d28cf..c1a47cc 100644
--- a/src/BackOffice.BFF.Application/DiscountCategoryCQ/Commands/CreateDiscountCategory/CreateDiscountCategoryCommandHandler.cs
+++ b/src/BackOffice.BFF.Application/DiscountCategoryCQ/Commands/CreateDiscountCategory/CreateDiscountCategoryCommandHandler.cs
@@ -25,7 +25,7 @@ public class CreateDiscountCategoryCommandHandler : IRequestHandler 0)
diff --git a/src/BackOffice.BFF.Application/DiscountCategoryCQ/Commands/UpdateDiscountCategory/UpdateDiscountCategoryCommandHandler.cs b/src/BackOffice.BFF.Application/DiscountCategoryCQ/Commands/UpdateDiscountCategory/UpdateDiscountCategoryCommandHandler.cs
index 42b2fd2..d3c378b 100644
--- a/src/BackOffice.BFF.Application/DiscountCategoryCQ/Commands/UpdateDiscountCategory/UpdateDiscountCategoryCommandHandler.cs
+++ b/src/BackOffice.BFF.Application/DiscountCategoryCQ/Commands/UpdateDiscountCategory/UpdateDiscountCategoryCommandHandler.cs
@@ -26,7 +26,7 @@ public class UpdateDiscountCategoryCommandHandler : IRequestHandler 0)
diff --git a/src/BackOffice.BFF.Application/DiscountCategoryCQ/Queries/GetDiscountCategories/GetDiscountCategoriesQueryHandler.cs b/src/BackOffice.BFF.Application/DiscountCategoryCQ/Queries/GetDiscountCategories/GetDiscountCategoriesQueryHandler.cs
index c805683..e0230b8 100644
--- a/src/BackOffice.BFF.Application/DiscountCategoryCQ/Queries/GetDiscountCategories/GetDiscountCategoriesQueryHandler.cs
+++ b/src/BackOffice.BFF.Application/DiscountCategoryCQ/Queries/GetDiscountCategories/GetDiscountCategoriesQueryHandler.cs
@@ -17,10 +17,10 @@ public class GetDiscountCategoriesQueryHandler : IRequestHandler
+{
+ public long UserId { get; init; }
+}
diff --git a/src/BackOffice.BFF.Application/PackageCQ/Queries/GetUserPackageStatus/GetUserPackageStatusQueryHandler.cs b/src/BackOffice.BFF.Application/PackageCQ/Queries/GetUserPackageStatus/GetUserPackageStatusQueryHandler.cs
new file mode 100644
index 0000000..448b93b
--- /dev/null
+++ b/src/BackOffice.BFF.Application/PackageCQ/Queries/GetUserPackageStatus/GetUserPackageStatusQueryHandler.cs
@@ -0,0 +1,52 @@
+using BackOffice.BFF.Package.Protobuf.Protos.Package;
+using MediatR;
+using Microsoft.Extensions.Logging;
+
+namespace BackOffice.BFF.Application.PackageCQ.Queries.GetUserPackageStatus;
+
+public class GetUserPackageStatusQueryHandler : IRequestHandler
+{
+ private readonly PackageContract.PackageContractClient _packageClient;
+ private readonly ILogger _logger;
+
+ public GetUserPackageStatusQueryHandler(
+ PackageContract.PackageContractClient packageClient,
+ ILogger logger)
+ {
+ _packageClient = packageClient;
+ _logger = logger;
+ }
+
+ public async Task Handle(GetUserPackageStatusQuery request, CancellationToken cancellationToken)
+ {
+ // TODO: پیادهسازی GetUserPackageStatus
+ //
+ // 1. ایجاد gRPC Request:
+ // - var grpcRequest = new CMSMicroservice.Protobuf.Protos.Package.GetUserPackageStatusRequest {
+ // UserId = request.UserId
+ // }
+ //
+ // 2. فراخوانی CMS:
+ // - var response = await _packageClient.GetUserPackageStatusAsync(grpcRequest, cancellationToken: cancellationToken)
+ //
+ // 3. تبدیل به BFF Response:
+ // - return new GetUserPackageStatusResponse {
+ // UserId = response.UserId,
+ // PackagePurchaseMethod = response.PackagePurchaseMethod,
+ // HasPurchasedPackage = response.HasPurchasedPackage,
+ // IsClubMemberActive = response.IsClubMemberActive,
+ // WalletBalance = response.WalletBalance,
+ // DiscountBalance = response.DiscountBalance,
+ // CanActivateClubMembership = response.CanActivateClubMembership,
+ // LastOrderNumber = response.LastOrderNumber,
+ // LastPurchaseDate = response.LastPurchaseDate
+ // }
+ //
+ // 4. Log:
+ // - _logger.LogInformation("Retrieved package status for user {UserId}", request.UserId)
+ //
+ // نکته: این endpoint برای Admin است تا وضعیت کاربران را بررسی کند
+
+ throw new NotImplementedException("GetUserPackageStatus needs implementation");
+ }
+}
diff --git a/src/BackOffice.BFF.Application/PackageCQ/Queries/GetUserPackageStatus/GetUserPackageStatusQueryValidator.cs b/src/BackOffice.BFF.Application/PackageCQ/Queries/GetUserPackageStatus/GetUserPackageStatusQueryValidator.cs
new file mode 100644
index 0000000..eb8c408
--- /dev/null
+++ b/src/BackOffice.BFF.Application/PackageCQ/Queries/GetUserPackageStatus/GetUserPackageStatusQueryValidator.cs
@@ -0,0 +1,13 @@
+using FluentValidation;
+
+namespace BackOffice.BFF.Application.PackageCQ.Queries.GetUserPackageStatus;
+
+public class GetUserPackageStatusQueryValidator : AbstractValidator
+{
+ public GetUserPackageStatusQueryValidator()
+ {
+ RuleFor(x => x.UserId)
+ .GreaterThan(0)
+ .WithMessage("شناسه کاربر باید بزرگتر از 0 باشد");
+ }
+}
diff --git a/src/BackOffice.BFF.Application/PublicMessageCQ/.gitkeep b/src/BackOffice.BFF.Application/PublicMessageCQ/.gitkeep
new file mode 100644
index 0000000..e42c885
--- /dev/null
+++ b/src/BackOffice.BFF.Application/PublicMessageCQ/.gitkeep
@@ -0,0 +1 @@
+// Placeholder for PublicMessageCQ
diff --git a/src/BackOffice.BFF.Application/PublicMessageCQ/Commands/README.md b/src/BackOffice.BFF.Application/PublicMessageCQ/Commands/README.md
new file mode 100644
index 0000000..97e9e3f
--- /dev/null
+++ b/src/BackOffice.BFF.Application/PublicMessageCQ/Commands/README.md
@@ -0,0 +1,6 @@
+// TODO: PublicMessage Commands
+// - CreatePublicMessage
+// - UpdatePublicMessage
+// - DeletePublicMessage
+// - PublishMessage
+// - ArchiveMessage
diff --git a/src/BackOffice.BFF.Application/PublicMessageCQ/Queries/GetActiveMessages/GetActiveMessagesQuery.cs b/src/BackOffice.BFF.Application/PublicMessageCQ/Queries/GetActiveMessages/GetActiveMessagesQuery.cs
new file mode 100644
index 0000000..c1df59b
--- /dev/null
+++ b/src/BackOffice.BFF.Application/PublicMessageCQ/Queries/GetActiveMessages/GetActiveMessagesQuery.cs
@@ -0,0 +1,17 @@
+// GetActiveMessages - Public view
+using MediatR;
+
+namespace BackOffice.BFF.Application.PublicMessageCQ.Queries.GetActiveMessages;
+
+public record GetActiveMessagesQuery : IRequest