feat: Implement Discount Sales Report Query and Handler
Build and Deploy / build (push) Successful in 2m33s

- Added GetDiscountSalesReportQuery and GetDiscountSalesReportQueryHandler to fetch discount sales reports.
- Introduced DiscountSalesReportDto, SalesSummaryDto, and PeriodSalesDto for structured report data.

feat: Add Discount Product Image Management

- Created AddDiscountProductImageCommand and AddDiscountProductImageCommandHandler for image uploads.
- Implemented DeleteDiscountProductImageCommand and DeleteDiscountProductImageCommandHandler for image deletion.
- Added ReorderDiscountProductImagesCommand and ReorderDiscountProductImagesCommandHandler for image reordering.
- Developed UpdateDiscountProductImageCommand and UpdateDiscountProductImageCommandHandler for image updates.

feat: Enhance Product Tag Management

- Introduced DeleteProductTagCommand and DeleteProductTagCommandHandler for tag deletion.
- Added UpdateProductTagCommand and UpdateProductTagCommandHandler for updating product tags.
- Implemented GetAllProductTagsQuery and GetAllProductTagsQueryHandler for fetching all product tags.
- Created GetProductTagQuery and GetProductTagQueryHandler for retrieving specific product tags.

feat: Develop Web API Services for Discount and Product Management

- Implemented DiscountCategoryService for managing discount categories.
- Created DiscountOrderService for handling discount orders and related queries.
- Developed DiscountProductService for managing discount products and their images.
- Added DiscountShoppingCartService for managing shopping cart operations.
- Implemented ProductTagService for managing product tags and their associations.
- Created TagService for managing tags and their related operations.
This commit is contained in:
masoodafar-web
2026-01-01 02:26:51 +03:30
parent 721207f6a0
commit d0224d41b2
48 changed files with 1368 additions and 51 deletions
@@ -4,7 +4,7 @@
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version>0.0.3</Version>
<Version>0.0.4</Version>
<DebugType>None</DebugType>
<DebugSymbols>False</DebugSymbols>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
@@ -23,7 +23,7 @@
</ItemGroup>
<ItemGroup>
<Protobuf Include="Protos\discountorder.proto" ProtoRoot="Protos\" GrpcServices="Client" AdditionalImportDirs="..\BackOffice.BFF.Common.Protobuf\Protos"/>
<Protobuf Include="Protos\discountorder.proto" ProtoRoot="Protos\" GrpcServices="Both" AdditionalImportDirs="..\BackOffice.BFF.Common.Protobuf\Protos"/>
</ItemGroup>
<ItemGroup>
@@ -40,6 +40,20 @@ service DiscountOrderContract
get: "/GetUserOrders"
};
};
// Admin: Get All Discount Orders with filters
rpc GetAllDiscountOrders(GetAllDiscountOrdersRequest) returns (GetAllDiscountOrdersResponse){
option (google.api.http) = {
get: "/GetAllDiscountOrders"
};
};
// Admin: Get Sales Report
rpc GetDiscountSalesReport(GetDiscountSalesReportRequest) returns (GetDiscountSalesReportResponse){
option (google.api.http) = {
get: "/GetDiscountSalesReport"
};
};
}
// Place Order (Initial Step - Create Order)
@@ -175,3 +189,118 @@ message OrderSummaryDto
int32 items_count = 9;
google.protobuf.Timestamp created = 10;
}
// ===== Admin: Get All Discount Orders =====
message GetAllDiscountOrdersRequest
{
google.protobuf.Int64Value user_id = 1;
google.protobuf.Int32Value payment_status = 2;
google.protobuf.Int32Value delivery_status = 3;
google.protobuf.StringValue user_mobile = 4;
google.protobuf.StringValue tracking_code = 5;
google.protobuf.Timestamp from_date = 6;
google.protobuf.Timestamp to_date = 7;
google.protobuf.Int64Value min_amount = 8;
google.protobuf.Int64Value max_amount = 9;
int32 page_number = 10;
int32 page_size = 11;
}
message GetAllDiscountOrdersResponse
{
messages.MetaData meta_data = 1;
repeated AdminOrderDto models = 2;
}
message AdminOrderDto
{
int64 id = 1;
int64 user_id = 2;
string user_full_name = 3;
string user_mobile = 4;
int64 total_amount = 5;
int64 discount_balance_used = 6;
int64 gateway_amount_paid = 7;
int64 vat_amount = 8;
PaymentStatus payment_status = 9;
google.protobuf.Timestamp payment_date = 10;
DeliveryStatus delivery_status = 11;
google.protobuf.Timestamp delivery_date = 12;
google.protobuf.StringValue shipping_address = 13;
google.protobuf.StringValue receiver_name = 14;
google.protobuf.StringValue receiver_mobile = 15;
google.protobuf.StringValue tracking_code = 16;
google.protobuf.StringValue admin_note = 17;
google.protobuf.Timestamp created = 18;
google.protobuf.Timestamp last_modified = 19;
int32 items_count = 20;
}
enum PaymentStatus
{
PAYMENT_PENDING = 0;
PAYMENT_COMPLETED = 1;
PAYMENT_FAILED = 2;
PAYMENT_REFUNDED = 3;
}
// ===== Sales Report Messages =====
enum SalesReportType
{
REPORT_SUMMARY = 0;
REPORT_DAILY = 1;
REPORT_WEEKLY = 2;
REPORT_MONTHLY = 3;
}
message GetDiscountSalesReportRequest
{
google.protobuf.Timestamp from_date = 1;
google.protobuf.Timestamp to_date = 2;
SalesReportType report_type = 3;
}
message GetDiscountSalesReportResponse
{
SalesSummary summary = 1;
repeated SalesPeriodDto periods = 2;
repeated TopSellingProductDto top_products = 3;
}
message SalesSummary
{
int32 total_orders = 1;
int32 completed_orders = 2;
int32 pending_orders = 3;
int32 cancelled_orders = 4;
int64 total_sales_amount = 5;
int64 total_discount_used = 6;
int64 total_gateway_paid = 7;
int64 total_vat_amount = 8;
int64 average_order_value = 9;
int32 unique_customers = 10;
int32 total_products_sold = 11;
}
message SalesPeriodDto
{
string period_label = 1;
google.protobuf.Timestamp period_start = 2;
google.protobuf.Timestamp period_end = 3;
int32 orders_count = 4;
int64 total_amount = 5;
int64 discount_used = 6;
int64 gateway_paid = 7;
}
message TopSellingProductDto
{
int64 product_id = 1;
string product_title = 2;
google.protobuf.StringValue image_path = 3;
int32 quantity_sold = 4;
int64 total_revenue = 5;
int32 orders_count = 6;
}