Commit Graph

183 Commits

Author SHA1 Message Date
masoodafar-web 094846ce8b feat: add manual membership payment processing with wallet and order management
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 7m8s
2025-12-12 10:07:14 +03:30
masoodafar-web b19cf5e32e fix: use Gregorian week number for API and Persian for display
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m18s
2025-12-12 09:39:20 +03:30
masoodafar-web b1c3fcfd66 feat: add Persian calendar support for week numbers and dates
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 6m35s
2025-12-12 09:18:31 +03:30
masoodafar-web 1f6c5a1f45 fix: update default sorting from descending to ascending Created
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m43s
2025-12-12 07:49:54 +03:30
masoodafar-web 99b217d5b5 fix: change weekly balance sorting from WeekNumber to Created
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m39s
2025-12-12 07:32:22 +03:30
masoodafar-web 8ee3fe6f7b fix: update week calculation to start from Saturday
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m2s
2025-12-12 07:07:28 +03:30
masoodafar-web 3c7ac68eeb feat: enhance network membership response with detailed stats and hierarchy
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m14s
2025-12-12 06:07:23 +03:30
masoodafar-web f27418cff4 fix: adjust network tree depth limit and update commission mapping
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m5s
2025-12-12 05:42:19 +03:30
masoodafar-web aba534e07c fix: update week calculation to use Saturday as the start of the week
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m12s
2025-12-12 04:37:34 +03:30
masoodafar-web af3a29ed27 fix: adjust week calculation to FirstDay and Saturday
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 3m9s
2025-12-12 04:23:14 +03:30
masoodafar-web db951699f8 fix: handle null pool and adjust week calculation rules
Build and Deploy to Kubernetes / build-and-deploy (push) Has been cancelled
2025-12-12 04:22:16 +03:30
masoodafar-web bb6b7c709c feat: add search text filter for user query
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m40s
2025-12-12 03:18:18 +03:30
masoodafar-web 12749ccb01 chore: bump version to 0.0.146
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 11m40s
2025-12-12 01:41:48 +03:30
masoodafar-web ff1c1d5d61 feat: add IsActive field to UserClubFeatures for admin management 2025-12-12 01:40:26 +03:30
masoodafar-web aa66ca10c8 feat: add Mapster mapping and update network tree request
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m11s
2025-12-08 04:10:46 +03:30
masoud 69d5ecf0d7 revert: Back to simple MigrateAsync - it's already idempotent
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m5s
MigrateAsync is smart enough to:
- Create DB if it doesn't exist
- Apply only pending migrations
- Skip if DB is up to date

The orphaned CMS.mdf files were cleaned from SQL Server.
2025-12-07 21:27:46 +00:00
masoud 1dbe90d020 fix: Use EnsureCreatedAsync instead of MigrateAsync for initial db setup
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m9s
- EnsureCreatedAsync creates db only if it doesn't exist
- Returns false if db already exists (idempotent)
- Prevents 'CMS.mdf already exists' error
- Still applies pending migrations when needed
2025-12-07 21:21:47 +00:00
masoud 7ec9c4077c fix: Improve database migration strategy - only migrate if needed
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m16s
- Check if database exists before creating
- Only apply pending migrations
- Skip migration if database is up to date
- Prevents 'file already exists' error on restart
2025-12-07 21:16:49 +00:00
masoud 0fe39cf9f6 feat: enable pure HTTP/2 for gRPC compatibility with nginx ingress 2025-12-07 17:53:43 +00:00
masoodafar-web e7937fe7ee fix: Remove trailing whitespace in Seq config 2025-12-07 20:09:01 +03:30
masoodafar-web 9fb5119fc1 fix: Remove trailing whitespace in Seq config 2025-12-07 19:46:36 +03:30
masoodafar-web adcc776230 feat: Add Kestrel HTTP/2 configuration for macOS 2025-12-06 22:24:28 +03:30
masoodafar-web a0da7eb8e0 feat: Implement real Daya API integration with configurable mock/real service 2025-12-06 21:02:51 +03:30
masoodafar-web e46f54ca5b Merge branch 'test' into kub-stage
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m16s
2025-12-06 00:17:39 +03:30
masoodafar-web 00ba911703 feat: Add archive and schedule fields to PublicMessages 2025-12-06 00:16:30 +03:30
masoud bfcb0d880f feat: Read Seq logging config from appsettings.json + add Console logging 2025-12-05 19:32:28 +00:00
masoud ed642947dc Fix: Suppress EF Core 9 PendingModelChangesWarning 2025-12-05 18:55:12 +00:00
masoodafar-web 217ef147dd feat: Implement manual payment system with gRPC service and related commands/queries 2025-12-05 17:26:58 +03:30
masoodafar-web ee1fa9d064 feat: Enhance withdrawal request handling with additional fields and network level configurations 2025-12-04 19:53:30 +03:30
masoodafar-web 5e3112d71f feat: Implement withdrawal reports query and service integration 2025-12-04 17:29:10 +03:30
masoodafar-web abda623519 chore: Bump CMSMicroservice.Protobuf version to 0.0.142 2025-12-04 05:21:25 +03:30
masoodafar-web ba6d74fe35 feat: Implement Public Message Management Commands and Queries
- Add GetUserPackageStatusQueryValidator for user package status validation.
- Create ArchiveMessageCommand and ArchiveMessageCommandHandler for archiving public messages.
- Implement ArchiveMessageCommandValidator to validate message ID.
- Introduce PublishMessageCommand and PublishMessageCommandHandler for publishing messages.
- Add PublishMessageCommandValidator for validating publish message requests.
- Implement GetPublicMessageQuery and GetPublicMessageQueryHandler for retrieving public messages.
- Create GetPublicMessageQueryValidator for validating public message requests.
- Add ApplyDiscountToOrderCommand and ApplyDiscountToOrderCommandHandler for applying discounts to orders.
- Implement ApplyDiscountToOrderCommandValidator for validating discount application requests.
- Create UpdateOrderStatusCommand and UpdateOrderStatusCommandHandler for changing order statuses.
- Implement UpdateOrderStatusCommandValidator for validating order status updates.
- Add CalculateOrderPVQuery and CalculateOrderPVQueryHandler for calculating order PV.
- Implement CalculateOrderPVQueryValidator for validating PV calculation requests.
- Create GetOrdersByDateRangeQuery and GetOrdersByDateRangeQueryHandler for retrieving orders by date range.
- Implement GetOrdersByDateRangeQueryValidator for validating date range queries.
- Add PublicMessage entity to represent public messages in the system.
- Implement PublicMessageService for handling public message operations via gRPC.
2025-12-04 03:43:19 +03:30
masoodafar-web 84f642e900 feat: Implement bulk update for product prices and stock, and add low stock products query and toggle product status functionality 2025-12-04 02:56:03 +03:30
masoodafar-web f0f48118e7 Add validators and services for Product Galleries and Product Tags
- Implemented Create, Delete, Get, and Update validators for Product Galleries.
- Added Create, Delete, Get, and Update validators for Product Tags.
- Created service classes for handling Discount Categories, Discount Orders, Discount Products, Discount Shopping Cart, Product Categories, Product Galleries, and Product Tags.
- Each service class integrates with CQRS for command and query handling.
- Established mapping profiles for Product Galleries.
2025-12-04 02:40:49 +03:30
masoodafar-web 40d54d08fc feat: Implement Bank Mellat and Daya payment gateway services with initiation, verification, and payout processing 2025-12-02 03:31:17 +03:30
masoodafar-web 78606cc5cc feat: Add ClearCart command and response, implement CancelOrder command with validation, and enhance DeliveryStatus and User models 2025-12-02 03:30:36 +03:30
masoodafar-web 25fc73ae28 feat: Enhance network membership and withdrawal processing with user tracking and logging 2025-12-01 20:52:18 +03:30
masoodafar-web 4aaf2247ff feat: Implement Approve and Reject Withdrawal commands with handlers 2025-12-01 16:48:07 +03:30
masoodafar-web 8d31a8c026 feat: Add GetClubStatistics and GetNetworkStatistics APIs with corresponding request and response messages 2025-12-01 16:43:53 +03:30
masoodafar-web 199e7e99d1 feat: Add monitoring alerts skeleton and enhance worker with notifications 2025-11-30 20:18:10 +03:30
masoodafar-web 0ddf64370d feat: Complete Phase 8 - Migration & Seed Data
Database Migration:
- Applied migration 20251129002222_AddNetworkClubSystemV2
- Created 11 new tables:
  * SystemConfigurations
  * SystemConfigurationHistories
  * ClubMemberships
  * ClubMembershipHistories
  * ClubFeatures
  * UserClubFeatures
  * NetworkWeeklyBalances
  * WeeklyCommissionPools
  * UserCommissionPayouts
  * CommissionPayoutHistories
  * NetworkMembershipHistories
