namespace Distribution.Features.Region; public record CreateRegionRequest(string Name); public record UpdateRegionRequest(string Name); public record RegionResponse(Guid Id, string Name, bool IsActive, DateTime CreatedAt); public record RegionalTargetResponse(Guid RegionId, string Period, decimal TargetValue); public record RegionalBudgetResponse(Guid RegionId, string Period, decimal BudgetAmount); public record RegionAgencyMapResponse(Guid RegionId, Guid AgencyUserId); public record RegionalTaxRuleResponse(Guid RegionId, string RuleConfig); // Consolidated "beyond CRUD" management endpoint — replaces the separate // SetTarget/SetBudget/MapAgency/SetTaxRule endpoints. Every field is optional; only the // sub-actions whose fields are supplied get applied. Target/Budget both need Period. public record ManageRegionRequest( string? Period, decimal? TargetValue, decimal? BudgetAmount, Guid? AgencyUserId, string? RuleConfig); public record ManageRegionResponse( Guid RegionId, RegionalTargetResponse? Target, RegionalBudgetResponse? Budget, RegionAgencyMapResponse? AgencyMap, RegionalTaxRuleResponse? TaxRule); public record RegionHierarchyRouteItem(Guid RouteId, string RouteName, List StoreIds); public record RegionHierarchyResponse(Guid RegionId, string RegionName, List Routes); public record RegionDashboardResponse( Guid RegionId, string Period, decimal? TargetValue, decimal? BudgetAmount, int OrderCount, decimal ActualSales, DateTime? LastOrderDate, string? TaxRuleConfig, List AgencyUserIds); // Flat, CRUD-list-friendly view over the four "manage" sub-resources (RegionalTarget, // RegionalBudget, RegionalTaxRule, RegionAgencyMap), so the frontend can render one table like // any other resource list (e.g. Rides) instead of one row per region with derived columns. public enum RegionManageEntryType { Target, Budget, TaxRule, AgencyMap } public record RegionManageEntryResponse( Guid Id, Guid RegionId, string RegionName, RegionManageEntryType EntryType, string? Period, decimal? Amount, string? RuleConfig, Guid? AgencyUserId, DateTime CreatedAt);