From dfa646ff75068b8c1a322f6c4fdfe3e66c8d5c01 Mon Sep 17 00:00:00 2001 From: Nima Haji Date: Mon, 29 Jun 2026 15:52:58 +0330 Subject: [PATCH 1/2] ZarinPal Verification (Complete flow) --- .../Payment/DTOs/VerifyPaymentResult.cs | 25 ++++++++ .../DTOs/ZarinPal/CreateZarinPalPaymentDto.cs | 4 +- .../PaymentGatewayProviderContract.cs | 3 +- .../Interfaces/PaymentServiceContract.cs | 3 +- .../Payment/Services/PaymentService.cs | 45 +------------- Domain/Entities/Payment.cs | 3 +- .../Implement/SamanPaymentGatewayProvider.cs | 10 +++- .../ZarinPalPaymentGatewayProvider.cs | 59 +++++++++++++------ 8 files changed, 85 insertions(+), 67 deletions(-) create mode 100644 Application/Features/Payment/DTOs/VerifyPaymentResult.cs diff --git a/Application/Features/Payment/DTOs/VerifyPaymentResult.cs b/Application/Features/Payment/DTOs/VerifyPaymentResult.cs new file mode 100644 index 0000000..fd8cb43 --- /dev/null +++ b/Application/Features/Payment/DTOs/VerifyPaymentResult.cs @@ -0,0 +1,25 @@ +namespace Application.Features.Payment.DTOs; + +public class VerifyPaymentResult +{ + public bool IsSuccess { get; set; } + public string? RefNumber { get; set; } + public string Message { get; set; } + + public static VerifyPaymentResult Success(string message) + { + return new VerifyPaymentResult + { + IsSuccess = true, + Message = message + }; + } + public static VerifyPaymentResult Failed(string message) + { + return new VerifyPaymentResult + { + IsSuccess = false, + Message = message + }; + } +} \ No newline at end of file diff --git a/Application/Features/Payment/DTOs/ZarinPal/CreateZarinPalPaymentDto.cs b/Application/Features/Payment/DTOs/ZarinPal/CreateZarinPalPaymentDto.cs index 7fbbec7..1f6aad0 100644 --- a/Application/Features/Payment/DTOs/ZarinPal/CreateZarinPalPaymentDto.cs +++ b/Application/Features/Payment/DTOs/ZarinPal/CreateZarinPalPaymentDto.cs @@ -11,7 +11,7 @@ public class CreateZarinPalPaymentDto [JsonPropertyName("referrer_id")] public string? ReferrerId { get; set; } - [JsonPropertyName("matadata")] + [JsonPropertyName("metadata")] public ZarinPalMataData ZarinPalMataData { get; set; } } @@ -23,4 +23,6 @@ public class ZarinPalMataData public string? Email { get; set; } [JsonPropertyName("order_id")] public string? OrderId { get; set; } + + [JsonPropertyName("auto_verify")] public bool AutoVerify { get; set; } } \ No newline at end of file diff --git a/Application/Features/Payment/Interfaces/PaymentGatewayProviderContract.cs b/Application/Features/Payment/Interfaces/PaymentGatewayProviderContract.cs index 714dd7f..e033cca 100644 --- a/Application/Features/Payment/Interfaces/PaymentGatewayProviderContract.cs +++ b/Application/Features/Payment/Interfaces/PaymentGatewayProviderContract.cs @@ -10,5 +10,6 @@ public interface PaymentGatewayProviderContract Task RequestPaymentAsync(Domain.Entities.Payment payment, CreatePaymentDto dto); - Task HandleCallBackAsync(PaymentGateway gateway, SandBoxCallBackDto dto); + Task HandleCallBackAsync(SandBoxCallBackDto dto); + Task VerifyPaymentAsync(string authority); } \ No newline at end of file diff --git a/Application/Features/Payment/Interfaces/PaymentServiceContract.cs b/Application/Features/Payment/Interfaces/PaymentServiceContract.cs index 776b744..71de5aa 100644 --- a/Application/Features/Payment/Interfaces/PaymentServiceContract.cs +++ b/Application/Features/Payment/Interfaces/PaymentServiceContract.cs @@ -8,6 +8,5 @@ namespace Application.Features.Payment.Interfaces; public interface PaymentServiceContract { Task CreatePaymentAsync(CreatePaymentDto dto); - Task HandleCallBackAsync(PaymentGateway gateway,SandBoxCallBackDto dto); - Task VerifyTransaction(string RefNum); + Task HandleCallBackAsync(PaymentGateway gateway,SandBoxCallBackDto dto); } \ No newline at end of file diff --git a/Application/Features/Payment/Services/PaymentService.cs b/Application/Features/Payment/Services/PaymentService.cs index 258a0c2..2ef6cd9 100644 --- a/Application/Features/Payment/Services/PaymentService.cs +++ b/Application/Features/Payment/Services/PaymentService.cs @@ -24,28 +24,9 @@ public PaymentService(PaymentRepositoryContract paymentRepository, IConfiguratio _httpClient = httpClient; _gatewayResolver = gatewayResolver; } - - // public async Task CreatePaymentAsync(CreatePaymentDto dto) - // { - // var payment = new Domain.Entities.Payment(dto.TenantId, dto.AppointmentId, dto.Amount, dto.Gateway); - // - // var provider = _gatewayResolver.Resolve(dto.Gateway); - // - // var requestResult=await provider.RequestPaymentAsync(payment,dto); - // - // if (!requestResult.IsSuccess) - // { - // payment.MarkAsFailed(); - // await _paymentRepository.SaveAsync(); - // - // throw new InvalidOperationException(requestResult.ErrorMessage); - // } - // await _paymentRepository.CreatePaymentAsync(payment); - // await _paymentRepository.SaveAsync(); - // return requestResult.PaymentUrl; public async Task CreatePaymentAsync(CreatePaymentDto dto) { - var payment = new Domain.Entities.Payment(dto.TenantId, dto.AppointmentId, dto.Amount, dto.Gateway); + var payment = new Domain.Entities.Payment(dto.TenantId, dto.AppointmentId, dto.Amount,dto.Description, dto.Gateway); var provider = _gatewayResolver.Resolve(dto.Gateway); @@ -64,30 +45,10 @@ public PaymentService(PaymentRepositoryContract paymentRepository, IConfiguratio return requestResult.PaymentUrl; } - public async Task HandleCallBackAsync(PaymentGateway gateway, SandBoxCallBackDto dto) + public async Task HandleCallBackAsync(PaymentGateway gateway, SandBoxCallBackDto dto) { var provider = _gatewayResolver.Resolve(gateway); - var result= await provider.HandleCallBackAsync(gateway, dto); - + var result= await provider.HandleCallBackAsync(dto); return result; } - - public async Task VerifyTransaction(string RefNum) - { - var request = new - { - refNum = RefNum, - TerminalNumber = _configuration["Payment:TerminalId"] - }; - var verifyUrl = _configuration["Payment:VerifyTransactionUrl"]; - var response = await _httpClient.PostAsJsonAsync(verifyUrl, request); - - if (!response.IsSuccessStatusCode) - return false; - - var result = await response.Content.ReadAsStringAsync(); - Console.WriteLine(result); - return result is not null; - } - } \ No newline at end of file diff --git a/Domain/Entities/Payment.cs b/Domain/Entities/Payment.cs index b887ac5..5355da8 100644 --- a/Domain/Entities/Payment.cs +++ b/Domain/Entities/Payment.cs @@ -32,7 +32,7 @@ public class Payment public DateTime? PaidAt { get; set; } - public Payment(Guid tenantId, Guid appointmentId, long amount, PaymentGateway gateway) + public Payment(Guid tenantId, Guid appointmentId, long amount,string description, PaymentGateway gateway) { Id = Guid.NewGuid(); TenantId = tenantId; @@ -40,6 +40,7 @@ public Payment(Guid tenantId, Guid appointmentId, long amount, PaymentGateway ga Amount = amount; Gateway=gateway; PaymentStatus = PaymentStatus.pending; + Description=description; CreatedAt = DateTime.UtcNow; } diff --git a/Infrastructure/Services/Implement/SamanPaymentGatewayProvider.cs b/Infrastructure/Services/Implement/SamanPaymentGatewayProvider.cs index 491f565..de9bf7f 100644 --- a/Infrastructure/Services/Implement/SamanPaymentGatewayProvider.cs +++ b/Infrastructure/Services/Implement/SamanPaymentGatewayProvider.cs @@ -70,7 +70,7 @@ public async Task RequestPaymentAsync(Payment payme return PaymentGatewayRequestResult.Success(result.Token, paymentUrl); } - public async Task HandleCallBackAsync(PaymentGateway gateway, SandBoxCallBackDto dto) + public async Task HandleCallBackAsync(SandBoxCallBackDto dto) { var payment=await _paymentRepositoryContract.GetPaymentByAuthorityAsync(dto.Authority); var request = new @@ -85,9 +85,13 @@ public async Task RequestPaymentAsync(Payment payme var result=await response.Content.ReadFromJsonAsync(); if (!response.IsSuccessStatusCode) - return "پرداخت ناموفق"; + return VerifyPaymentResult.Failed("تراکنش ناموفق بود"); - return result.ResultDescription; + return VerifyPaymentResult.Success(result.ResultDescription); } + public Task VerifyPaymentAsync(string authority) + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/Infrastructure/Services/Implement/ZarinPalPaymentGatewayProvider.cs b/Infrastructure/Services/Implement/ZarinPalPaymentGatewayProvider.cs index 35ff3dc..b628f3a 100644 --- a/Infrastructure/Services/Implement/ZarinPalPaymentGatewayProvider.cs +++ b/Infrastructure/Services/Implement/ZarinPalPaymentGatewayProvider.cs @@ -15,7 +15,8 @@ public class ZarinPalPaymentGatewayProvider : PaymentGatewayProviderContract private readonly HttpClient _httpClient; private readonly PaymentRepositoryContract _repositoryContract; - public ZarinPalPaymentGatewayProvider(IConfiguration config, HttpClient httpClient, PaymentRepositoryContract repositoryContract) + public ZarinPalPaymentGatewayProvider(IConfiguration config, HttpClient httpClient, + PaymentRepositoryContract repositoryContract) { _config = config; _httpClient = httpClient; @@ -36,7 +37,8 @@ public async Task RequestPaymentAsync(Payment payme { Mobile = dto.Mobile, Email = dto.Email, - OrderId = payment.ResNum + OrderId = payment.ResNum, + AutoVerify = bool.Parse(_config["Payment:ZarinPal_AutoVerify"]) } }; var request = new @@ -72,28 +74,51 @@ public async Task RequestPaymentAsync(Payment payme return PaymentGatewayRequestResult.Success(result.Data.Authority, paymentUrl); } - public async Task HandleCallBackAsync(PaymentGateway gateway, SandBoxCallBackDto dto) + public async Task HandleCallBackAsync(SandBoxCallBackDto dto) { if (dto.Status != "OK") - { - return "پرداخت ناموفق"; - } - var payment=await _repositoryContract.GetPaymentByAuthorityAsync(dto.Authority); + return VerifyPaymentResult.Failed("پرداخت توسط کاربر لغو شد."); + + return await VerifyPaymentAsync(dto.Authority); + } + + + public async Task VerifyPaymentAsync(string authority) + { + var payment = await _repositoryContract.GetPaymentByAuthorityAsync(authority); + + if (payment is null) + return VerifyPaymentResult.Failed("تراکنش یافت نشد"); + var verifyRequest = new { merchant_id = _config["Payment:MerchantIdZarinPal"], amount = payment.Amount, - authority = dto.Authority + authority = payment.Authority }; - var verifyResponse = - await _httpClient.PostAsJsonAsync("https://sandbox.zarinpal.com/pg/v4/payment/verify.json", verifyRequest); - - var result = await verifyResponse.Content.ReadFromJsonAsync(); + + try + { + var response = await _httpClient.PostAsJsonAsync(_config["Payment:ZarinPalVerifyUrl"], verifyRequest); + var result = await response.Content.ReadFromJsonAsync(); - if (result.Data.Code != 100 && result.Data.Code != 101) - return "پرداخت ناموفق ."; - payment.Edit(dto.Status, result.Data.RefId, result.Data.CardPan, result.Data.Fee); - await _repositoryContract.SaveAsync(); - return "پرداخت با موفقیت انجام شد شماره پیگیری " + result.Data.RefId; + if (result.Data != null && (result.Data.Code == 100 || result.Data.Code == 101)) + { + payment.Edit("OK", result.Data.RefId, result.Data.CardPan, result.Data.Fee); + payment.MarkAsSuccess(); + await _repositoryContract.SaveAsync(); + return VerifyPaymentResult.Success($"نراکنش با شماره پیگیری {result.Data.RefId} انجام شد"); + } + + payment.Edit("FAILED", null, null, 0); + payment.MarkAsFailed(); + await _repositoryContract.SaveAsync(); + + return VerifyPaymentResult.Failed("تایید تراکنش توسط درگاه انجام نشد."); + } + catch (Exception e) + { + return VerifyPaymentResult.Failed("خطای غیر منتظره در ارتباط با درگاه ."); + } } } \ No newline at end of file From 987ed0dd6c7daa2287a5fd1e2309a2910ba2a69a Mon Sep 17 00:00:00 2001 From: Nima Haji Date: Sat, 4 Jul 2026 12:02:14 +0330 Subject: [PATCH 2/2] verify zarin pal --- .gitignore | 93 +- .../.idea.Reservation_System/.idea/.gitignore | 15 - .idea/.idea.Reservation_System/.idea/.name | 1 - .../.idea/indexLayout.xml | 8 - .idea/.idea.Reservation_System/.idea/vcs.xml | 6 - .idea/config/applicationhost.config | 987 ------------------ .../reservation_system.metadata.v9.bin | Bin 2313 -> 0 bytes .../reservation_system.projects.v9.bin | Bin 218973 -> 0 bytes .../reservation_system.strings.v9.bin | Bin 169085 -> 0 bytes .../DesignTimeBuild/.dtbcache.v2 | Bin 224778 -> 0 bytes ...ae539560-ce46-4966-9da4-453ff7ce7541.vsidx | Bin 75119 -> 0 bytes .vs/Reservation_System/v17/.futdcache.v2 | Bin 468 -> 0 bytes .vs/Reservation_System/v17/.suo | Bin 34816 -> 0 bytes .../v17/DocumentLayout.backup.json | 173 --- .../v17/DocumentLayout.json | 173 --- .../DTOs/ZarinPal/CreateZarinPalPaymentDto.cs | 4 +- .../DTOs/ZarinPal/ZarinPalVerifyResponse.cs | 1 + .../PaymentGatewayProviderContract.cs | 2 +- Domain/Entities/Payment.cs | 4 + .../Implement/SamanPaymentGatewayProvider.cs | 7 +- .../ZarinPalPaymentGatewayProvider.cs | 74 +- README.md | 405 ++++--- Reservation_System.sln.DotSettings.user | 5 - api/api.csproj.user | 6 - api/appsettings.example.json | 34 + appsettings.Development.json | 8 - appsettings.json | 9 - 27 files changed, 462 insertions(+), 1553 deletions(-) delete mode 100644 .idea/.idea.Reservation_System/.idea/.gitignore delete mode 100644 .idea/.idea.Reservation_System/.idea/.name delete mode 100644 .idea/.idea.Reservation_System/.idea/indexLayout.xml delete mode 100644 .idea/.idea.Reservation_System/.idea/vcs.xml delete mode 100644 .idea/config/applicationhost.config delete mode 100644 .vs/ProjectEvaluation/reservation_system.metadata.v9.bin delete mode 100644 .vs/ProjectEvaluation/reservation_system.projects.v9.bin delete mode 100644 .vs/ProjectEvaluation/reservation_system.strings.v9.bin delete mode 100644 .vs/Reservation_System/DesignTimeBuild/.dtbcache.v2 delete mode 100644 .vs/Reservation_System/FileContentIndex/ae539560-ce46-4966-9da4-453ff7ce7541.vsidx delete mode 100644 .vs/Reservation_System/v17/.futdcache.v2 delete mode 100644 .vs/Reservation_System/v17/.suo delete mode 100644 .vs/Reservation_System/v17/DocumentLayout.backup.json delete mode 100644 .vs/Reservation_System/v17/DocumentLayout.json delete mode 100644 Reservation_System.sln.DotSettings.user delete mode 100644 api/api.csproj.user create mode 100644 api/appsettings.example.json delete mode 100644 appsettings.Development.json delete mode 100644 appsettings.json diff --git a/.gitignore b/.gitignore index 29eb907..f67dd76 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,88 @@ -bin/ -obj/ -/packages/ +# Build results +[Bb]in/ +[Oo]bj/ +[Dd]ebug/ +[Rr]elease/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ + +# .NET / NuGet +*.nupkg +*.snupkg +*.nuspec +packages/ +project.lock.json +project.assets.json +artifacts/ +TestResults/ +coverage/ +coverage.* +*.coverage +*.coveragexml + +# User-specific files +*.user +*.rsuser +*.suo +*.userosscache +*.sln.docstates +*.DotSettings.user +*.csproj.user + +# Visual Studio +.vs/ +*.vssscc +*.vspscc +_ReSharper*/ +_ReSharper.Caches/ +*.resharper + +# Rider / JetBrains +.idea/ +*.sln.iml +*.iml riderModule.iml -/_ReSharper.Caches/ -appsettings.Development.json -appsettings.json \ No newline at end of file + +# VS Code +.vscode/* +!.vscode/extensions.json +!.vscode/settings.example.json +!.vscode/launch.example.json +!.vscode/tasks.example.json + +# OS files +.DS_Store +Thumbs.db +ehthumbs.db +Desktop.ini + +# Logs +*.log +logs/ +Log/ + +# Environment and secrets +.env +.env.* +!.env.example +secrets.json +appsettings.json +appsettings.*.json +!appsettings.example.json +!appsettings.*.example.json + +# Local databases +*.db +*.sqlite +*.sqlite3 +*.mdf +*.ldf + +# Docker local overrides +docker-compose.override.yml + +# Publish output +publish/ +wwwroot/dist/ diff --git a/.idea/.idea.Reservation_System/.idea/.gitignore b/.idea/.idea.Reservation_System/.idea/.gitignore deleted file mode 100644 index a33dc03..0000000 --- a/.idea/.idea.Reservation_System/.idea/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Rider ignored files -/projectSettingsUpdater.xml -/modules.xml -/.idea.Reservation_System.iml -/contentModel.xml -# Ignored default folder with query files -/queries/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/.idea.Reservation_System/.idea/.name b/.idea/.idea.Reservation_System/.idea/.name deleted file mode 100644 index 4317306..0000000 --- a/.idea/.idea.Reservation_System/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Reservation_System \ No newline at end of file diff --git a/.idea/.idea.Reservation_System/.idea/indexLayout.xml b/.idea/.idea.Reservation_System/.idea/indexLayout.xml deleted file mode 100644 index 7b08163..0000000 --- a/.idea/.idea.Reservation_System/.idea/indexLayout.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/.idea.Reservation_System/.idea/vcs.xml b/.idea/.idea.Reservation_System/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/.idea.Reservation_System/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/config/applicationhost.config b/.idea/config/applicationhost.config deleted file mode 100644 index 92370fd..0000000 --- a/.idea/config/applicationhost.config +++ /dev/null @@ -1,987 +0,0 @@ - - - - - - -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
- -
-
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
- -
-
- -
-
-
- - -
-
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.vs/ProjectEvaluation/reservation_system.metadata.v9.bin b/.vs/ProjectEvaluation/reservation_system.metadata.v9.bin deleted file mode 100644 index 3d5ab4610767865b3b2670af7835f8bf66c06d11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2313 zcmb_eYfMx}6rSa*?C#wiprBB6K}2nN2*`7_tPh?xZ3*w?RcgW3AX$xlgchS{2`Dwy z5}*j;11#7^v}qfui9h^de-tfPEl90UY#UocH8eugV(zFt_s)fTH6dx!Zt`W$%$#%P zeBV7YSsft^DA8v-#x{%^w=+G3unRupd8MO9Hits|;oWy7TP%a#+DwPV`h!t)0I6@J z^R5pY#Wx|RCdx*o)wdxeMsc8!Q5ToyCasnLDc)2@Cq|6o%Rsz`>!)Hc*>Pw+Sy5%p z!qprg8%iy5vU+IlUGasKj5P@0UGZAHocIv142YG@T=nD{c;1%H>#2f0V{k_M+;eGWk4#FK)+&JCMa8)hVskRP z<+y|3n?g9}EFhDS)yb0DyI^Og!r7^Qj`v`dW0NeKSO-1!=LTCApzwQP$$*8kYleVm zUYl4rbF!EReVHnp;?P&%g2{}|%D z6@AvLN9=|!k3uf?7N~8qa;dgKx}Y?Q2mJM!QrY|PbG!2K+XOh>!`ZV4Be)NFf0`?` zW2lj^a6}lQT!6Rw6`y=nL*`21%asPX8JK|*W<;0}0)?N}#mYU&%s6-G2(#drBmk+o z78AYbx{*-|~=-*rJ8!5!o8=}8_$9$H0s0nRR~7E zX=y?zd>{A8sLUr6W0oPpH2dK=kHCkB^;&eIZttWEk$$d-Q%kL}xAAd;Z%fMG=_?sE zx`<4?&p^lYIz78+fr$EXc^yM%eAopGRQ+Oi7D%0Q*#brOSO5GClX$Y_cu=!}ut*%E z5YdPjL@eT#g|NGbgSa1ua~q-+?G-q#L_C9tN3}& zCz_!(eeFFd1xwOF#shB8pJ96#Ssa;#^)X!6GVa9rQG~?&LxjZs5RQ@p?Kny*oYxc9 zf%bn;gY}zG4x1;47|nTjR= diff --git a/.vs/ProjectEvaluation/reservation_system.projects.v9.bin b/.vs/ProjectEvaluation/reservation_system.projects.v9.bin deleted file mode 100644 index b1e77a3cf37a373f8614842970a587338db27776..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218973 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 diff --git a/.vs/ProjectEvaluation/reservation_system.strings.v9.bin b/.vs/ProjectEvaluation/reservation_system.strings.v9.bin deleted file mode 100644 index 6a0aead9855f2b4e831f4fde9090eac2776151ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169085 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 Nhy4(ksNxfT zLmD9OAWf0xNGqfb@-EU5c@OD|bVIr$J&@kWhsXeA5HbWAhJ1{SLdGEzkwwUt$XCd6 zWEHXo`5IY=e1m+8Y(>69wj;Zc-N;^KKk_|t7&(fZKu#e)BflWOBEKOQkW0w#h>!e* zTtjXn8E|((5|WCfBOVe(?n3TH?n53#vLKHlk0FmEParvw+{ly2Q^?cEv&eJE3rJz4 zC{hf01u21)LS92&N6H};kxIy$NLA!5q&iXqsfpA=>LCr0M#wuzGo%I53TcD1L)s%9 zk@t`;$ooil4ywJ z1|c6I!;lfk$H+)zG%_BUh)hO4MP?&&ka@@wWGS)&S&6Jc)*~B{Z;`FYc4Q~A8`*~( zK)y!~AxDto$Vuch@-uQ4IftA_E+UtaE6AV7-^exOCUOh8gCyflg>=M0qDV&MF6160 z6Y?PPF!BiUDDpUx9eD!DiR3|^L<%4;AVrWDkzz=3qzqCPc^!EJsf1KP-a@J)^^t~1 zW26bv6lsREL|P+lk#~`fNN1!g(i`cA3_*q?A0s1?(a0ENEb<9537LXSMW!P&ky*%W zWFE2*S&V#zEJIcxtB}>mTI6eFJ@O5*5!r-%i)===BHNJfkR8ZwWFPW9@?$zrSRG5R zh)|ITKfV;9Vi9^JLa#=sByJwSQ?Es+Y=p{1=nZV^k5s~UpbcDTWBd`nVN-;@jnL)@ zZNYEAJHCt1jtK3H|AxKsJ1_R*aU6bId}8aM84j7@uo;d*jHhFf_-$+c1MzQbK4$BG z!XbZ-&@cbjJI>=B7b0}Yyn}u>H#zWcxq|mlg#HZQ^Vk30a~1Eo9-*7zd;a;~d;Z0H zZbvAC!=J@Z5!{Lweh!$AJ0Jd%A`ZC@e`fd)e6wEoG10EZe;s}#{QBScufyZx*LUN% z|Gu8&=frwdCLDqua4@4q554UIyey`GgDJH{^KxiPiYek?zAe#|3{6=v#T-n= zC7QCKsUW7LgPFQS6aTk?KVKy=uREB=OEi_j<5Uq-!ND9~qNx&^YGU4UFaelos)gol zF*O~`4kntnLsLUcJqJ^ViKa$qYKnQs!MtLksTrC&VwyRabWAjLLQ_{v8wWFziKcF7 z>Wg{T!E|M!sUMn#V!Aq*%S<#4L(^DHPseYpOykfr5!2tnENJ3!nuMmQm=O-9NE1!d z&@>k_*1`N~qG=wQmSQG5m|RUXEkn~v%nS!JuZgBrXxfOG?O<9q(XE>n&D#3IG9OKG{Zylv6yoX zrr8tC$DtV|<~Ij(@QG$rXvT>7-SNjLGbS|S#9)DCoHFA=GhR&K_~VrsADW3`t~!|a zPyBo)hGvqOn+_HQ63wL0OcC?1gB62BGbJ?B#3Z{|PDnJ|L^C}!GsQTr zKU0~Rq4``))Ws@A;&DC?&1^AuxmdzTG_yl9SIoUG);AK(+|Ya>CbNshk3{oDXy%D| z*u~07qL~+(`C=Y%v22oP=7(m1n8#hLsU(^Op;;*A2^R}4iDqGF7KzE_Vl^hwEDFtH zF?n4q)z}k`#r$qO5r6Z)6!eUXg`C6#eHof1VxDuc%9Ci8gyt(T&%0OxN;F@EW~rDW zF4l(<&C<{;6Z4YmFH>e&XqJn4#l^}};&GOTW`&p%E|#4V&5F>h6jR#8npC1$8JbmM z%DPyvN;IoNvs%m>E>^P=&Favs5mV8{Qdgo`6PmSR-gL1JmT1<7W}TR~Tr83$nsuSs zAm(isD`<&kLukGcQ_IEjTB7+TG@HcKb^T4sYzoa5F%4ZT%q1RYOK7%=Y2sqlF41fa z%{DR3T`cJ(nr)%^PE0Eo>wSslyU^?q)7HgeV4~R(nq6Yvb+J;IXm*8Wx0v@_EF&hG z-J#hdrmKrJ#zeCxG<(JLaIpZHX!eF?pO_C^tWGAHeWBSerl*Ug%S5w3GzY}=cCoH$ z|HB{PcjJlpn}1NyAeTOJ)sYT{=m$YVU95@PBmKbd#uM>3|FEDDE>=t}IvhvwN8qD^ zM!Q%~wdiOZ#UFu=2^#NWwbi0yaTI?9Iw5GHi?vvbPQ+3C5$KelDK1uO6aSh{v4lA- zW}1s-+(dIaG-t%jbg{;pXwHP@oS4sDEC45(bD{ZF%v=|%!-?kC(EKK5zU%*{%x|H& zBxaF|b>+n4Tnf$aV!m>*=$vSN56u-Z%U!HUCz>mvAu+35ELSHQ3eBHl*0@;9PBedp z<}WepTr6}an!iGGRm?XoR>2d^)zDlQv){!Md7`-q+Xl{n)mY5%1EUqV- zTcNov=9tSX?>YW^{e9aQti%gCi9Ll$iHe_yzhRwT*l9PuX#d}X@e_unT6WfrFX<<+ zRAFhB{fc|b^asTg=4cViF5uoW&G3X_o@JMDZ<%Iz!my}if4K3j1Udfm_rXsXmeI05 zaSNJ08lEuhZp;35^{r>apPMU5*YS0n4@K~?6w=< z;E=$u@mwSV)vx}pm@T3&}^37 zz4&&IgrnsWmdCP3uoqJw4NsV(J!RSBUVN)a!qKpI#IUC=d%}xvBuQXT3wy@0T-dUy zKPa9sM|;k)C$VKyGdy8f0n48D;#*V_K4<}9&s+Aa7vI2=z@8UY*s|xn`1Y0rR#;dO z%L;q(%`Xp`|A5@_77i#cTKJ+D-y9!3V4xZBJ1SY&#G|Iz1)A`IE6MSySk}^`)|yojR@Jih9=)qsRbkaE z>)=sG&8i8jZdoUf-qQ>_pv<4Ore&Qy>Y`aqVYMvl>cuxp$zMsWxZtPE@#};v2c- z!@gratQqj}n_4*Dqfhkln#%E-SvJ9=iJCPN*2c0)9!=J)jj(o>P4Q@|X6=Nvx9n4o zrfG&9XXbCNqh-@QnxR=oVeeTs)1%Kcdrw#w%Vv4>xn^C2b+v4^M{_jmDy+L@b3OV( zGwg#ie}o>E>r!W<7-Uv}}P#3pML0thZ&0JX)+-Z()5c`_iK&n)Ma-p=Dorv{bVX zg$=N5nMcbt8z5}3Wh*>dso7v*Lo8e6(Q3`G@6Y_b4YO>GM{6}3CTxUdUwgDpvk}5Z zTDIPcZy?O^-><{iQD{EsXv;Qu^o>5+XklY5+vw3I&Bh8FZ`rpVZPskOunCrJ@o1}N z6NF8)Y@0{lX*N;VWXraDv_rGW!lqib)1zIQO%*oHvfUo-(QKNq>6Y#FXrE@-Uuph& zXIi%3qXU{@_oZR8EIa7Y_nOTTHruivJUXP=Y+-XPJM7Vqn#~pVg=I%PI;t6VeVWg0 zfn~=$IFTRa8$A7;jZ4kD}vg;n*&_~0rU-Ln~wd|%x|7iBDuq~F|^5|d9wg}s5*=>*R zXtq_@cFQtEDJiN>AFSajkB5EEhV8e^jgqI?eqrBR7L8I&v+so+vMghi?$Yd#u)~(!9i@9TJ1p#o zW%owuKFy8@J7(GaQOcy*F<~bxdmu`gH9H~flw}V_=^@Qd3H!;ihoh85Gwk{{f4yfc z%NnIeG&>{gtYwcz=`qdD3Oi@n<59|{**Rh7Ez2IICp0@R?4o5kqLfp!i^48jmMcoR zHN#GI^C!JxS)M38so51_zGY8EDX(U}FtY6FDCN_Pgawv86QyT03xxe`S^g+Jr`g}a zu31(fN(D8$ChUe~&qwJ6&9L|0{Ds`ItWcB+Yj#W6ZOe*8si2ZUicEPFFbRW!r>5r*ZmtZJ0r(hPS`81|%P)uL2gGu&HYSU$_% zj#3THaOZ_#&stV9O0_h5R#*YcYDcM#X1Hs^9PI_m>PD%aX1J%rup*Y#k5U88aL0#X z#Vl(WrAC_Jeh|Z6v8-{F-q8$qix^hIvL;b#su}JjF|4#@&7#y?Gu&xnSQ*P&M5(1_ zxDUm!H!N!vrPi9^E)~NnSk@*=Z8gI^EQVFKtX-7aYgSoURml2ON-XkYdxYY-5{FH$$E$kbme)@R0AIPva zmVFqF-yD?VzbCc0Tgb5Xmi3R)0DZLf!a7uTAM zC=JyNcPSax-Lhd(8m<}cVKS_zWh0{Wv1Yi#$*|s*jf~PL&2aydVINvHI!a?S!`)Ga z4YX`*l*VZ`P}oP7jgQhNn&HkWbF`tBO^DJ&&2Zn9VINyIDN2(y`&ig0%cewWs%E%n z%N%X2WuHcAnr678%dm--O^?zH&2Yb$VN)!d8I9lkmGJKkcY_%=-LlW3G)o^1_lglvZelJLe4BWZB9n ztDcKf$%{5@gN?j(D%_Y z^h1;mVK^M6A2A$>(oqb@qI4X?i71`Ka4JeaVK^P7pD~aoR*k6rdVK3|@VpLLoZz+5Z z(qD^F8R=zX^t$wNF?vIKd3-+7E5@jj^vW@MQ+kycW|_l}RW*jmv#`GvqiSNR$8a7P zKL2)%YRL07@n?}<8-Et*bz@Xddi@wRklrvxjifimpHX^~7&VpNEJn?xw}??o>8)ba zT6&upwUyp3M(w4)8>0@=JI1J!^!H-aS$dZkb(Q{pjJiqh9-|)8KZsFJ>AhmqTY8@u z^_AW)MjuM=AEN=%2gYcS^uaOuNcxZ%4V6ADM#H6#h|$N=N5*KB^wBXIBYkX)#z`L^ zqfewyh|xsplVUVk`ji+=mHugrrb(Y3qZ!g?#^^KYvtsnQ^w}|*BYkd+zK}jIM)RdF zh|xmni}3G9`j;_UBK@lvEtS43M$4tIh|x;vt75cT`kEN6mHu^%)=6KFuWQo3iP1*s zn_~2>^vyBaB7JL&wn_gkM%$(Dh|x~zyJECk`kol=mA)@V`=uX<(Lw3o$LI&?hhlVC z`j0U>BK>HLj>YiOvwi!P3xAT;$n5w@RvG&HNq(}Q;-~s)e){#y{$2d@sqW>6`}pC0 z{1`6(q1OUGkN+h9`YC>RnjfCQ!TkK(p2xRKzfc*!h+njf|Dyj=8NZnSN*TYn|7sb( zgkP$RU)q1Ij9wY`@uJ-=BrgZe*<4>zIzBkSC z-!B*V-Lbj#1HWhB_cq_{`O$yhbiZ#1KJ*79g1#Xb6oQZZp^0En2u6fpq(3?lj0nNl z5PafKNCaa;FgXNM{ZA9Y;IAneh$I;5M1ytCW7-JxEz8%d_NIf z4nYutzx`{8z`Q^3Z-n3<|KCJ#BRs+#11KqpQj!wM9YZJ`6TN_$_RQriQZ7CjG&5wDkssK3RM*J zmY}zjsD?ss392oqZW7f~sJ5Vnf*L1L6NMTIYA&cn617yQxu8~pS|?Fkg<1)ES5Su} z>ZH)Sf;tO&KZ&|2)LGC6f_f!UAB8>;)K3t8hRQ&N`Ux5&=%XYWs?Z=o!v%euM57cM zE@+IPaY^)vLSqC?5;P@=K2>Ovpc#TbOQO#enjvV8pm|9&U!ggI776+?iPk8zNYFY# z-z3pSh1Ln$ENEL2eW%c7K|2NQPNKaE?G$uC(7`17L7@YJeiU>xiHohEa?4Y>Y-3)L45@EOQ!w`^$|2!(6D40q0nGKV+4JYOcN9uBWSXq zX~{HGp~-?~37VTsUnn$7&_Y39Cev36Eflmu(CTFRTA>w!z7h0oGHp@l8$sIz?M|kB z3T+p3P|)FII-<})K_>+LluSP>bVATMLBA!_MTO1@`dyHpOn)l$yP#`=t|!w?g{}#@ zEhr_0(oz!to8J}`#ShMpe=WExh3-};DnB+qlc0xFD62x51Z5MHBZYD+lub}xLC>bp za|-1ZR7lWEDfEg$g#?up^jZp)Rj8z(@`5U*(3=XC7gSwPjTEY-P<27|1vN~e#tPLJ z)Iw0(6l$kX3qhR(bxEQ373w6Yr=UJ5)K8(Ff(8p3o=!`|GP*kxv7c& zIa5-@E1-;m?oFlp70M_mv!I7l=@Er83(77iM=Iq~D7&D1f(oS4^9tn?^rE1bQ|VQO zUKCVD&>N{#L7_5&stBrX}Bp73wCazo4OMG+d$nf<_4%mqrs58YO6|pc!fOnL<+q%@wpDjTR|1SI{y+ ztI}w#LdyhwBWOz+eW%bjg7ykJoJL0#+AHWML1)tF7lnQjbU~1xMu9>X1laALRkgn67*C$J*`kKLHPwe zpH77p$}i|;L9eD$Nrhe(^qQb@=~P~!*95&Os75-~Qs_-V^#nCar*{;pC#Z#>HtEz( zp%#KV3F@9sA1KsGP+vj)(`leWeFY5_G$NfwDKu2jctI1>X|h7&1x*t)C!M}fXquoU zf|jS#N`;mPS|ey(I&DyBji4>~;fbSYJ03^V&h(P_VZ!OOCmlbAJKe8E2jf3k@dx~j z#UsdZ{EDaEOY;2+0uJn(s3uTymr2rs zbx&is;0m55bHPnr6fvuF1T8w z>RfO|M)kSis*751!Ic$t;)1Iu>d6IHNHmxWu7YSR7hLJkr(AF~L!WcO6$>rkf~yi* z#sya%w1Eq*E@&qgTtU!5F1Sjd<6LkhK!0$-**@Lif-`zbNkzd~J7wg8Gjqz!1!v!s zoeR#eDIXV{MbnF1aHdRUxZrGFV*IPvs!Ax1!t}_mlZ-;L>RF8Gd1S-If5D&^vW@0^sM3%)zj z%UtjskY3}0?{f4e7knq9dR*|`idt~NcO>e>1>be3FBg1gp`l#x-Gjz+!FLFn#s%L6 zXbBg5rKdGq@YS61;z!Sprl;|fZEN{$G5YQCK!qdpVuW6fQ1J+rz)y$8Q>7wQIznY4 z^m>FU@K3b$+g1*+>Q&MF2-`|#sBDHe<44_@UW%$js49MOYd5_WDM8hc>d4zj4WuSg z3#pCNLFyv)korgiq#@D>X^gysG(nmo&5-6u3#28|3TchBLE0kikoL&CNC%`N(g}GF z>5Ozix+3o*-H`4`599-+C(;Y)jr2kKBK?pLk^aa4WFRsK8H{{{3_*q>!;s;~2;^gA zBr*yajf_FYBIA(p$S24IWFj&NnSy+Z%tSs%<|1Dp^N|I}Vq^)j6j_F>Kvp8FkhREG zWIM78*@Nsu4j?}uKO#qv6Ua&AG;#(xhy03ML@pyf5+K)*8^|r>4wCHP=YS(=NIK#n zQ6z@kh1`SOhun`mh&+sBK^{dOLmo$-Kyo6vkSCF+kf)Jnko?GV$n(exNMWQX@*?sw zQXF{|DUG~_ltbP?Dk7DUDo8ctZKM`b7padlLK-7Ykmg7$q&3nOX@_(`Iw75r_mS?% z2S_iZFVYYB5E+OJMm|D@Aj6T5kx|GPWE}DdG7*`COhG8_EtYJ5Y9U*@d!~%U+cIT=t`U&*giRLtGA_ z9OZHpv3`F^e z%SR|fxeP@a!3D4JPNTVuMj69p49a*e<54DXnSe5x%Vd-(T&AE*OVk{xIFc1uq;-nYiGkf$0G*51>561uySQS-Ic^d?_0jyhJbM;er?8rMz77 zqCCR|FQiNPx!|R8sUVkvD22EbLMg%pFKA0IaluR0QgJTDQA%4egm3tpC#x^n4?(v1sVT9kTl!Hb7dPcC?QQ0l`4F91sYxb#CA zzy&YjNgt(-Ng7K(#rS9Y|L>-+efTbg^I&{~_&KIuq9FdR z|MzPY#NQRZNWlsm_SSE-7B4}v4*3Szh(PL$V<`kX%R}gqdic~{t zB6X0uNPVOc(iCZdv_je-?UDD8F39^x52P>hAuAY+kFkV(iiWI8evnT33g ze1XhI79xw0FOjd1<;ZH}Yh)d=0ojCXMz$flkUhwL0#q&N!LjFXqA=i-`$W7!QB4{{61jLU(4F+POx zVO-fwqAZcJczwADpLb^Enl)atam|Kn$Lw6PqddXo36vaMa-ihok`pBtms}{hx#UL4 zgF}y^C*#+Vw_}y~;P)oe?HJvO@#8aixsr@DJwiztDLEr%WMVWcLbD?@CqjiHG>~L#BJp!-fjGZrXaAZQ zn4`_Gtbs!fHN$0#VY4l3;ZRG>a8YB}e9PK9)KN2B@))+rviBV7q8ToT3|nGZH-~y? zhRY?xmRi=^p+1`7V#=`PmJM)dkY>2lGHjJ)Lme8X87{;OTVvTshem6L%QVB*SvKCG z37V}Fw!yNg4o%Yxmw4uA8!emZ&@9bx0chA(%jP&VS2J858n(@{1r9CJ3>S}v?Xc`i zhn8xFOH0FcS+>HVm73wg)3Cjkt#xRfX1FXhY`NAlx?z_rJLb@F&2R~C*cHo8I&?}iT;LlG^_(7*9?b1hN&ULidy!d zOAl#=i6g^`S(e46teRn3$*|&^R&jb@J4 z(y~G>71j)sY=*VAtf)&bYSvm9-jnxl=jte#8tHN#Y=VPh<7;8G*a zFcE6lc*`2Q^p0kjCN*q=WlddbrWqzt4V!FP3zu4IhACFVrdZb6r8b&j0@kppmbG)K zy=Iu6HEfz?9bD?D876NHn_*cempW@UL)d4Qb#du^%`ow6jyB7(ZZ37#4Aa7f&9BXg_>bez_62+Eq3Wk&9G!(*lEj_xU^KW)56YLw#=m!nqj%Y z9PONCD_vTx85Sc9J8#)qm%i2vOBIG)v~0ag8#KEp?6PGWUD~7>mO0GPu2}Z1OPe*r zB8XvR*%p_!YKA2e!vf2;x%8c8SU@rCs%6_<+MyYiR}8yu*-n>sX@4;`n5;DxO z?5In}HN%3DVfR>e%B7z)!*Y^gnJoL+r8AmgvB|IpEc?Z!bDCi(%CLtlJMYqOnqi^J zu&kC{bm@|2SjI9en`OVdbVV~Pav7G#GT$ZA3`<~!<+Utu=`YQ&KxWu8mR)t}nr2u& zGc3PlH(a`@85Y+JD`?p*m;TiZOK*l1vg{6CGYUV*IpI1B3v-4Qu`Jo66wR<~XV^=Y zrFxXE85Z>nD{h(Nk*gV&{0u8;S=6JLW>^q3th8l!d33jCSS~cItY!Clbf0EeOf;;# zWtlvBKr<{g8dlk|2l0YSnqeW*usW7y@hGciSf(_rfn|^4m6SBYBBo)DEz9OncFnNF zX;@Rsa^NMBG{XX@Va+Yejn_WX49la2wY2OhkMe4U#Z$vtTb2(mYNQ#KRt;-wS$@2z zk!DzUHSAr>3V2jdGc3y**1@tDJSwCa7HtjdWLXi9ifV=>UBfzC_7Yx#NHZ+>8rIda zSMa(*nqfKEux^&UidPlV42#8v^{}iIUQ*A%gTB5hGtlX zHmsjz6+Eh_85XGx8(>)_k1A`1C2Yg0c=#zWSSxy+s(QR?g!Q77jPi@rj8p^fA4N6e zkG0~qwujY2q#k}X4!<+LtuZZQd`LG##0-rgM$485dOUSAs-_Bkpaj+WDqhK z`3M<;3`K?^!;ullNMsZ;8X1F(MaCiHkx!5b$V6lkG8vhIOhrCLrXkaj8OTiJGh`O> zIWilWgUm&~K;|Lykp;*?WD&9$`4U-ze1$AUmLbcL7060t6|x#xgXGPK{Q?N@Pgsv^ vKxCgnK0Ggb6}I5{oe1w!*p2K#WWT~QaL*$7k>`-#@V){VFQ%60+xPzf(@)^{ diff --git a/.vs/Reservation_System/FileContentIndex/ae539560-ce46-4966-9da4-453ff7ce7541.vsidx b/.vs/Reservation_System/FileContentIndex/ae539560-ce46-4966-9da4-453ff7ce7541.vsidx deleted file mode 100644 index 8b25003e77e9b87341bda40a183105f58265ccfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75119 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�tdSnVx{ucl3NIwm+ckZN4Vt0z5dw+-$v0XmmKb@gpIzuKCuH54D%%&X zjwKD#Wk-_3ZplPr`nMvu4)+M66h4GBo-Dm%tSVOvAu@cgS%@h#MDP7y(obJT4lBM*-h|C zuh)?-RHhc4 zX|JMhmSnY+(74mM%DQgs0Ei0R2{!IFdWQJ76ujpXyt6V32V>5<%G@;{ONgv1Y?v!@>0*FzbJZmsoeK^_*|RMV>@bp ziKTQGVw9F1LMd`PRtTb4mO_jQhh8j;6R4!dYx&Xc{FcV9{-8q~2KqB3ChE)pzY%|$}U zUlgc@Pl^I|d}9M-im^K$x+Mq@kuuv|LQqE*5bNE7rLMhW@RdwMSg4Y9D0xvCqeAOP zvQ61pkr zm!&OpSQkn=Xk$$;vdaGh{_O6v#z~w~Z210WG}s+Yc1QC4Ws*kb!ef$F*qy%L5Z9-I z3}@Qn%pU8(sAnKEFl0F|$tGkKci|OfxnYgOo`zJ0+>UJ@qvcMgdB#`s!&*?@nFy|b zeYMtp@7niQr`qBvHp;iUzu=MEIAqy0{X&ghnsj;OF4Ws(-oXNy%#S-=yK`zq+8KvV z!P0;cK3}Jh*oOGjmE?AxOK$V=p3rqj3p*{21u?fW&U;hrx(z=k-Ze;Hr1@Ds_Y~@32^iVsX*aoqSgfK0<9(7Zm?X4Tv4Q>?^A!6S(u zYcRBa;xXQ+vA*oIEwYkXHfXkXGQKg_2DR9Qb8PGg>r2Ouw*7W-1;N}3_l8C1+vw0? zE378j8}TV5V`JuPLrrkQBVzeK^2|FWObUXOJ*Wk-y)!@6|&Axb5$ z9|D!j5_k=yn>#U_%-9u3;K`y`iw4=a@(xj~yYCRi`tyEvY>A!PF^Y9~we9UutXRf~ zVtu&Q9`-2KhjRkhBOb+ify-czG}$A$DAse)vh$)?AIXbiJ&Q=HoD49)LyWKkJOPvG z;b0K@C)vGsYAH>o+Dtd;mD3!dqSVGEoe`^`d#TDen1Z0nF|z-##h#gn8+WIsTB5tz ztBZMO-bm|<44e!v7_2I6*jRfU(-}sXe4)CN(=Y{@AYjk6aoCYs?1(wmj-!O#B1kV> zL2blOiXF)pEY_w1u3#G(IPnQc(H@gPfZ2AT0!t1IlcfZ?B4;bW zy#MMX?fUOz-cP&!G4EgN=6!6QoQafg-e<@#!C{RrchlcT=zQYbuxip{UJ87Gj%7NZ zmKR2z?MsR%@zgUeRW32Z*|*R=edxB(Irbv??0nK;JuAholG&6HkoZB^NM;tK2t?u} zA>iG^5R|h~DA+6s7@6eRadl=9-@fn9*)P4!Qgn!K3@jffk*s)v_B6?O?x8iY*$V&EG{XYV zX7J>>ato%~iNm zn=^#g6g>j}?5>UUThHE1*0My^*e>2m2or7;h9G5?&(nx$NxoP3SjQuw@CV($I`3Fw{8>0?1uKrUb#!zCC6?} zHe2Pk&h0H5U{i7b^9K7@!2k7h;Aby583zq=EUx>q!GmE?}lG z{$DO~tG6ZvLSc!6#ic?xYpD%P9hh(aP4rI@97R>&hbs8Sw2wKTVPo1Y1MP3S*<*uj zM!C%xY%_A31u!Qz;g%Y1b%-vz+l)~*jF$Q?mAVSMWlya^x43w=eb>MQ8{%YnOLrRw z*e{UVJHTqrb{;kk)VUaTG7?DI#)vrD4a?e>^@};qOz$*L-{MTn`jA0MW8tdkvu?z@ ztV<&vvP8}gA~Q99gdQGF-JUzit+OpFnZcPy|_bs%-;P4-uI40YOn*MmifY$>ZULgOOLslm=` zvhxTpZ?yA}rYdbAdK{Ks)IAtWrQ8;9m1R8yS;5w@Md11*nl1$%vyqctsb{k%M%80ns*uPfX1;yoI@LS0}pc8l2b9#2GXQluxshY97nwowIVs`unGVF%1`I) z^od#*54zi0{lr+Q_khG}F2U0B>~1Gj@n%G!ZSs{DuEmk20$<;8)@_6Idyy}yJ%fZ>NYgG)IC`& z7HD1^=96q1=oiTf!GuC2!;Xq`nS59X;6-WvGM7=5kmz=d?T2Nt-;fEOZkIan@@jI_*u!wlbxtk}MWC#g?S_d}0QY_(W|HJCVTi z_5^i(RM!q(^#a%+ZFDm)VUVoRmAcqQ9XLr0ZKZE(r8mml`nuhTkNMp^ zd@fa)le#ScTor_MqngKi3ARMEUuqq~!Eubn-7UTirm%D%rb`a$-s$OV%=G8OuF=sD2A%awpNPUV2k6Zw2gk)1zHA11_cJ7#+pfz zK@8?UOs*XbvuT3A-6qE&v>Hb$?o{Rxa#ZHz!o&5ZkF41-#J8{E5LD!Y<$}MkO*p-Zw?zi?DV@q7U)!zJE zCPi5F*@*2YUAH#b`F`%x`NOnx8L?A52QEj1JXRf++T8VP{Q4GJ#KPeVR_BNj*k*q4 zVe&8MLc%y_vNDsqI&N}jHzl?y976=b9-9Ib69;yG_b8U>!Lo#JWE4i)eT3lRP@~B? zyBy(v$u4(q_jb7ycFX3ePIft5Zy^9@=66i)N&3ac?xuC*UQFwU`S}UyXz`xp-n6$A z_iIwC*?oii)%S`nF0_5H@Vjz~ts|}49M95(T#bn!&kBL;#5#_$gLw+0eH+2O7-6uw zV1sp+0X8D+740~PyE~QyJ(oW0(Xv#Wvn*ZEWJDNZS>l+H;jmm3{#nIJg=elv3f0Wu94`&O`HyNMW0yl>7r z&0$t-EG@`4N>8`39zu*LasqtJZF-s)z8^|#%FiYZTUIiTG3hXa^vcMP857)+fGUBp z6pMGMn-MmqW4OB8KZvY_u!M%Ah;kv_)2R?9UhE$Twn^tY(==L#|9r!?}r2`+z^7R52&atk<0dXZVHjeZ# z#kRED0@jr66!R6F{_mTq6|Nw}0f0!wM7E^e~LE)tCAEZkW((WQdLh!$y?U|sW52pFcd)uA!())T|YTAxnd&U|qB@w%_>^dJSM4?W`%?^+H#+`V&X%G+)N%9$hD zn7POX!!;=E$~il?D+ig4T{#3fBj@a7+fLR+|Gw3Pr5q2h`x#jlv8&)&X!D88CX04< zSTvY6Ry5mZnEuXzAKR71CI65I41;t&94|jklGS{gpFEH@{}R~Q+iX3|Zz1*X(pFPy z@62bL#Ug`(v`e~6%Z!INqo0Q4oHn`FxOT(A2!!f!0=66H4@d@$jA!PT;>@}8mINH2 zc?OLRyAm)CXd(#8be;lc{Y*lBt?yKBok`k;%@!JST6W~-lQrvLytA@P$!N#-!^ ztsMRUAL}R)VHr;1P>1uZx)WTfZO*7j^=?5f&30gAOHA5T%F>3pCg0rAvE0s*7!EbF z`8lSCA#pw@y|d+q!`@+fZiLZMu5dp;=AF~e&frYf?1(uSpocxQ_F&;p7NjhI6N$7q z-0tvsv;b&^b4#=+L!tzeFvT*z1Cj$`j1yAdoO3Of;2p@R^IGqoHJ$I2t@Rj7aq{9& z%UkY=BG7X0{<1P^f;f>_dd5;nI?L^gt>$f)`dHI*YKzz)o#~s`V1`}nQgogZ8x>3J zuio=*yGUB}@SE$#9?r<3uZSkh#}!4O)yEb)5mGo>H*GR|6Xf<_gK)s=k3INBNq$$ z27z$CiE@j7bz+Nu{(wzz2M`xp>IzPNh4B~?&kO-42?6l{fguxdksRRphz-aL-h2Nq zkDJ5Tf=jfM2`IDw>@*&X37a#0cfAYVHOd>w$G^(-tnY1!?Xd)VXNGs!V`iW4tNz>% ztL9Xz#&FFitN3sgu}qn=Ot2G6q<^A|kf(Xg`m)u$Mw^%WgivelN-Io;2Ev)01@Si> zM2uac)$P?w@*7UPNAmx&TQkMFr){m}Ck67(^Sc5Y`tsKk9kXLs1QQ zk{^gC1sC}V*q3qqb-i8IpiqrRn{9EUJ(?NN-gYU@BJ*!3FWJXjySYWap%AGy{$Bs_IZW%}1(}?k-ZE-I8dj5Eg6vu#LuxigD z1op^nxEQUIHrqJi2W2F!J4DM6@sc#$Y^{fETC~%-wNQ!xF>(lsHPv#*6YX|j_dB^b zEmk|Z*v7@SU*E~KA-D6F@9$KyuB8rlodN-1WUY;yY$NM!By`naBWEh^Yb2*MJJoSW z!bop|;`i8Qh>?&@smyC)S{OcQ6n{r$)w_D#2;*T5e6 z!702`2ErCy5s6MP?S>qMhm#JFN-b<-42rai!pDzR$(B z+}f_TxN`6#c5gPfB5oynPCrS8Z0bCZ<=Z!PB09#VPF9e7E|jq#;!jMRa42h>3kkj6 zndtf>nc#^i94EId#=Xwl$1rVSgkc1er5bDM096%p`a?Orqk3m&)?I?9m3(%pQRZd` zj9Nj7HS!E58_Q)`bSpMn!rE~&vr7JH^l?jztUuTH`@)3 zwm0AF;e%+H(RSTW)U!mQ=2&uy%F*YUxK0I?rlOv`@>f`dW4ADugK%rnw%s)dQeTgiysIW@zXjI8$?|+{< zpCe{8*TFdvDWD}SV--kit_u$=H1J-X0?{vb{sW<>L?%!N-`=||odSV@!nHYU6x%SqHQRwX zf84e_ZEkk9HkF$65ri4mETTTr5ktN>?yA<@>HK+gZJ09wrO8rS>zGpf4|7^#fj~8F) z!x4<(2pJOjmXNvZn-_Gf0+QWyjHkGYyC~EdzsI-q3c?R1~y`A4+ z=fjzkOVo+*e2AatOT|U;{I)x-wnD4^W#J%K&U5Q)7jgau2l1uQQ%JW$XI7*tb*o|^ za-=1aHHg`S09>U1V4Y@M^wmWU;&4G|sA*xUsO54kM9^OlBJ!NH2GU?f6)F!W&p!ZMbfgv01}$#RKbVwon$9~SC{ zj@E9%ZW)wT77LGcuf#4v1Q#ZVG_QRWcJ(|-C^pZV(B3gXOJCpcwsby71oyEY>;_@5 zZX%B@%1)1`(_r<=%GrB?yQm5{osuC-<|zzQZXSek6g`Uq#bkk0$S}#b2p(Pb z8=aQIwpl*Xi7{w=?CH)9jTvfJ6x%;X%1W$rV|KTqjz`D*XsnJsEUL6u#@mX#(_@C$ z+Vsgbe5&oo7TRgH&Cifw?*M*{zxy#VGi&s{+6UN0%Z}RFwqUOPu+jd`cG?kkH9Klc zWY}k00mMx3Fx&2S+_29%@H%*eLp-vxM>x%c<43YBOYBs_(LmGKF0qI7HBLu?GWmaX z+HgJEo=+R1kr^gPye}D`V?tSQ3)s-dZaxMP+0Xa!agb4o8)mhSuiD14yh1!XY~Sna z+xPl#>6@R-- z;us$?i7VgQnYpBUUhI5QxAt&I8g@ApTR0Vb0LGY(yGhf5p~1Z4oAP$z6iYUCR2bMY zf8E8fpa<@XQsxrKR=$AaUu2k6Y3Ed1i7#-Q(?`;sTsQNbbUzO3iW*yz6N)ywQ1qW{ zj$rM`JE=yz(I;l6cpjB8G=wFhs-|eJrF}^Sh;48-76nWh10yzr`Le0jFwtys6U`4Q2jn*Hj1C1uL#pQy&2$?7)xR*_B9uLDTzy|@JzoJOz zP|4Nqny*~CY(qc@DKun1m`?%H2+C#_yOs0iD7YmpWZm5@w28TxG#{Q~;f*(Ke$HA;%W#6HeWJB+E~S zV;$rhSP$?Cr-3@oZk~(8P1S1JcGb^))7zTuQ&4-OZNm)Wr{(NR&>-hHF>zP{nIle( zLkjJZY!yIpfce9#@iRi1y)v6HO$u#)4y-N`Ga(c$4jJ}-K*Jh`gbyk9R!1f)ZzI|Y zTW^-t*@9YI;9C3wJT>*UVv3FQ(+&yLC+ciPldbUBt*}06#vNSuEwb{ z?r4i{mpiJflP3=&(j%vLAb$?UYgQE62S*Luh=m^$2vI2-~hVp^toisWA^0}{EiW)9!PU^QbQP~Y|0}(p}%L! zJAs!@r8^O;;95B=I`aSFZhqurY6S$Y>XXxCyy@>2ymZSyZi zzi{PZr`!BFAt4moPQ_&f?fSt5IsbcQb_DTT2}{n`T+)VUv;Yj(NUB&Z(w6@oLT8l1YD>ieChDSbNd>iJ6qVs7OcnfB$ChC*3D)bxZU+Uy7XFKnM z+2%A>tgqBfwW4l0V=0?kA&+*((T8;nQaaR>m-4&FGc<-1$6>%tlS%6I0$fKzxh?3mD(n z@^1ml2|}1wgT2U?w%AnS`v}-%v561-v9FUW>Hla?>F57>)JM|qPy{*})tA=V(nuP|5(R|ao|8-}+3Ld1)+8{~KfV7x+7`kU{M^o}*)}-;>$)%^8oO)W{6g3x z3UA_#MEt@S;flTr@XdER4J8p5119csuxt}R>lVL0dm3i#-{5(7n|4*575kCMd>UXs zS8R)sG+ej+y*p@TV#m%b*qE>XpPP}H=9N~CZjSTRwHpnbAEZ{+-OfjZliZ&AZohjA zeWp`QpqxD4#}h0oxy=;%(mMO~SZ+KpsUI{+SPtwOrw)NJ*{ z3-M7KVuV~BI}SO)MdGf52|Ky|3uQNE2@Yv0(Kb#NOgele2k|WDXJLbh&T_|x*e8xr z(kI5~E4;}V-Z{tE=j?o6tsbbg2VA#(z;)XPI_kC$G}!~L+dkB24|rhny#F)LWAc5c zW5x$}Hv6QL#_vn#Ri=$;Sj^{1JQwF~d^NSjj-6xg z9UiCX$LTStZb?paDQWiR4k*ll?Ti6l*p6egGtZ6iTRx)R}!)L^?y%;C=qqlP{ z#c0#cL8*w5h>onqEw+~MHa>!u&g4WWWogK~y==6h6|)UiRyfo4ZP7_$Qo0xj6 z-s&5y-dSsXvt8e4^~_}-5tWN5o@+bgf%5{JA!eLb_iMBwyAmqT|5+xI>DcutgmAhS zu^9s9|1bvvlyuj?o4HaFPq=>zwC*FH~y#nMGs zY;0Sm)7%omI#}0aQF(X$)5bovx!u-OFF(30i-i0)3Cu9nVW$1me*Et>bVWL%9K|_* z!$L-`EQ_#TH-X-|i(j#Sa{_s?3T8diogXKY+Y@hxVA6lk4bw)3ESjQAqJ@}qdiT9M zsz1aBW*dAwTkYOO&&u+oI9zN{Bi+US{Rh`lZ8F(mupMm|VbDf?PIt%JfqY+sY@JoE z!@=4sivgLiloZ=TZ09F7&!g_eN!Za3lSFi3R|^D;iGXCSA_>!~%E^Iv!ODo!u8~(| zLX*`sS{={ubKpD7|6yhFf3#0+v;uzn2Eu=h$POFHFJCvYDt>i;JimIThF|t@T0OtI zK9%48{I*1T4yZi$iuB&#V15sZ^t%I>1Rf0P`9lK_2g~?9hF{g?IDU)yUCD0|zo+u6 z=hyJ7`|J5tJwM2=>hmFfb$wH$&jZ!oiz9sr$cb|HnMi*&@Nm0k6+dQ5q?##pYp5wzvNf_^fbT9=Xd<-xfde+BB*x# znP1iS6@K+Ry&$kg&J)7hH3{c~_7pQ(& z462+1LDdhdvDaf6sCJwX*G~ocvDN(1`=^7dZyTuhmiK$*A8X)`o@)kG&TLTq zv>(WiE#Qyn>0nUh9R}*T_khaxSWxeu04m=VfhU5Zlhu)46Sy|;G*IuI5$Q8Qe(VF0 zK0ELnP|vkRdLzh>ofqlNk-i{sOI*JQRQVqVRqrd}{#BsbcQvSXTp!nO05u&%u#C6jc6)MfwPkA3G}2OC!B3@B~oL zuK<JmpA?~y3-OD{2RQt~dH6EA5^-Dp$|FOW!;{GQi{i(oD$Mvm|zB=$4Q0=-d z@QZQ%hQJ#GzZ7^=;Fkk$2KljD`J-{XBd*^GYJ9#Gcwb!q4ybW?1XO!}5Z8Yg*MA=A zUj+U#@bS3+RHT0kiq8K8@}u33-Y@?I)t-OFb=(==KWIXZcvT(I#C^UGjP#&D;w$|A zU{L)$GSYhljtblpR6E8;x;oNRK$Sl=t~Ufu3v3LW9@rGv95^FzX5g&A*?}#Aa{}iE z?iILq;68!x2y6|U2Wngni1b2G{dXX!dLIB}R1Wu&hP{3Iy){7j@j3+lbk$Mvmo{pz@WZQ%8w>iw0t|JA@-0&fkx4OGA15%~4M zy94h9)xQsc%J0#*{uror=+~g=|2dE!dyzlN?bcQzeOz3xigXRQJNH{6y?5X|Q28we_5Qm+<#$k|4+d4v;c@+lz#{|S z6Zl?G?=J=Q{4!AWKQ8VcA9zCG3Q+xXDya9?#`V)8y#dtwXMoD@Y*796;kdpLR6RF= zdjI@LUl4dnU*?aa z5>Rx$JE(kzfoj+2xLyaU+*VNUF9Ma{Vo=W=0_wfPK-J^OxK6NuKer6z$4-j$N>K97 zI#BOz0B3?XMfzq?dRBX+?*pm2Jp?*Ef-3(hnX8)4uEvpyZNQLDj36&Q<f7kE9W@^1%K&K;nhyF2jy!0*TX9|ZmoR68F7RgWh@e(X8^D4#!oq8Cgj zHW{o3b$u$RapYrQo}LjnGjJBDets9I`EoF*{x}R&|Gp38$5!x1_g4j;3M&8Apz41{ zq|XFZ&vQZL^I=f$ofqi~K)rV%sQ$Ys?te6{UkYj*ZjI}=gUbI~k#3LlL!k2cE~tL^ zaoqnIsD5}p?!N%4J}-eP?{A>`xPD0Bp@D}59v*lEsB(@1Rga_N`Z3@X(jNg;&LwgEqoAI<3>3e=I?~sH zqU&~0&))}*1)l^Z7rz9K1BXKFdVd6{dXEJ4{3uZE91BXGZvg2MYXSBAUf>?!;h@HW z;3a?mn80H}wc~h@A6vs8y|*s#bWrrZ8C1FFgDU6BNM9BBNl^9pT% z21RcLWTyJCEyMFK1eH%oV86IO091bt2ld`qkRO}EAC2SQp!#nfDE@mmsCt z)%WhW{_VhfK=s>$pz{50Tz@$55m4j$Xx#sCT>lBEetsMjJv;}B52y*$##gBq_>L5RkX)GPE`j)P0VZ^ZR21D?#N`9XK(r*MaKi29O_FtJ64wV@Mwj zs@!8ijr)n9`f)9&@=ps~7q}kO^QTAp3{dUZ2&$eJ#r=yx)#qcN@?qz>t{gq z&*$U%e}H=bi=gUzb6o!lsCjcQsOPtVD({DJ|4~r&eH>K2zm4lpgPJe@8|mjj)%%Zu zF9iN6@Gqe9{THZyCfLmD+dpsssPYGa%4cv~9|EeJ5uoZn78G4IM|v-iA3Kmg45b|f zP6RiBs`n+J^1C$Bp90lyp958&8$jiMbENMAsiHjqYP`M=%BKH2Q29IqYJGhjRDBCz zHmX+{sC;(=_1vJq!GXJjs^2(J{a*{}`N<$Zwikai4og6d=fR-bc_OI%R|lQ}ivL^! zjt0L3YW@5ssQTUqP5_?)Rlnyz<@X0r`MdNGG{KtX1UJa^$ z>Oj5U2&(?GK;_c{D*riPBY1M8PXYDbX`tTw0I2qUFz$aS@WX*^aes5*7Ep9@W!%3C zd;G)3Apyt`3kv=T& zaF8Ec$se_E4XEeN0#!c(aC|&I2&&#&K=spQasTqbt3cKBlac-msB!!pDEaJbasTV! zIMRY^Ffujf8at;?=1l}9!JFW_r&#Okv-UF%dT)1715tsxMm^eS8iCt4OZ~$AcdSRnC=xp9aT~{syS}eFs#&4}j|DpMe_Z zU&r+)K(+g+z^6g=)1N^-_c90xS${e~?H&NC-v@)D|BAp`P;}M=>bd5?8KCmp7gRkK zfGY0*Q0+Pb)Hojl>b+w@wdZ(H&#eeNDekWXmCwl_KejQ_n*%Qd88Z7UsCsS%mCrSx z^1n9ly1?r}jmwuo@r$p6dhgqD|DM2hQ2gk>LD>O@vN-AaDp2`XgR1w$NKXRmN%OHS zug}SG{Zvr(SPd$l8$iAH<+y$`sD8Z*RQ~sa%Kt%7?S2?kzx@(aK97Uy_uqqBhyMiX zxtBok89w*w&vDGX=Q9LUdpWD#%dLp}qd}E7Ij%PZ@;x%|=S86Eby!?~PvBBe{cw#|s>R~-s5J)thr~88H&oWT? z4v6c!fvVr2NSA}6^O2zFYjj*66F4^R*MfSl4%EEcE7JRbqNkHV<+C1CeKvq<_Xi{W zp}-G=%4cJwH-VZLSH<;DfufgdK;?H6sCjx4pcq<7}uW0wQ2AT}>iH`oeHEzZKN z?nzMfdn)j^flq_V=l79*Ch*z7{{>-f_C};Nsg+LwsQMIwdcQc*WuV4y4^aJB1?u_n zpz2c(YFryZ_3KPf&%FZ_9qk|Y7svHOLA`$%D0%xdP~&_pDE`LB51r3E4C=W@K-KF9 z;5hI_Q0;#mRJ{hm{Pf%)P|pnko$rC-W8*=M>ts;%odN3knV_EAE7E&|YWF)L-3lr{ zj&yR|A5?yvWAD!$3MwCVXnVbvMS6MQaiH42D$?%{JUQ?bQ2n+RRC_qv)bnctMZcFv z`U+6xegV|;*T(hhK-KStNZ%OvrMP}`;4Prqc}Lv8Gp>I<(%%4;@3%qq(*vOT=}}PQ z!na?&oFY*DQv#}813}e$G|1GpnV|Y(7O4E@f_i@MNY9J(exRP4AJ-Q~dQsrwz;}Wg z-}iya=V(y%Itf%g*F^dQp!nGZp!(yYxc_lb?_Cb6em6(@tDv5{4OG9}1)_r3cR|(b z;kf=NsCNDwR6U*nwQl|mR6X7RH7@-yN~oLxpxR9|r_=u)pz z?U)(YXMxIh9;kd4fXep(P|v*^)cZ?7wfAUH?N|niUe?F`4WR0|3DkVN5LEe>gL?j| zxc*sC<$M8Dem6(@*1+2XzXs~PZ-SNJe}k&mufZzt4G>mhdtiKa{s4*(wt&iiZ&3B# z2UI)u2N5;xeW2RABJQ6Es=rPFRsXXC`P6~GcNwU1KLIMg%LA{7>sLkklac;3sPe9k z>(>Nc8+cvd^`PqcrAXfds+^la)$dMF`FuO>-xJrr8|jC^aoqm{sP~=+)sB}U{WnnU z?N^!j+5}MjIT6(O)JJ+6sCG35P6t)5nUS6as()KSm9sCXau$MmZxN{Z_#RN}|0$rZ zp9<>vHK6+SgMk-=s>h`uq-D*qa=0IUW3fOVkysUB3nO$%%S_56NdA8-Mv_x1bGBlqO0G4dhV&f z-+_HdKLe`X&w`@g=Rx(yKS0S9yNyrJ4FWa(BO^Tu>`QudU}fNVQ2A8{P6(_4`*3|? zr0c-Gq^HF7sUSagFn{#^A%Ta2dhc*h{kjy?IG+jj1;Ul2lzc{Xc6jXnF zCa!-Lq-l0H$dYKkjO&ks>c9U1)o;I#>(79qOU@s2zPNjJ%719!Fi`L95$REZdj?j3 zeYrmtRKB&~WbhDB{k#+uU7i%U4pcv%1M2znK(+6DQ0=+^)Hq!X>biJ0A|6bgGH1IJ{`Ts2L|2)#a zjP&E6>hbGH|4-m=0-p$cGVrOu-v&M%_&ZSLJOipy=;D~Tz8owfeIls)Cq?=cQ17pa>uUo~167~(asLdkko4Jc{ajG_ zd@!zW1Xb^gK-KSyp!n!rpw`zPfXeStQ1$vXsQjJ;HNMY)-fmFO{WLCJBy1XbV1LDlamP~|)w=|6&^zrRPCbME~4H^3sUvq!<{ znR6BW`tG3K9|mgOtOLh^e7eZ{<0!C%^m0(o9Sm7wZ%3aEZNH|~E3)O@@UR6Vx@ zUIgmBOTl9B3Q+xV1E_wu3Domn2KC&npz>`Gd^GS0Q2p=+DVUapCLZ&M#+yDsK*`_xB3iC$7&6oFB+X5ImoSfs5k$fr0Oi>q|h5+p(bN;ABww zp9+?Orw4uzRJ}d~svkB-`uxBPK(+tkz{^0j>x#I4W#CnTp9EFTr$Lo_Jy;5UC9dBB zsvqwGRW3UZ{rUSqjngBM{ywO3eiZ4SfNIZEpx*l}SPK3j(tnKfUnBjuNdGI+uY;oV zvbyv>A0zbq2S$1jsBst)*N4aT5rOP_^?Hs9tcdHQ!BXCv5Z7zt`b4mS>qo}*_kvo7 zP6pMVYeBW+w7_+s%0E5QXMk$|*^xdc@LW*+%jc_o9r_Ze_24d0{rVs%e(@Nn{`xJb zcE13syca>u$5$f#YT!S?aa`wUI?sO$*hu=_py>AqQ1yE+*bh7&RKBZ0<+~p->Rj7XmucowL3oDHhJ7shoyyW;s>6!;NP&s_qRfmec(Q@;W#-`ha(iTgo4_aG>` z`w3VNs*_Z|0#Nt+Mw)%!o-PjLa5~SAL#O@u-2w-KYWHAJ^&A7LU+W`12UPxZ!G7QZ zP~{&C>b=9_{^6j?KQgW#73rmsJ{D9y%Rtf7%DDgjNUsA$H)lrr!=RpT1GOG~9#sBc z0M#$og6glE{bzd^O^75l`{RvR@;N%d;*FlvdqEdZ0 zG{D<60Mxh-2Q@x>f_iRr;8;-4j|Y|CbWrV>5$XBh0Mbi9)$0UM&#weqz^lRW;5JbC zJ^-qozXGM_{~c8Sz7DG0Z-C0b&(w6iAE@j7LFGFr(&eD?8xrZ=1BZgD2YYS(y*g0s zYXbHB3{dTuANM)i&95I2xCm7F2S)lJQ2lZ!sCvE+tO7q6*EfNZ|2_}y2Hq6cZvj>B zTLW(cmGAA5z5~?welybF0@aTXfokXXK+)T8K-K$6P|rUDjsr^@QadX^p|srMqEEL@T|ZOfJ_0q4phCq7}swAm2W$! z_rDYO?~nTr1U?wozZ>a?LDl=mfscc#|L;KM{|u=5JqwCnI0D+~hokuXx$&Uxa|WrG zzc;9H;KPtUzYhhK&*6bbf`dq(2X^*aOa0yVzh0oC3|K=soP;{Fdo>4Sd&)xX18yj1Uzpz_}X)cl_m>B*q- zX#&;WR#0}2!@+WJ1*rU2g39Opft+CB*Vller_({@&*#^?U1x(@pFRPO2k!v&{#~Hg zKhpPuD(`Vn@BepP|1~JS`g>6G<`1CC`7@|__)k#JzZUo}Q2D$ z*0lHkz(@}Qt9Y(4($nL93#k0&2JRjA_W?C-`$l>{Q1x3F=|zEyLA`$b-{|{oTNa zLACpPfjb!@%P#|;4E$eE^XE^X`s2@me*x7W{{;2^>!9Y(h^EwzJwZKR0qXtn zk*<#We3HxGn+&QxoVDWpzZW=!^g*Ed?R}u~KL*ru%RuG3JkrO<{SyOMfojKTk=_8R z{Bt7x|8;f0yKyI38OMDGT*I1`)<)h=CYkJH?8Gbo>BOGc-96oHJH3-pu7De0l$Ce^ z67T{LAR%!FyaFLD@Dd3wiT6C8r}_sHWBJ?F^{YB{s_N9KQ`H^MZ}Un{{-j9d{PF%Z ze|Nd<{K@|PpYGrP+5Y{X?_d8Sujc75_wWB||N7Va*Ze`*%Ke-D>)-BQ|1Pik@%Q`J zf51N zD*vu6-nZnU>BYfg%B=cyb#T-4hmuz7)?K&crs+*3Z`$srI&9j?wlW{u`a{b+Hs`65 zpPK%u>7V-ar_}xZ{m-K5Ra*Ob+We{GewBl`(Z!2$z6WK@pQHaVBk@Tjwf%ckXG>#75 zH|Mq`&D2rGLcTdd<;}}c=2&0un>Hp#NzuV99HsQ2R<@Zb+=WK_C^qpn{h6%wq&?J2 zeZ(L0JBtp-2dB|iu6(Vq=9B#B?@4;M4zDBoq`f$)ZYQ;nlWKBOO;8!F|1y1?NBZpG zQ+}-n^!|DNe#9)JD(A()%g{=hrS0qRBCX*_-!;7`SLG%&^7%VmDTT{&U3zN0pd31* z^2Q(UOERsRSys($sm##%rjpIeEYFlQFSCR1O7k*{6s_O4EpsIO7%rN#Y%Mc2OKF-| zO-MIu3dv#NvyLIkSy$Ul%Wpawn`&aNXVKvMQopRVS$e4TZR|Bk{rRq`yYM!B!bQ0ajli?a{zbVASa{Jz+eR4wA`@K=%jRpiLeU&BhSHH9akUf@U% zeP1@`>+;)>q^Tz_Q}0D&4a$9$Rz?qTq_y%*dPD>AKW8M>JTA}oeKi)}?n^2AIccrF zte!9Pe$|#v!sq$LX>6vkqubCFUnNbFvSb+r{G2CxiYKKJSJ$|EI?B9G+IrR#E8EOW zV@cNQ~KYoE8es0Q1R<)6j!*YRyu z3@*x5xefVJdRcqpibHj^i<^=Jt-s0YBj37v6DgOW)rVTQFT6>e zLA9*MHz`dHKkzoAF)M#nzAo>}O~@0!JvdJbDCfL8$wk)m+vLtet-Ni2-*)cKv)de| zoc$A*Qm8!*n%7*j5J@jK zvNmyWIm+BMZPdk6NUG?`sCYWf?HFUD#TxyJ*F|8ct$Dl?I& zoRwO%s!`va4z5#Eju}GI%qEg)Hj%VtR_b-$D=!MwALY%jUXkDgCwf-KoT8^@7I&f9 zML9gcb$kSSHM3~O4zmiz$qeONrPG>m9+K93y9Qd>&N28gJgyw}V0B%TT45DPg0l$f z$8;8XNZLtaT8+j|T6rD`wL8m9;fUqwz*8Y;cOw0HxZ%~TFgeqTr|q;l)w06OgSzY)jrp{CjG+~S zMqsi#a@YcrVgf!e#!%a1G>XSn^aU0Ugu8(xswB1ccLfRNOQKIK!1Jo`LVAs(WKab>Z z6LX_h#Ft1u&yHHzwx|4twAte~P%GQ~pjNi+m*`^Ne$LaXw!{)>te&dvQ)lX_670>x zI#DYh+n0}(ysOUQfqDEC$)8$A%Keb&kk7$QXdlJ9@*y|ZyT>5Gv5Vx8fG1`C*L_9-%Sqp}L<__b#7ti*|pOIbs3FjOa2zqR9a^M`YKiPnNiiDImXAVuij2^xh<%Wk70V#WJOGk!Z^uPB z_C|WzCGfHQ67mP;nFOm1)nYHAil3FV(tFe{8K|VF1CGK) z^Xh(t&%rk(3H-)5v7jCsYjj@m9+h-%FRi@Qhr7`3gJjxM(0!7f1PLWnd41zS7 zA`V_ktbyc-1&}m5Grz7C9v$WLoot`ZtYg|6%;|TA{ ztUN8XVy)oYk{s&*hb?QDRU&W8f^b-jc)`r0{u+CHEO+Inkfzg(m8e6S949+|T)XZm z&{NSf>aTqrmFL@$WU&I0&i2?YIc#azG5|DUEF z|L9XYr_k9xy>6P+)A%H@)Kw{;Z^vyYmKe8Oc$u^v8A-O!qPq53w3D${RF}tCWh}IA zR~0k*>|gARKHK2iQ5jZ_?ybdf=+hf93qP(5D;oPJ?vmyicq|l|4GTgNj4pZnv7RAq zr*`P96pkO|%_)*;9#I)y1&x5+8J!u#maIX(c|^4yGD_b^Pv>B}FzT6o2gOrn%8h^= z=N)`ezAEjyA~96g=kusddypFh`dRzv3^Z%`S$aC%EX=YBq@8Vy1(L%{AYV0$O}T^6 zmK_R>qFo7jDWBn>r*5L$P0+|G(x{CSAU*BSs0_P8t+;o>T{!M9>{HU(vNs`_PDW^y zM2zV3A$P9GzMSz;TW$)?+4vp_2_i;RSA2+i$70c#IKkqGz{p|4Xq3zujvExcumj@9 z@>BUabjly+b?g6G(kvg<8fRQ5MfRli>GVbikrry#-iP`kx<@*T(?{GoqOi%Q*ezM- zxML-aS4KVJQ;}pAjP&7S(46um_!LfkB~zZ$ly>c;XguwnsCWDrl4kcrePsVQ^3Amy z-Rah8tOEW`4t?x*(`^*b#!G5Zq>5}{*VcDkFT3in>-ac*dHNyzu{t>E(EGSNDNjSI z4DUnVOu@78Bz-}(tRwVkgcXGEN+*Enn;J%OjD-~>ZJ(dDH~gwQGIGxIgCngKGwO8e zQv&M+?Lxc;lIGlmkD=9pT4eM1A>@rwkEWYxy0{@m`m=K!cNz3&=V%1R{E;XB;q}DiEP(!FKhuUZY13&{Eq->K8^k!jNLt)#zcRM$bL>1g(sUTU zlTDI(SembCob-|INRD=p=I$8rOMXRkXkK_}Ybez^}sHR!?H2W5Zex_KagM z93Fut>Kp4_$f}Va5;+-t6(sSoGALB9eTQextHC zEo1*M>)H~HpjO+32eH|KU(Qbj- zW$mcHd^M81i@l(c+;t3h)!E5K4mm8qT6$R;lg}AT(GvQ^8b6fUBZa(t5G`x(|LUWewucLCiKSUb)q zN2QXioo|+AZ*E05S+%?wUYFLfofmJ*Rk%D9>-B z^7@D)%28J|F4mFnrU;dEQ-sR!#_k2A`BL9dxexh0s}6lOB0?g;n4o)vaYO7}YL}u3 zi?vsc^|?#>H_dT-EVa%j9%kP+FPEWH;SZ6&4Xu|SQexS=iB-s}`)q8{nC!T#-M0uy zKx^JEfKILaxf}C~QjWTxt0(U;PudAitSxQTpfpeAUVD>obCd5o-}7+f$otZf|B?vc gDQU0MfBuz#Z}|J~_xw|{{P%~y8?XQI-{bXv0C$N5lK=n! diff --git a/.vs/Reservation_System/v17/.futdcache.v2 b/.vs/Reservation_System/v17/.futdcache.v2 deleted file mode 100644 index b924ebfed7a37179418e8d4e8e1be8ef4c5fb3eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmZQ!U|=wEwTf}hPf3kQR*nfuElw>eODxIE&x;SPEG|jSjd97(P0Y-LQhLe71x5K; zOh9eC&iQ$1ndzlPVAZTHsY#{j9056rC29FZxonPkmCga7mQ|~JfJ(ujc6Y??*U9%d zZ17v>SWu9YnG7~F28m6g#Sa#6PKQ|xqn+?u?3tHVlvrF+RGM5;T9g`t$|ccy{}a#V hz^t7<`N1BLzjg3ipIDF?1H>d+RCI|o2WAnB1^|gvn_K_@ diff --git a/.vs/Reservation_System/v17/.suo b/.vs/Reservation_System/v17/.suo deleted file mode 100644 index c6e0ba6b5d424d82345b2883ceb2c9e07ed2b554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34816 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 RequestPaymentAsync(Domain.Entities.Payment payment, CreatePaymentDto dto); Task HandleCallBackAsync(SandBoxCallBackDto dto); - Task VerifyPaymentAsync(string authority); + Task VerifyPaymentAsync(string verifyAuthority); } \ No newline at end of file diff --git a/Domain/Entities/Payment.cs b/Domain/Entities/Payment.cs index 5355da8..88b4592 100644 --- a/Domain/Entities/Payment.cs +++ b/Domain/Entities/Payment.cs @@ -71,7 +71,11 @@ public void MarkAsFailed() } public void MarkAsSuccess() { + if (PaymentStatus == PaymentStatus.Success) + return; + PaymentStatus = PaymentStatus.Success; + PaidAt??=DateTime.UtcNow; } public void GenerateOrderNumber() diff --git a/Infrastructure/Services/Implement/SamanPaymentGatewayProvider.cs b/Infrastructure/Services/Implement/SamanPaymentGatewayProvider.cs index de9bf7f..9c586da 100644 --- a/Infrastructure/Services/Implement/SamanPaymentGatewayProvider.cs +++ b/Infrastructure/Services/Implement/SamanPaymentGatewayProvider.cs @@ -66,16 +66,15 @@ public async Task RequestPaymentAsync(Payment payme } var paymentUrl = $"{paymentPageUrl}?token={result.Token}"; - return PaymentGatewayRequestResult.Success(result.Token, paymentUrl); } public async Task HandleCallBackAsync(SandBoxCallBackDto dto) { - var payment=await _paymentRepositoryContract.GetPaymentByAuthorityAsync(dto.Authority); + var payment=await _paymentRepositoryContract.GetPaymentByResNumAsync(dto.ResNum); var request = new { - RefNum = payment.RefNum, + RefNum = dto.RefNum, TerminalNumber = _configuration["Payment:TerminalId"] }; var verifyUrl = _configuration["Payment:VerifyTransactionUrl"]; @@ -90,7 +89,7 @@ public async Task HandleCallBackAsync(SandBoxCallBackDto dt return VerifyPaymentResult.Success(result.ResultDescription); } - public Task VerifyPaymentAsync(string authority) + public Task VerifyPaymentAsync(string verifyAuthority) { throw new NotImplementedException(); } diff --git a/Infrastructure/Services/Implement/ZarinPalPaymentGatewayProvider.cs b/Infrastructure/Services/Implement/ZarinPalPaymentGatewayProvider.cs index b628f3a..2722056 100644 --- a/Infrastructure/Services/Implement/ZarinPalPaymentGatewayProvider.cs +++ b/Infrastructure/Services/Implement/ZarinPalPaymentGatewayProvider.cs @@ -33,7 +33,7 @@ public async Task RequestPaymentAsync(Payment payme Amount = dto.Amount, Description = dto.Description, ReferrerId = dto.ReferrerId, - ZarinPalMataData = new ZarinPalMataData + ZarinPalMetaData = new ZarinPalMetaData { Mobile = dto.Mobile, Email = dto.Email, @@ -47,7 +47,7 @@ public async Task RequestPaymentAsync(Payment payme amount = requestDto.Amount, description = requestDto.Description, callback_url = _config["Payment:ZarinPalCallBackUrl"], - matadata = requestDto.ZarinPalMataData + metadata = requestDto.ZarinPalMetaData }; using var response = @@ -63,7 +63,7 @@ public async Task RequestPaymentAsync(Payment payme } var result = JsonSerializer.Deserialize(raw); - if (result is null || string.IsNullOrWhiteSpace(result.Data.Authority)) + if (string.IsNullOrWhiteSpace(result?.Data?.Authority)) { return PaymentGatewayRequestResult.Failed( "INVALID_RESPONSE", @@ -76,49 +76,93 @@ public async Task RequestPaymentAsync(Payment payme public async Task HandleCallBackAsync(SandBoxCallBackDto dto) { + var payment = await _repositoryContract.GetPaymentByAuthorityAsync(dto.Authority); + + if (payment is null) + return VerifyPaymentResult.Failed("تراکنش یافت نشد."); + if (dto.Status != "OK") + { + payment.Edit("NOK", null, null, 0); + payment.MarkAsFailed(); + await _repositoryContract.SaveAsync(); + return VerifyPaymentResult.Failed("پرداخت توسط کاربر لغو شد."); + } + + if (payment.PaymentStatus == PaymentStatus.Success) + { + return VerifyPaymentResult.Success( + $"این تراکنش قبلاً تایید شده است. شماره پیگیری: {payment.RefNum}"); + } return await VerifyPaymentAsync(dto.Authority); } + public async Task VerifyPaymentAsync(string authority) { var payment = await _repositoryContract.GetPaymentByAuthorityAsync(authority); if (payment is null) return VerifyPaymentResult.Failed("تراکنش یافت نشد"); - + var verifyRequest = new { merchant_id = _config["Payment:MerchantIdZarinPal"], amount = payment.Amount, - authority = payment.Authority + authority = authority }; - + try { - var response = await _httpClient.PostAsJsonAsync(_config["Payment:ZarinPalVerifyUrl"], verifyRequest); - var result = await response.Content.ReadFromJsonAsync(); + var response = await _httpClient.PostAsJsonAsync( + _config["Payment:ZarinPalVerifyUrl"], + verifyRequest); + + var raw = await response.Content.ReadAsStringAsync(); + + if (!response.IsSuccessStatusCode) + return VerifyPaymentResult.Failed($"خطا از درگاه: {raw}"); + + var result = JsonSerializer.Deserialize(raw); + + if (result?.Data is null) + return VerifyPaymentResult.Failed("پاسخ نامعتبر از درگاه زرین پال"); - if (result.Data != null && (result.Data.Code == 100 || result.Data.Code == 101)) + if (result.Data.Code == 100) { payment.Edit("OK", result.Data.RefId, result.Data.CardPan, result.Data.Fee); payment.MarkAsSuccess(); await _repositoryContract.SaveAsync(); - return VerifyPaymentResult.Success($"نراکنش با شماره پیگیری {result.Data.RefId} انجام شد"); + + return VerifyPaymentResult.Success( + $"تراکنش با شماره پیگیری {result.Data.RefId} انجام شد"); + } + + if (result.Data.Code == 101) + { + if (payment.PaymentStatus != PaymentStatus.Success) + { + payment.Edit("OK", result.Data.RefId, result.Data.CardPan, result.Data.Fee); + payment.MarkAsSuccess(); + await _repositoryContract.SaveAsync(); + } + + return VerifyPaymentResult.Success( + $"این تراکنش قبلاً تایید شده است. شماره پیگیری: {result.Data.RefId}"); } - - payment.Edit("FAILED", null, null, 0); + + payment.Edit("NOK", null, null, 0); payment.MarkAsFailed(); await _repositoryContract.SaveAsync(); - + return VerifyPaymentResult.Failed("تایید تراکنش توسط درگاه انجام نشد."); } - catch (Exception e) + catch (Exception) { - return VerifyPaymentResult.Failed("خطای غیر منتظره در ارتباط با درگاه ."); + return VerifyPaymentResult.Failed("خطای غیر منتظره در ارتباط با درگاه."); } } } \ No newline at end of file diff --git a/README.md b/README.md index 3007258..5cf593c 100644 --- a/README.md +++ b/README.md @@ -1,206 +1,343 @@ +# Booking System API -# 📅 Appointment Reservation System API +یک API برای **سیستم رزرو نوبت چندمستاجری (Multi-Tenant)** که با **ASP.NET Core 8** پیاده‌سازی شده و قابلیت‌هایی مثل احراز هویت JWT، مدیریت کاربران و نقش‌ها، رزرو نوبت، مدیریت سرویس‌ها و اتصال به درگاه پرداخت را پوشش می‌دهد. -## 🎯 معرفی پروژه -این پروژه یک **API سیستم رزرو نوبت** است که با **ASP.NET Core** و بر اساس اصول **Clean Architecture** طراحی و پیاده‌سازی شده است. +> این پروژه برای نمایش معماری، طراحی API و پیاده‌سازی یک سیستم رزرو قابل توسعه آماده شده است. -تمرکز اصلی پروژه بر: -- ✅ امنیت مبتنی بر JWT -- ✅ طراحی RESTful واقعی -- ✅ جداسازی مسئولیت‌ها -- ✅ جلوگیری از ارسال و دستکاری شناسه کاربر -- ✅ اعمال Authorization در لایه Application +--- + +## فهرست مطالب -می‌باشد؛ به‌طوری که API برای استفاده در پروژه‌های واقعی و Production-ready مناسب است. +- [ویژگی‌ها](#ویژگیها) +- [تکنولوژی‌ها](#تکنولوژیها) +- [معماری پروژه](#معماری-پروژه) +- [ماژول‌ها](#ماژولها) +- [احراز هویت و سطح دسترسی](#احراز-هویت-و-سطح-دسترسی) +- [Multi-Tenancy](#multi-tenancy) +- [درگاه پرداخت](#درگاه-پرداخت) +- [راه‌اندازی پروژه](#راهاندازی-پروژه) +- [Endpointهای اصلی](#endpointهای-اصلی) +- [نکات امنیتی برای انتشار عمومی](#نکات-امنیتی-برای-انتشار-عمومی) +- [وضعیت پروژه](#وضعیت-پروژه) --- -## 🧱 معماری پروژه (Clean Architecture) +## ویژگی‌ها + +- پیاده‌سازی API رزرو نوبت با ASP.NET Core +- معماری چندلایه بر اساس اصول Clean Architecture +- پشتیبانی از Multi-Tenancy برای تفکیک داده‌ها بر اساس Tenant +- احراز هویت با JWT +- پشتیبانی از Refresh Token +- مدیریت نقش‌ها شامل `SuperAdmin`، `Admin`، `User` و `Customer` +- مدیریت کاربران، پروفایل و خروج از حساب کاربری +- مدیریت سرویس‌های قابل رزرو +- ایجاد، ویرایش، مشاهده و لغو نوبت +- اتصال به درگاه پرداخت با پشتیبانی از Saman و ZarinPal +- اعتبارسنجی ورودی‌ها با FluentValidation +- مستندسازی API با Swagger +- استفاده از Entity Framework Core و SQL Server -ساختار کلی پروژه: +--- +## تکنولوژی‌ها -``` -Api - └── Controllers - └── REST Endpoints +- .NET 8 +- ASP.NET Core Web API +- Entity Framework Core +- SQL Server +- JWT Bearer Authentication +- Refresh Token +- FluentValidation +- Swagger / Swashbuckle -Application - ├── Interfaces - │ └── IUserContext - ├── Features - │ ├── Appointment - │ ├── User - │ └── Service - ├── DTOs - └── Application Services +--- -Infrastructure - ├── Security - │ ├── JWT - │ └── UserContext - └── Persistence +## معماری پروژه + +پروژه به صورت چندلایه طراحی شده است: + +```text +Booking-System +├── api +│ ├── Controllers +│ ├── Middlewares +│ └── Program.cs +├── Application +│ ├── Common +│ ├── Features +│ └── Validators +├── Domain +│ ├── Entities +│ ├── Enums +│ ├── Exceptions +│ └── Interfaces +└── Infrastructure + ├── Persistence + ├── Repositories + ├── Security + └── Services ``` -✅ لایه `Application` مستقل از `Api` و `Infrastructure` است -✅ هیچ منطق امنیتی حیاتی صرفاً در Controllerها قرار ندارد +### توضیح لایه‌ها + +- `Domain`: شامل Entityها، Enumها، Exceptionها و قراردادهای اصلی دامنه +- `Application`: شامل Use Caseها، سرویس‌های اپلیکیشن، DTOها، Validatorها و Interfaceها +- `Infrastructure`: شامل EF Core، Repositoryها، JWT، Hashing و پیاده‌سازی سرویس‌های خارجی +- `api`: شامل Controllerها، Middlewareها، Swagger و پیکربندی اجرای برنامه --- -## 🔐 احراز هویت (JWT Authentication) +## ماژول‌ها + +### User / Auth + +- ثبت‌نام کاربر +- ورود با ایمیل و رمز عبور +- انتخاب Tenant هنگام وجود چند هویت برای یک ایمیل +- صدور Access Token و Refresh Token +- تمدید Token +- خروج از حساب کاربری +- مشاهده و ویرایش پروفایل +- مشاهده کاربران توسط `SuperAdmin` + +### Tenant + +- ثبت Tenant جدید +- اتصال کاربر به Tenant +- بررسی وضعیت اشتراک Tenant +- نگهداری `TenantId` در Context برنامه + +### Service + +- ایجاد سرویس قابل رزرو +- ویرایش سرویس +- حذف سرویس +- مشاهده سرویس‌ها + +### Appointment + +- ایجاد نوبت +- اتصال نوبت به یک یا چند سرویس +- ویرایش سرویس‌های نوبت +- لغو نوبت +- مشاهده نوبت‌ها +- بررسی مالکیت نوبت برای جلوگیری از دسترسی غیرمجاز -### JWT -- احراز هویت کاربران با **JSON Web Token** -- ارسال Token در Header درخواست: +### Payment + +- ایجاد پرداخت برای نوبت +- انتخاب درگاه پرداخت +- دریافت URL پرداخت +- مدیریت Callback درگاه +- ثبت وضعیت پرداخت +- ذخیره اطلاعاتی مثل `Authority`، `RefNum`، `RRN`، `TraceNo` و `SecurePan` + +--- + +## احراز هویت و سطح دسترسی + +احراز هویت با JWT انجام می‌شود. برای دسترسی به endpointهای محافظت‌شده باید Token در Header ارسال شود: + +```http +Authorization: Bearer ``` -Authorization: Bearer {token} + +### نقش‌ها + +```text +SuperAdmin +Admin +User +Customer ``` -### UserContext -برای حذف وابستگی به `userId` ارسالی از کلاینت: +برخی عملیات مثل مدیریت سرویس‌ها، مشاهده همه کاربران، مشاهده همه نوبت‌ها و ثبت Tenant فقط برای نقش‌های مدیریتی در نظر گرفته شده‌اند. -- Interface: `IUserContext` در لایه Application -- Implementation: `UserContext` در Infrastructure -- استخراج اطلاعات از JWT Claims: - - `UserId` ← `sub` یا `ClaimTypes.NameIdentifier` - - `Role` ← `ClaimTypes.Role` +--- -✅ تمام عملیات وابسته به کاربر، هویت را از JWT می‌گیرند، نه از ورودی کلاینت. +## Multi-Tenancy + +این پروژه با رویکرد Multi-Tenant طراحی شده است. موجودیت‌هایی مثل کاربر، سرویس، نوبت، Refresh Token و پرداخت به Tenant متصل هستند و داده‌ها بر اساس `TenantId` تفکیک می‌شوند. + +در حال حاضر Tenant از طریق Context و Claimهای JWT مدیریت می‌شود و Middleware اختصاصی برای بررسی وضعیت Tenant و اعتبار اشتراک در پروژه وجود دارد. --- -## 🛡️ Authorization و Role Management +## درگاه پرداخت -### EnsureAdmin -برای عملیات Admin-only، متد زیر در AppServiceها پیاده‌سازی شده است: +پروژه ساختار قابل توسعه برای اتصال به چند درگاه پرداخت دارد. -```csharp -EnsureAdmin(); -``` +درگاه‌های فعلی: + +- Saman +- ZarinPal -این متد: -- Role کاربر جاری را بررسی می‌کند -- در صورت عدم دسترسی، Exception پرتاب می‌کند +نمونه سناریوی پرداخت: -✅ حتی اگر Controller اشتباه پیکربندی شود، -لایه Application همچنان امنیت را حفظ می‌کند (**Defense in Depth**). +1. کاربر برای یک نوبت درخواست پرداخت ایجاد می‌کند. +2. سیستم بر اساس درگاه انتخاب‌شده URL پرداخت تولید می‌کند. +3. کاربر به صفحه پرداخت منتقل می‌شود. +4. درگاه، نتیجه پرداخت را به Callback API ارسال می‌کند. +5. وضعیت پرداخت در سیستم ثبت و بروزرسانی می‌شود. --- -## 👤 بررسی مالکیت (Ownership Check) +## راه‌اندازی پروژه -برای عملیات حساس کاربرمحور مانند: -- ویرایش نوبت -- لغو نوبت -- مشاهده نوبت‌های شخصی +### پیش‌نیازها + +- .NET SDK 8 +- SQL Server +- IDE یا Editor مثل Visual Studio، Rider یا VS Code + +### مراحل اجرا + +1. ریپازیتوری را Clone کنید: -مالکیت بررسی می‌شود: +```bash +git clone https://github.com//.git +cd +``` + +2. پکیج‌ها را Restore کنید: +```bash +dotnet restore ``` -appointment.UserId == CurrentUserId + +3. فایل تنظیمات نمونه را کپی کنید و مقدار Connection String، JWT و درگاه پرداخت را تنظیم کنید: + +```bash +cp api/appsettings.example.json api/appsettings.json ``` -✅ هیچ کاربری به منابع کاربران دیگر دسترسی ندارد. +برای پروژه‌های واقعی بهتر است مقادیر حساس را در Secret Manager یا Environment Variable نگهداری کنید: + +```json +{ + "ConnectionStrings": { + "DefaultConnection": "Server=.;Database=BookingDb;Trusted_Connection=True;TrustServerCertificate=True" + }, + "JwtSettings": { + "Issuer": "https://localhost:44328", + "Audience": "https://localhost:44328", + "SecretKey": "CHANGE_ME_TO_A_LONG_RANDOM_SECRET", + "AccessTokenMinutes": 10 + } +} +``` ---- +4. دیتابیس را ایجاد یا بروزرسانی کنید: -## 📅 Appointment API +```bash +dotnet ef database update --project Infrastructure --startup-project api +``` -### قابلیت‌ها -- ایجاد نوبت -- ویرایش جزئی نوبت (PATCH) -- لغو نوبت -- مشاهده نوبت‌های شخصی (JWT-Based) -- مشاهده تمام نوبت‌ها (Admin) +5. پروژه API را اجرا کنید: -### Endpointها +```bash +dotnet run --project api ``` -POST /api/appointment -PATCH /api/appointment/{id} -DELETE /api/appointment/{id} -GET /api/appointment/my -GET /api/appointment (Admin only) + +6. Swagger را در محیط Development باز کنید: + +```text +https://localhost:/swagger ``` --- -## 👥 User API +## Endpointهای اصلی -### امکانات -- ثبت‌نام و ورود -- دریافت پروفایل کاربر جاری -- ویرایش پروفایل -- تغییر رمز عبور -- حذف حساب کاربری -- مشاهده لیست کاربران (Admin) +### User -### Endpointها +```http +POST /api/User/Register +POST /api/User/login +POST /api/User/refresh +POST /api/User/Logout +GET /api/User/Profile +PATCH /api/User/Profile +GET /api/User/ViewUsers ``` -POST /api/user/register -POST /api/user/login -POST /api/user/refresh -GET /api/user/me -PATCH /api/user/me -POST /api/user/change-password -DELETE /api/user/me -GET /api/user (Admin only) + +### Auth + +```http +POST /api/Auth/Select-Tenant ``` ---- +### Tenant -## 🌐 اصول REST رعایت‌شده -- ✅ استفاده صحیح از HTTP Verbs -- ✅ Resource-based URL -- ✅ حذف Action-based Routeها -- ✅ استفاده از `me` به‌جای ارسال userId -- ✅ عدم دریافت اطلاعات هویتی حساس از کلاینت +```http +POST /api/Tenant +GET /api/Tenant +``` ---- +### Service -## 🧪 متدهای HTTP +```http +POST /api/Service +PATCH /api/Service/{serviceId} +DELETE /api/Service/{serviceId} +GET /api/Service/ViewServices +``` -| Method | کاربرد | -|------|------| -| GET | دریافت اطلاعات | -| POST | ایجاد Resource | -| PATCH | ویرایش جزئی | -| DELETE | حذف / لغو | +### Appointment ---- +```http +POST /api/Appointment +PATCH /api/Appointment/{appointmentId} +DELETE /api/Appointment/{appointmentId} +GET /api/Appointment/ViewAppointments +GET /api/Appointment/ViewMyAppointments +``` -## ⚙️ تکنولوژی‌ها -- ASP.NET Core -- JWT Authentication -- Clean Architecture -- Entity Framework Core -- FluentValidation +### Payment + +```http +POST /api/Payment/GetPaymentUrl +GET /api/Payment/CallBack/{gateway} +POST /api/Payment/CallBack/{gateway} +``` --- -## 🚀 اجرای پروژه +## نکات امنیتی برای انتشار عمومی + +قبل از Public کردن ریپازیتوری در GitHub: + +- مقدار واقعی `JwtSettings:SecretKey` را از فایل‌های تنظیمات حذف کنید. +- اطلاعات واقعی Super Admin، شماره موبایل، ایمیل و رمز عبور را در ریپازیتوری قرار ندهید. +- Merchant ID، Terminal ID، Callback URL و کلیدهای درگاه پرداخت را در Secret Manager، Environment Variable یا GitHub Secrets نگهداری کنید. +- اگر Secret واقعی قبلاً Commit شده، آن را Rotate کنید. +- فایل‌های `bin`، `obj`، لاگ‌ها و فایل‌های local development را Commit نکنید. +- برای Production مقدار `RequireHttpsMetadata`، تنظیمات CORS، مدیریت خطا و Logging را بازبینی کنید. + +نمونه استفاده از Secret Manager: + ```bash -dotnet restore -dotnet run +dotnet user-secrets init --project api +dotnet user-secrets set "JwtSettings:SecretKey" "YOUR_LONG_RANDOM_SECRET" --project api +dotnet user-secrets set "ConnectionStrings:DefaultConnection" "YOUR_CONNECTION_STRING" --project api ``` --- -## ⚠️ وضعیت توسعه و نکات مهم -این پروژه در حال حاضر **نسخه‌ی اولیه (v1)** محسوب می‌شود. +## وضعیت پروژه -با وجود اینکه: -- ساختار معماری به‌صورت اصولی (Clean Architecture) طراحی شده -- ملاحظات امنیتی (JWT، Authorization، Ownership Check) رعایت شده -- API از نظر RESTful و Business Logic پایدار است +این پروژه در حال توسعه است و ممکن است در آینده موارد زیر تغییر کند: -ممکن است: -- 🐞 باگ‌های منطقی یا لبه‌ای (Edge Case) وجود داشته باشد -- 🔄 برخی بخش‌ها در آینده Refactor یا بهینه‌سازی شوند -- ➕ قابلیت‌های جدید یا تغییر در Endpointها اضافه شود +- بهبود ساختار Multi-Tenancy +- تکمیل Password Recovery +- بهبود Error Handling و Exception Middleware +- اضافه شدن تست‌های واحد و یکپارچه +- بهبود مستندات Swagger +- بازبینی کامل تنظیمات Production -✅ پروژه به‌صورت **Active Development** نگهداری می‌شود و -در بازه‌های زمانی مختلف به‌روزرسانی خواهد شد. +--- -> هدف این نسخه، ارائه‌ی یک پایه‌ی تمیز، امن و قابل توسعه برای ادامه‌ی مسیر است. - +## مشارکت +Pull Requestها و پیشنهادها خوشحال‌کننده‌اند. قبل از ارسال تغییرات، لطفاً پروژه را Build کنید و مطمئن شوید تنظیمات حساس در Commitها قرار نگرفته‌اند. diff --git a/Reservation_System.sln.DotSettings.user b/Reservation_System.sln.DotSettings.user deleted file mode 100644 index 9a85fc2..0000000 --- a/Reservation_System.sln.DotSettings.user +++ /dev/null @@ -1,5 +0,0 @@ - - ForceIncluded - ForceIncluded - ForceIncluded - \ No newline at end of file diff --git a/api/api.csproj.user b/api/api.csproj.user deleted file mode 100644 index 9ff5820..0000000 --- a/api/api.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - https - - \ No newline at end of file diff --git a/api/appsettings.example.json b/api/appsettings.example.json new file mode 100644 index 0000000..43d9311 --- /dev/null +++ b/api/appsettings.example.json @@ -0,0 +1,34 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "DefaultConnection": "Server=.;Database=BookingDb;Trusted_Connection=True;TrustServerCertificate=True" + }, + "JwtSettings": { + "Issuer": "https://localhost:44328", + "Audience": "https://localhost:44328", + "SecretKey": "CHANGE_ME_TO_A_LONG_RANDOM_SECRET_KEY", + "AccessTokenMinutes": 10 + }, + "SeedSuperAdmin": { + "FullName": "Super Admin", + "Email": "admin@example.com", + "PhoneNumber": "09120000000", + "Password": "CHANGE_ME" + }, + "Payment": { + "TerminalId": "CHANGE_ME", + "SamanRedirectUrl": "https://localhost:44328/api/Payment/CallBack/0", + "VerifyTransactionUrl": "https://sandbox.banktest.ir/saman/sep.shaparak.ir/verifyTxnRandomSessionkey/ipg/VerifyTransaction", + "MerchantIdZarinPal": "CHANGE_ME", + "ZarinPalCallBackUrl": "https://localhost:44328/api/Payment/CallBack/1", + "ZarinPalVerifyUrl": "https://sandbox.zarinpal.com/pg/v4/payment/verify.json", + "ZarinPal_AutoVerify": false, + "ZarinPalCurrency": "IRT" + } +} diff --git a/appsettings.Development.json b/appsettings.Development.json deleted file mode 100644 index 0c208ae..0000000 --- a/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/appsettings.json b/appsettings.json deleted file mode 100644 index 10f68b8..0000000 --- a/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -}