feat(api): .NET 10 multi-tenant REST API

Full backend implementation:
- Multi-tenant cafe/restaurant management (menus, orders, tables, staff)
- POS order flow with ZarinPal and Snappfood payment integration
- OTP authentication via Kavenegar SMS
- QR digital menu with public discover/finder endpoints
- Customer loyalty, coupons, CRM
- PostgreSQL via EF Core, Redis for caching/sessions
- Background jobs, webhook handlers
- Full migration history

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-05-27 21:33:48 +03:30
parent 03376b3ea1
commit ef15fd6247
472 changed files with 120358 additions and 0 deletions
@@ -0,0 +1,35 @@
namespace Meezi.API.Models.Reports;
public record TopProductSnapshotDto(string ProductId, string Name, int Quantity, decimal Revenue);
public record DailyReportSnapshotDto(
string Id,
string CafeId,
string BranchId,
string Date,
decimal TotalRevenue,
decimal CashRevenue,
decimal CardRevenue,
decimal CreditRevenue,
int TotalOrders,
decimal AvgOrderValue,
int TotalVoids,
decimal VoidAmount,
decimal TotalExpenses,
decimal NetIncome,
IReadOnlyList<TopProductSnapshotDto> TopProducts,
DateTime GeneratedAt);
public record DailyReportSummaryDto(
int Days,
decimal TotalRevenue,
decimal CashRevenue,
decimal CardRevenue,
decimal CreditRevenue,
int TotalOrders,
decimal AvgOrderValue,
int TotalVoids,
decimal VoidAmount,
decimal TotalExpenses,
decimal NetIncome,
IReadOnlyList<DailyReportSnapshotDto> ByBranch);
@@ -0,0 +1,26 @@
namespace Meezi.API.Models.Reports;
public record TopItemDto(string MenuItemId, string Name, int Quantity, decimal Revenue);
public record DailyReportDto(
string DateJalali,
int TotalOrders,
int NewCustomers,
int ReturningCustomers,
decimal Revenue,
decimal TaxTotal,
decimal DiscountTotal,
IReadOnlyList<TopItemDto> TopItems);
public record DailyBreakdownDto(string DateJalali, decimal Revenue, decimal Cost);
public record MonthlyReportDto(
string MonthJalali,
IReadOnlyList<DailyBreakdownDto> DailyBreakdown,
decimal TotalRevenue,
decimal TotalCosts,
decimal SalaryCosts,
decimal OtherCosts,
decimal NetProfit);
public record TrendDayDto(string DateJalali, decimal Revenue, decimal Cost);