- Updated existing tables:
  * Users: Added NetworkParentId, LegPosition
  * UserWallets: Added DiscountBalance
  * Products: Added IsClubExclusive, ClubDiscountPercent

Seed Data:
- Added 10 default SystemConfigurations:
  * Network settings (MaxDepth, AllowOrphanNodes)
  * Club settings (DefaultDuration, MinimumActivation)
  * Commission settings (PoolPercent, MinimumPayout, WithdrawalMethods)
  * System settings (MaintenanceMode, AuditLog)

Migration Status:  Applied successfully
Database Schema:  Verified
Build Status:  Success (0 errors)
2025-11-29 04:57:42 +03:30
masoodafar-web 2bb8c2a13c feat: Add gRPC API Layer - Phase 6 Integration
Added Protobuf definitions and gRPC services for all CQ layers:

Protobuf Files (4):
- configuration.proto: 2 Commands + 3 Queries (5 RPCs)
- clubmembership.proto: 3 Commands + 3 Queries (6 RPCs)
- networkmembership.proto: 3 Commands + 3 Queries (6 RPCs)
- commission.proto: 5 Commands + 4 Queries (9 RPCs)

gRPC Services (4):
- ConfigurationService: SetConfigurationValue, Deactivate, GetByKey, GetAll, GetHistory
- ClubMembershipService: Activate, Deactivate, AssignFeature, Get, GetAll, GetHistory
- NetworkMembershipService: Join, Move, Remove, GetPosition, GetTree, GetHistory
- CommissionService: Calculate+Process+Withdraw (5 commands), Get queries (4)

Features:
- HTTP transcoding enabled via google.api.http annotations
- Auto-registration via ConfigureGrpcEndpoints
- MetaData pagination support
- Request/Response DTOs for all endpoints
- Integration with MediatR CQRS handlers

Total: 4 proto files, 4 service classes, 26 RPC endpoints
Build:  Successful (0 errors)
2025-11-29 04:45:27 +03:30
masoodafar-web 487d1ceb15 feat: Add CommissionCQ - Phase 5 Application Layer
Added 5 Commands and 4 Queries for commission calculation and payout system:

Commands:
- CalculateWeeklyBalances: Recursive binary tree traversal for leg balances
- CalculateWeeklyCommissionPool: Calculate ValuePerBalance from total pool
- ProcessUserPayouts: Distribute commission to users, create payout records
- RequestWithdrawal: User requests cash/diamond withdrawal
- ProcessWithdrawal: Admin approves/rejects withdrawal

Queries:
- GetWeeklyCommissionPool: Retrieve pool details
- GetUserCommissionPayouts: List payouts with filters (status, week, user)
- GetCommissionPayoutHistory: Complete audit trail
- GetUserWeeklyBalances: Show leg balances and contributions

Total: 35 files, ~1,100 lines of code
Binary tree algorithm, state machine, withdrawal system implemented
2025-11-29 04:32:17 +03:30
masoodafar-web db96a02f89 feat: Add NetworkMembershipCQ - Phase 4 Application Layer
- Implemented 3 Commands with handlers and validators:
  * JoinNetworkCommand: Add user to binary network tree
    - Validates parent exists and is in network
    - Validates leg position is empty
    - Records history with NetworkMembershipAction.Join
  * MoveInNetworkCommand: Move user to different position
    - Validates new parent and leg availability
    - Prevents circular dependencies (IsDescendant check)
    - Records old/new parent and leg in history
  * RemoveFromNetworkCommand: Remove user from network
    - Validates no children exist (must move/remove first)
    - Soft delete (sets NetworkParentId to null)
    - Idempotent design

- Implemented 3 Queries with handlers, validators, and DTOs:
  * GetNetworkTreeQuery: Binary tree visualization
    - Recursive tree building with MaxDepth limit (1-10)
    - Returns nested structure with Left/Right children
  * GetUserNetworkPositionQuery: User position details
    - Parent info, leg position, children counts
    - Left/Right child counts for balance view
  * GetNetworkMembershipHistoryQuery: Complete audit trail
    - Filter by UserId, pagination support
    - Shows Join/Move/Remove actions with full details

- All operations include complete history tracking
- Binary tree validation (parent-child relationships)
- Circular dependency prevention in MoveInNetwork
- 21 new files, ~850 lines of code
- Build successful with 0 errors
2025-11-29 04:19:40 +03:30
masoodafar-web fe66d478ee feat: Add ClubMembershipCQ - Phase 3 Application Layer
- Implemented 3 Commands with handlers and validators:
  * ActivateClubMembership: Create/reactivate membership
  * DeactivateClubMembership: Deactivate existing membership
  * AssignClubFeature: Assign features to club members

- Implemented 3 Queries with handlers, validators, and DTOs:
  * GetClubMembership: Retrieve single membership by UserId
  * GetAllClubMemberships: List with filtering and pagination
  * GetClubMembershipHistory: Audit trail with full history

- All operations include history tracking via ClubMembershipHistory
- Property names aligned with Domain entity definitions
- 21 new files, ~600 lines of code
- Build successful with 0 errors
2025-11-29 04:13:27 +03:30
masoodafar-web f6fa070067 feat: Add ConfigurationCQ - Phase 2 Application Layer
Implemented complete CQRS pattern for System Configuration management:

Commands:
- SetConfigurationValueCommand: Create or update configurations with history tracking
- DeactivateConfigurationCommand: Deactivate configurations with audit trail

Queries:
- GetConfigurationByKeyQuery: Retrieve configuration by Scope and Key
- GetAllConfigurationsQuery: List all configurations with filters and pagination
- GetConfigurationHistoryQuery: View complete audit history for any configuration

Features:
- All commands include FluentValidation validators
- History recording to SystemConfigurationHistory table
- Pagination support for list queries
- DTOs for clean data transfer
- Null-safe implementations

Updated:
- IApplicationDbContext: Added 11 new DbSets for network-club entities
- GlobalUsings: Added new entity namespaces

Build Status:  Success (0 errors, 184 warnings in legacy code)
2025-11-29 04:02:02 +03:30
masoodafar-web 04bc593184 feat: Add EF configurations and migration for network-club system
EF Core Configurations (11 files):
- SystemConfigurationConfiguration with Scope+Key composite index
- ClubMembershipConfiguration with one-to-one User relationship
- ClubFeatureConfiguration with IsActive+SortOrder index
- UserClubFeatureConfiguration with composite unique index
- NetworkWeeklyBalanceConfiguration with UserId+WeekNumber index
- WeeklyCommissionPoolConfiguration with unique WeekNumber
- UserCommissionPayoutConfiguration with multiple indexes
- ClubMembershipHistoryConfiguration for audit trail
- NetworkMembershipHistoryConfiguration for audit trail
- CommissionPayoutHistoryConfiguration for audit trail
- SystemConfigurationHistoryConfiguration for audit trail

Configuration Updates:
- UserConfiguration: Add NetworkParentId, LegPosition with indexes
- UserWalletConfiguration: Add DiscountBalance field
- ProductsConfiguration: Add IsClubExclusive, ClubDiscountPercent with index

Infrastructure Updates:
- ApplicationDbContext: Add 11 new DbSets for network-club entities
- GlobalUsings: Add Domain entity namespaces

Migration:
- AddNetworkClubSystemV2: Complete database schema for network-club system
2025-11-29 03:52:46 +03:30
masoodafar-web d20dc86d2f feat: Add core entities and history tables for network-club system
Core Entities:
- Add SystemConfiguration for dynamic config management
- Add ClubMembership, ClubFeature, UserClubFeature for club management
- Add NetworkWeeklyBalance for binary network tracking
- Add WeeklyCommissionPool, UserCommissionPayout for commission system

History Entities (Audit Trail):
- Add ClubMembershipHistory
- Add NetworkMembershipHistory
- Add CommissionPayoutHistory
- Add SystemConfigurationHistory

Updates to Existing Entities:
- User: Add NetworkParentId, LegPosition, and navigation properties
- UserWallet: Add NetworkBalance and DiscountBalance fields
- Products: Add IsClubExclusive and ClubDiscountPercent fields
- GlobalUsings: Add new namespaces for club/network/commission entities
2025-11-29 03:44:41 +03:30
masoodafar-web 462ae5dcc0 feat: Add enums for network-club system
- Add CommissionPayoutStatus enum (Pending, Paid, WithdrawRequested, Withdrawn, Cancelled)
- Add WithdrawalMethod enum (Cash, Diamond)
- Add NetworkLeg enum (Left, Right)
- Add ClubMembershipAction enum for history tracking
- Add NetworkMembershipAction enum for history tracking
- Add CommissionPayoutAction enum for history tracking
- Add ConfigurationScope enum (System, Network, Club, Commission)
- Update TransactionType enum with NetworkCommission, ClubActivation, DiscountWalletCharge
2025-11-29 03:36:54 +03:30
masoodafar-web 8f77097278 Bump version to 0.0.139 in CMSMicroservice.Protobuf 2025-11-28 14:44:49 +03:30