From f7e21db88ad4e523ce418fe6d8ed7e40cae62905 Mon Sep 17 00:00:00 2001 From: MSuMshk <2039814060@qq.com> Date: Thu, 29 Jan 2026 03:28:29 +0000 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=20API=20=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TakeoutSaaS.sln | 30 --- .../Requests/FileUploadFormRequest.cs | 20 -- .../TakeoutSaaS.MiniApi/Controllers/.gitkeep | 1 - .../Controllers/AuthController.cs | 55 ------ .../Controllers/FilesController.cs | 54 ------ .../Controllers/HealthController.cs | 30 --- .../Controllers/MeController.cs | 43 ----- .../Controllers/MenusController.cs | 38 ---- .../Controllers/PickupSlotsController.cs | 31 --- .../Controllers/TablesController.cs | 35 ---- src/Api/TakeoutSaaS.MiniApi/Dockerfile | 12 -- src/Api/TakeoutSaaS.MiniApi/Program.cs | 176 ------------------ .../Properties/launchSettings.json | 12 -- .../TakeoutSaaS.MiniApi.csproj | Bin 4730 -> 0 bytes .../appsettings.Development.json | 175 ----------------- .../appsettings.Production.json | 175 ----------------- .../Controllers/DictionaryController.cs | 51 ----- .../Controllers/HealthController.cs | 30 --- src/Api/TakeoutSaaS.UserApi/Dockerfile | 12 -- src/Api/TakeoutSaaS.UserApi/Program.cs | 160 ---------------- .../Properties/launchSettings.json | 12 -- .../TakeoutSaaS.UserApi.csproj | Bin 4046 -> 0 bytes .../appsettings.Development.json | 78 -------- .../appsettings.Production.json | 78 -------- 24 files changed, 1308 deletions(-) delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Contracts/Requests/FileUploadFormRequest.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Controllers/.gitkeep delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Controllers/AuthController.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Controllers/FilesController.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Controllers/HealthController.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Controllers/MeController.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Controllers/MenusController.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Controllers/PickupSlotsController.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Controllers/TablesController.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Dockerfile delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Program.cs delete mode 100644 src/Api/TakeoutSaaS.MiniApi/Properties/launchSettings.json delete mode 100644 src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj delete mode 100644 src/Api/TakeoutSaaS.MiniApi/appsettings.Development.json delete mode 100644 src/Api/TakeoutSaaS.MiniApi/appsettings.Production.json delete mode 100644 src/Api/TakeoutSaaS.UserApi/Controllers/DictionaryController.cs delete mode 100644 src/Api/TakeoutSaaS.UserApi/Controllers/HealthController.cs delete mode 100644 src/Api/TakeoutSaaS.UserApi/Dockerfile delete mode 100644 src/Api/TakeoutSaaS.UserApi/Program.cs delete mode 100644 src/Api/TakeoutSaaS.UserApi/Properties/launchSettings.json delete mode 100644 src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj delete mode 100644 src/Api/TakeoutSaaS.UserApi/appsettings.Development.json delete mode 100644 src/Api/TakeoutSaaS.UserApi/appsettings.Production.json diff --git a/TakeoutSaaS.sln b/TakeoutSaaS.sln index 593dd42..b16635a 100644 --- a/TakeoutSaaS.sln +++ b/TakeoutSaaS.sln @@ -33,10 +33,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TakeoutSaaS.Module.Authoriz EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TakeoutSaaS.Module.Tenancy", "src\Modules\TakeoutSaaS.Module.Tenancy\TakeoutSaaS.Module.Tenancy.csproj", "{5B1DAF2B-C36C-4CB1-9452-81D5D6F79D38}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TakeoutSaaS.MiniApi", "src\Api\TakeoutSaaS.MiniApi\TakeoutSaaS.MiniApi.csproj", "{12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TakeoutSaaS.UserApi", "src\Api\TakeoutSaaS.UserApi\TakeoutSaaS.UserApi.csproj", "{1C0BCC51-AF18-44F3-A1E6-A693F74276B5}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gateway", "Gateway", "{6306A8FB-679E-111F-6585-8F70E0EE6013}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TakeoutSaaS.ApiGateway", "src\Gateway\TakeoutSaaS.ApiGateway\TakeoutSaaS.ApiGateway.csproj", "{A2620200-D487-49A7-ABAF-9B84951F81DD}" @@ -167,30 +163,6 @@ Global {5B1DAF2B-C36C-4CB1-9452-81D5D6F79D38}.Release|x64.Build.0 = Release|Any CPU {5B1DAF2B-C36C-4CB1-9452-81D5D6F79D38}.Release|x86.ActiveCfg = Release|Any CPU {5B1DAF2B-C36C-4CB1-9452-81D5D6F79D38}.Release|x86.Build.0 = Release|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Debug|x64.ActiveCfg = Debug|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Debug|x64.Build.0 = Debug|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Debug|x86.ActiveCfg = Debug|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Debug|x86.Build.0 = Debug|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Release|Any CPU.Build.0 = Release|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Release|x64.ActiveCfg = Release|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Release|x64.Build.0 = Release|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Release|x86.ActiveCfg = Release|Any CPU - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D}.Release|x86.Build.0 = Release|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Debug|x64.ActiveCfg = Debug|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Debug|x64.Build.0 = Debug|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Debug|x86.ActiveCfg = Debug|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Debug|x86.Build.0 = Debug|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Release|Any CPU.Build.0 = Release|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Release|x64.ActiveCfg = Release|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Release|x64.Build.0 = Release|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Release|x86.ActiveCfg = Release|Any CPU - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5}.Release|x86.Build.0 = Release|Any CPU {A2620200-D487-49A7-ABAF-9B84951F81DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A2620200-D487-49A7-ABAF-9B84951F81DD}.Debug|Any CPU.Build.0 = Debug|Any CPU {A2620200-D487-49A7-ABAF-9B84951F81DD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -330,8 +302,6 @@ Global {EC447DCF-ABFA-6E24-52A5-D7FD48A5C558} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {6CB8487D-5C74-487C-9D84-E57838BDA015} = {EC447DCF-ABFA-6E24-52A5-D7FD48A5C558} {5B1DAF2B-C36C-4CB1-9452-81D5D6F79D38} = {EC447DCF-ABFA-6E24-52A5-D7FD48A5C558} - {12ECF33A-D5E3-4F8B-A9D9-60F7F55B869D} = {81034408-37C8-1011-444E-4C15C2FADA8E} - {1C0BCC51-AF18-44F3-A1E6-A693F74276B5} = {81034408-37C8-1011-444E-4C15C2FADA8E} {6306A8FB-679E-111F-6585-8F70E0EE6013} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {A2620200-D487-49A7-ABAF-9B84951F81DD} = {6306A8FB-679E-111F-6585-8F70E0EE6013} {BBC99B58-ECA8-42C3-9070-9AA058D778D3} = {8D626EA8-CB54-BC41-363A-217881BEBA6E} diff --git a/src/Api/TakeoutSaaS.MiniApi/Contracts/Requests/FileUploadFormRequest.cs b/src/Api/TakeoutSaaS.MiniApi/Contracts/Requests/FileUploadFormRequest.cs deleted file mode 100644 index 8cc3e95..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Contracts/Requests/FileUploadFormRequest.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Microsoft.AspNetCore.Http; - -namespace TakeoutSaaS.MiniApi.Contracts.Requests; - -/// -/// 文件上传表单请求。 -/// -public sealed record FileUploadFormRequest -{ - /// - /// 上传文件。 - /// - [Required] - public required IFormFile File { get; init; } - /// - /// 上传类型。 - /// - public string? Type { get; init; } -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Controllers/.gitkeep b/src/Api/TakeoutSaaS.MiniApi/Controllers/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Controllers/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/Api/TakeoutSaaS.MiniApi/Controllers/AuthController.cs b/src/Api/TakeoutSaaS.MiniApi/Controllers/AuthController.cs deleted file mode 100644 index 11e7d10..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Controllers/AuthController.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using TakeoutSaaS.Application.Identity.Abstractions; -using TakeoutSaaS.Application.Identity.Contracts; -using TakeoutSaaS.Shared.Abstractions.Results; -using TakeoutSaaS.Shared.Web.Api; - -namespace TakeoutSaaS.MiniApi.Controllers; - -/// -/// 小程序登录认证 -/// -/// 提供小程序端的微信登录与 Token 刷新能力。 -/// 小程序认证服务 -[ApiVersion("1.0")] -[Authorize] -[Route("api/mini/v{version:apiVersion}/auth")] -public sealed class AuthController(IMiniAuthService authService) : BaseApiController -{ - /// - /// 微信登录 - /// - /// 微信登录请求。 - /// 取消标记。 - /// 包含访问令牌与刷新令牌的响应。 - [HttpPost("wechat/login")] - [AllowAnonymous] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] - public async Task> LoginWithWeChat([FromBody] WeChatLoginRequest request, CancellationToken cancellationToken) - { - // 1. 调用认证服务完成微信登录 - var response = await authService.LoginWithWeChatAsync(request, cancellationToken); - - // 2. 返回访问与刷新令牌 - return ApiResponse.Ok(response); - } - - /// - /// 刷新 Token - /// - /// 刷新令牌请求。 - /// 取消标记。 - /// 新的访问令牌与刷新令牌。 - [HttpPost("refresh")] - [AllowAnonymous] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] - public async Task> RefreshToken([FromBody] RefreshTokenRequest request, CancellationToken cancellationToken) - { - // 1. 调用认证服务刷新 Token - var response = await authService.RefreshTokenAsync(request, cancellationToken); - - // 2. 返回新的令牌 - return ApiResponse.Ok(response); - } -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Controllers/FilesController.cs b/src/Api/TakeoutSaaS.MiniApi/Controllers/FilesController.cs deleted file mode 100644 index c06c440..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Controllers/FilesController.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using TakeoutSaaS.Application.Storage.Abstractions; -using TakeoutSaaS.Application.Storage.Contracts; -using TakeoutSaaS.Application.Storage.Extensions; -using TakeoutSaaS.Shared.Abstractions.Constants; -using TakeoutSaaS.Shared.Abstractions.Results; -using TakeoutSaaS.Shared.Web.Api; -using TakeoutSaaS.MiniApi.Contracts.Requests; - -namespace TakeoutSaaS.MiniApi.Controllers; - -/// -/// 小程序文件上传。 -/// -[ApiVersion("1.0")] -[Authorize] -[Route("api/mini/v{version:apiVersion}/files")] -public sealed class FilesController(IFileStorageService fileStorageService) : BaseApiController -{ - /// - /// 上传图片或文件。 - /// - /// 表单请求,包含文件与类型。 - /// 取消标记。 - /// 上传结果,包含访问链接等信息。 - [HttpPost("upload")] - [Consumes("multipart/form-data")] - [RequestFormLimits(MultipartBodyLengthLimit = 30 * 1024 * 1024)] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status400BadRequest)] - public async Task> Upload([FromForm] FileUploadFormRequest request, CancellationToken cancellationToken) - { - // 1. 校验文件有效性 - if (request.File is null || request.File.Length == 0) - { - return ApiResponse.Error(ErrorCodes.BadRequest, "文件不能为空"); - } - // 2. 解析上传类型 - if (!UploadFileTypeParser.TryParse(request.Type, out var uploadType)) - { - return ApiResponse.Error(ErrorCodes.BadRequest, "上传类型不合法"); - } - // 3. 提取请求来源 - var origin = Request.Headers["Origin"].FirstOrDefault() ?? Request.Headers["Referer"].FirstOrDefault(); - await using var stream = request.File.OpenReadStream(); - // 4. 调用存储服务执行上传 - var result = await fileStorageService.UploadAsync( - new UploadFileRequest(uploadType, stream, request.File.FileName, request.File.ContentType ?? string.Empty, request.File.Length, origin), - cancellationToken); - // 5. 返回上传结果 - return ApiResponse.Ok(result); - } -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Controllers/HealthController.cs b/src/Api/TakeoutSaaS.MiniApi/Controllers/HealthController.cs deleted file mode 100644 index e19775c..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Controllers/HealthController.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using TakeoutSaaS.Shared.Abstractions.Results; -using TakeoutSaaS.Shared.Web.Api; - -namespace TakeoutSaaS.MiniApi.Controllers; - -/// -/// 小程序端 - 健康检查。 -/// -[ApiVersion("1.0")] -[AllowAnonymous] -[Route("api/mini/v{version:apiVersion}/[controller]")] -public class HealthController : BaseApiController -{ - /// - /// 获取服务健康状态。 - /// - /// 健康状态 - [HttpGet] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] - public ApiResponse Get() - { - // 1. 构造健康状态 - var payload = new { status = "OK", service = "MiniApi", time = DateTime.UtcNow }; - - // 2. 返回健康响应 - return ApiResponse.Ok(payload); - } -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Controllers/MeController.cs b/src/Api/TakeoutSaaS.MiniApi/Controllers/MeController.cs deleted file mode 100644 index 7411644..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Controllers/MeController.cs +++ /dev/null @@ -1,43 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using TakeoutSaaS.Application.Identity.Abstractions; -using TakeoutSaaS.Application.Identity.Contracts; -using TakeoutSaaS.Shared.Abstractions.Constants; -using TakeoutSaaS.Shared.Abstractions.Results; -using TakeoutSaaS.Shared.Web.Api; -using TakeoutSaaS.Shared.Web.Security; - -namespace TakeoutSaaS.MiniApi.Controllers; - -/// -/// 当前用户信息 -/// -/// 提供小程序端当前用户档案查询。 -/// 小程序认证服务 -[ApiVersion("1.0")] -[Authorize] -[Route("api/mini/v{version:apiVersion}/me")] -public sealed class MeController(IMiniAuthService authService) : BaseApiController -{ - /// - /// 获取用户档案 - /// - /// 取消标记。 - /// 当前用户档案信息。 - [HttpGet] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status401Unauthorized)] - public async Task> Get(CancellationToken cancellationToken) - { - // 1. 从 JWT 中解析用户标识 - var userId = User.GetUserId(); - if (userId == 0) - { - return ApiResponse.Error(ErrorCodes.Unauthorized, "Token 缺少有效的用户标识"); - } - - // 2. 查询用户档案并返回 - var profile = await authService.GetProfileAsync(userId, cancellationToken); - return ApiResponse.Ok(profile); - } -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Controllers/MenusController.cs b/src/Api/TakeoutSaaS.MiniApi/Controllers/MenusController.cs deleted file mode 100644 index 549db99..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Controllers/MenusController.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using MediatR; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using TakeoutSaaS.Application.App.Products.Dto; -using TakeoutSaaS.Application.App.Products.Queries; -using TakeoutSaaS.Shared.Abstractions.Results; -using TakeoutSaaS.Shared.Web.Api; - -namespace TakeoutSaaS.MiniApi.Controllers; - -/// -/// 小程序端菜单查询。 -/// -[ApiVersion("1.0")] -[Authorize] -[Route("api/mini/v{version:apiVersion}/stores/{storeId:long}/menu")] -public sealed class MenusController(IMediator mediator) : BaseApiController -{ - /// - /// 获取门店菜单(含分类与商品详情)。 - /// - [HttpGet] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] - public async Task> GetMenu(long storeId, [FromQuery] DateTime? updatedAfter, CancellationToken cancellationToken) - { - // 1. 组装查询 - var query = new GetStoreMenuQuery - { - StoreId = storeId, - UpdatedAfter = updatedAfter - }; - // 2. 拉取菜单 - var result = await mediator.Send(query, cancellationToken); - return ApiResponse.Ok(result); - } -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Controllers/PickupSlotsController.cs b/src/Api/TakeoutSaaS.MiniApi/Controllers/PickupSlotsController.cs deleted file mode 100644 index 66ce98d..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Controllers/PickupSlotsController.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using MediatR; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using TakeoutSaaS.Application.App.Stores.Dto; -using TakeoutSaaS.Application.App.Stores.Queries; -using TakeoutSaaS.Shared.Abstractions.Results; -using TakeoutSaaS.Shared.Web.Api; - -namespace TakeoutSaaS.MiniApi.Controllers; - -/// -/// 小程序端自提档期查询。 -/// -[ApiVersion("1.0")] -[Authorize] -[Route("api/mini/v{version:apiVersion}/stores/{storeId:long}/pickup-slots")] -public sealed class PickupSlotsController(IMediator mediator) : BaseApiController -{ - /// - /// 获取指定日期可用档期。 - /// - [HttpGet] - [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> GetSlots(long storeId, [FromQuery] DateTime date, CancellationToken cancellationToken) - { - var result = await mediator.Send(new GetAvailablePickupSlotsQuery { StoreId = storeId, Date = date }, cancellationToken); - return ApiResponse>.Ok(result); - } -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Controllers/TablesController.cs b/src/Api/TakeoutSaaS.MiniApi/Controllers/TablesController.cs deleted file mode 100644 index 504e35a..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Controllers/TablesController.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using MediatR; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using TakeoutSaaS.Application.App.Stores.Dto; -using TakeoutSaaS.Application.App.Stores.Queries; -using TakeoutSaaS.Shared.Abstractions.Constants; -using TakeoutSaaS.Shared.Abstractions.Results; -using TakeoutSaaS.Shared.Web.Api; - -namespace TakeoutSaaS.MiniApi.Controllers; - -/// -/// 桌码上下文。 -/// -[ApiVersion("1.0")] -[Authorize] -[Route("api/mini/v{version:apiVersion}/tables")] -public sealed class TablesController(IMediator mediator) : BaseApiController -{ - /// - /// 解析桌码并返回上下文。 - /// - [HttpGet("{code}/context")] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status404NotFound)] - public async Task> GetContext(string code, CancellationToken cancellationToken) - { - var result = await mediator.Send(new GetStoreTableContextQuery { TableCode = code }, cancellationToken); - return result is null - ? ApiResponse.Error(ErrorCodes.NotFound, "桌码不存在") - : ApiResponse.Ok(result); - } -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Dockerfile b/src/Api/TakeoutSaaS.MiniApi/Dockerfile deleted file mode 100644 index f737a92..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build -WORKDIR /src -COPY . . -RUN dotnet restore src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj -RUN dotnet publish src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj -c Release -o /app/publish - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 -WORKDIR /app -COPY --from=build /app/publish . -EXPOSE 7701 -ENV ASPNETCORE_URLS=http://+:7701 -ENTRYPOINT ["dotnet", "TakeoutSaaS.MiniApi.dll"] diff --git a/src/Api/TakeoutSaaS.MiniApi/Program.cs b/src/Api/TakeoutSaaS.MiniApi/Program.cs deleted file mode 100644 index 399f187..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Program.cs +++ /dev/null @@ -1,176 +0,0 @@ -using FluentValidation; -using Microsoft.AspNetCore.Cors.Infrastructure; -using Microsoft.Extensions.Caching.StackExchangeRedis; -using OpenTelemetry.Metrics; -using OpenTelemetry.Resources; -using OpenTelemetry.Trace; -using Serilog; -using TakeoutSaaS.Application.Messaging.Extensions; -using TakeoutSaaS.Application.Sms.Extensions; -using TakeoutSaaS.Application.Storage.Extensions; -using TakeoutSaaS.Module.Messaging.Extensions; -using TakeoutSaaS.Module.Sms.Extensions; -using TakeoutSaaS.Module.Storage.Extensions; -using TakeoutSaaS.Module.Tenancy.Extensions; -using TakeoutSaaS.Shared.Abstractions.Ids; -using TakeoutSaaS.Shared.Kernel.Ids; -using TakeoutSaaS.Shared.Web.Extensions; -using TakeoutSaaS.Shared.Web.Swagger; -using System.Reflection; - -// 1. 创建构建器与日志模板 -var builder = WebApplication.CreateBuilder(args); -const string logTemplate = "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} {Level:u3}] [TraceId:{TraceId}] [SpanId:{SpanId}] [Service:{Service}] {SourceContext} {Message:lj}{NewLine}{Exception}"; -var isDevelopment = builder.Environment.IsDevelopment(); - -// 2. 注册雪花 ID 生成器与 Serilog -builder.Services.AddSingleton(_ => new SnowflakeIdGenerator()); -builder.Host.UseSerilog((_, _, configuration) => -{ - configuration - .Enrich.FromLogContext() - .Enrich.WithProperty("Service", "MiniApi") - .WriteTo.Console(outputTemplate: logTemplate) - .WriteTo.File( - "logs/mini-api-.log", - rollingInterval: RollingInterval.Day, - retainedFileCountLimit: 7, - shared: true, - outputTemplate: logTemplate); -}); - -// 3. 注册通用 Web 能力,开发环境启用 Swagger -builder.Services.AddSharedWebCore(); -if (isDevelopment) -{ - builder.Services.AddSharedSwagger(options => - { - options.Title = "外卖SaaS - 小程序端"; - options.Description = "小程序 API 文档"; - options.EnableAuthorization = true; - }); -} -builder.Services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly()); - -// 4. 注册 Redis 分布式缓存,供验证码等功能使用 -var redisConnection = builder.Configuration.GetValue("Redis"); -builder.Services.AddStackExchangeRedisCache(options => -{ - options.Configuration = redisConnection; -}); - -// 4. 注册多租户与业务模块 -builder.Services.AddTenantResolution(builder.Configuration); -builder.Services.AddStorageModule(builder.Configuration); -builder.Services.AddStorageApplication(); -builder.Services.AddSmsModule(builder.Configuration); -builder.Services.AddSmsApplication(builder.Configuration); -builder.Services.AddMessagingModule(builder.Configuration); -builder.Services.AddMessagingApplication(); -builder.Services.AddHealthChecks(); - -// 5. 配置 OpenTelemetry 采集 -var otelSection = builder.Configuration.GetSection("Otel"); -var otelEndpoint = otelSection.GetValue("Endpoint"); -var useConsoleExporter = otelSection.GetValue("UseConsoleExporter") ?? builder.Environment.IsDevelopment(); -builder.Services.AddOpenTelemetry() - .ConfigureResource(resource => resource.AddService( - serviceName: "TakeoutSaaS.MiniApi", - serviceVersion: "1.0.0", - serviceInstanceId: Environment.MachineName)) - .WithTracing(tracing => - { - tracing - .SetSampler(new ParentBasedSampler(new AlwaysOnSampler())) - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddEntityFrameworkCoreInstrumentation(); - - if (!string.IsNullOrWhiteSpace(otelEndpoint)) - { - tracing.AddOtlpExporter(exporter => - { - exporter.Endpoint = new Uri(otelEndpoint); - }); - } - - if (useConsoleExporter) - { - tracing.AddConsoleExporter(); - } - }) - .WithMetrics(metrics => - { - metrics - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddRuntimeInstrumentation() - .AddPrometheusExporter(); - - if (!string.IsNullOrWhiteSpace(otelEndpoint)) - { - metrics.AddOtlpExporter(exporter => - { - exporter.Endpoint = new Uri(otelEndpoint); - }); - } - - if (useConsoleExporter) - { - metrics.AddConsoleExporter(); - } - }); - -// 6. 配置 CORS -var miniOrigins = ResolveCorsOrigins(builder.Configuration, "Cors:Mini"); -builder.Services.AddCors(options => -{ - options.AddPolicy("MiniApiCors", policy => - { - ConfigureCorsPolicy(policy, miniOrigins); - }); -}); - -// 7. 构建应用并配置中间件管道 -var app = builder.Build(); - -app.UseCors("MiniApiCors"); -app.UseTenantResolution(); -app.UseSharedWebCore(); -if (app.Environment.IsDevelopment()) -{ - app.UseSharedSwagger(); -} - -app.MapHealthChecks("/healthz"); -app.MapPrometheusScrapingEndpoint(); -app.MapControllers(); -app.Run(); - -// 8. 解析配置中的 CORS 域名 -static string[] ResolveCorsOrigins(IConfiguration configuration, string sectionKey) -{ - var origins = configuration.GetSection(sectionKey).Get(); - return origins? - .Where(origin => !string.IsNullOrWhiteSpace(origin)) - .Distinct(StringComparer.OrdinalIgnoreCase) - .ToArray() ?? []; -} - -// 9. 构建 CORS 策略 -static void ConfigureCorsPolicy(CorsPolicyBuilder policy, string[] origins) -{ - if (origins.Length == 0) - { - policy.AllowAnyOrigin(); - } - else - { - policy.WithOrigins(origins) - .AllowCredentials(); - } - - policy - .AllowAnyHeader() - .AllowAnyMethod(); -} diff --git a/src/Api/TakeoutSaaS.MiniApi/Properties/launchSettings.json b/src/Api/TakeoutSaaS.MiniApi/Properties/launchSettings.json deleted file mode 100644 index a89a59c..0000000 --- a/src/Api/TakeoutSaaS.MiniApi/Properties/launchSettings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "profiles": { - "TakeoutSaaS.MiniApi": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:2681" - } - } -} \ No newline at end of file diff --git a/src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj b/src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj deleted file mode 100644 index 653f6a017e443cb8945826651688af1fcb3dff6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4730 zcmdUzUr!oQ5XI-&q~C$`-L;ygPgJ9=|I%oUQ2WBm3X5712<*1y%h&$Sy{-$$u7K2R zLttU=%-oqXXXegw|EFp@_S^2PV-@>pkqvBUH`cSReYCf>X@R}tT4AMYP42f??b?-F zO)R#ytt0gTnH}4H#*$=du$W*L`-mTL)LBHu%he)(p4eZqRtKX>^Q)WZ6eUhCb22Ls%@}; zv4)RK*8L8rmVj9YtxG;5Yzm?Dmn=S&n6`0@SADdF$PNB{bJz>r;S77l($lsNoj=NF zh~>yW6MGY%g+rG+y6f|Nz|}_(Bb~4=@0Zcfe2@jtf#>p7wPWYsU12`Y@V80kLYLEX zd~EX`xLBHeRHYjzWA< zeap{s-ib?H8T{?0`txad z8h9BRyX=t8sM$P_@9ApfUnjN`GS?!XszPNiFX!WOft@(%A=$fv37Q+0*DQ0KH71Yw zQSs8{jz_11o`>{YIB(8sRDY&b=J+)A>It+ -/// 字典查询接口。 -/// -[ApiVersion("1.0")] -[Authorize] -[Route("api/user/v{version:apiVersion}/dictionary")] -public sealed class DictionaryController(DictionaryQueryService queryService) : BaseApiController -{ - /// - /// 获取指定字典分组的合并结果。 - /// - [HttpGet("{code}")] - [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> GetByCode(string code, CancellationToken cancellationToken) - { - Response.Headers[HeaderNames.CacheControl] = "max-age=1800"; - var result = await queryService.GetMergedDictionaryAsync(code, cancellationToken); - return ApiResponse>.Ok(result); - } - - /// - /// 批量获取字典分组。 - /// - [HttpPost("batch")] - [ProducesResponseType(typeof(ApiResponse>>), StatusCodes.Status200OK)] - public async Task>>> BatchGet( - [FromBody] DictionaryBatchQueryRequest request, - CancellationToken cancellationToken) - { - if (request.Codes.Count > 20) - { - throw new BusinessException(ErrorCodes.ValidationFailed, "最多支持 20 个字典编码"); - } - - var result = await queryService.BatchGetDictionariesAsync(request.Codes, cancellationToken); - return ApiResponse>>.Ok(result); - } -} diff --git a/src/Api/TakeoutSaaS.UserApi/Controllers/HealthController.cs b/src/Api/TakeoutSaaS.UserApi/Controllers/HealthController.cs deleted file mode 100644 index 08fe92b..0000000 --- a/src/Api/TakeoutSaaS.UserApi/Controllers/HealthController.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using TakeoutSaaS.Shared.Abstractions.Results; -using TakeoutSaaS.Shared.Web.Api; - -namespace TakeoutSaaS.UserApi.Controllers; - -/// -/// 用户端 - 健康检查。 -/// -[ApiVersion("1.0")] -[AllowAnonymous] -[Route("api/user/v{version:apiVersion}/[controller]")] -public class HealthController : BaseApiController -{ - /// - /// 获取服务健康状态。 - /// - /// 健康状态 - [HttpGet] - [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] - public ApiResponse Get() - { - // 1. 构造健康状态 - var payload = new { status = "OK", service = "UserApi", time = DateTime.UtcNow }; - - // 2. 返回健康响应 - return ApiResponse.Ok(payload); - } -} diff --git a/src/Api/TakeoutSaaS.UserApi/Dockerfile b/src/Api/TakeoutSaaS.UserApi/Dockerfile deleted file mode 100644 index 22e0ab8..0000000 --- a/src/Api/TakeoutSaaS.UserApi/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build -WORKDIR /src -COPY . . -RUN dotnet restore src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj -RUN dotnet publish src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj -c Release -o /app/publish - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 -WORKDIR /app -COPY --from=build /app/publish . -EXPOSE 7901 -ENV ASPNETCORE_URLS=http://+:7901 -ENTRYPOINT ["dotnet", "TakeoutSaaS.UserApi.dll"] diff --git a/src/Api/TakeoutSaaS.UserApi/Program.cs b/src/Api/TakeoutSaaS.UserApi/Program.cs deleted file mode 100644 index 25bd2a7..0000000 --- a/src/Api/TakeoutSaaS.UserApi/Program.cs +++ /dev/null @@ -1,160 +0,0 @@ -using Microsoft.AspNetCore.Cors.Infrastructure; -using OpenTelemetry.Metrics; -using OpenTelemetry.Resources; -using OpenTelemetry.Trace; -using Serilog; -using TakeoutSaaS.Infrastructure.Identity.Extensions; -using TakeoutSaaS.Module.Dictionary.Extensions; -using TakeoutSaaS.Module.Tenancy.Extensions; -using TakeoutSaaS.Shared.Abstractions.Ids; -using TakeoutSaaS.Shared.Kernel.Ids; -using TakeoutSaaS.Shared.Web.Extensions; -using TakeoutSaaS.Shared.Web.Swagger; - -// 1. 创建构建器与日志模板 -var builder = WebApplication.CreateBuilder(args); -const string logTemplate = "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} {Level:u3}] [TraceId:{TraceId}] [SpanId:{SpanId}] [Service:{Service}] {SourceContext} {Message:lj}{NewLine}{Exception}"; -var isDevelopment = builder.Environment.IsDevelopment(); - -// 2. 注册雪花 ID 生成器与 Serilog -builder.Services.AddSingleton(_ => new SnowflakeIdGenerator()); -builder.Host.UseSerilog((_, _, configuration) => -{ - configuration - .Enrich.FromLogContext() - .Enrich.WithProperty("Service", "UserApi") - .WriteTo.Console(outputTemplate: logTemplate) - .WriteTo.File( - "logs/user-api-.log", - rollingInterval: RollingInterval.Day, - retainedFileCountLimit: 7, - shared: true, - outputTemplate: logTemplate); -}); - -// 3. 注册通用 Web 能力,开发环境启用 Swagger -builder.Services.AddSharedWebCore(); -if (isDevelopment) -{ - builder.Services.AddSharedSwagger(options => - { - options.Title = "外卖SaaS - 用户端"; - options.Description = "C 端用户 API 文档"; - options.EnableAuthorization = true; - }); -} - -// 4. 注册多租户与健康检查 -builder.Services.AddTenantResolution(builder.Configuration); -builder.Services.AddJwtAuthentication(builder.Configuration); -builder.Services.AddAuthorization(); -builder.Services.AddDictionaryModule(builder.Configuration); -builder.Services.AddHealthChecks(); - -// 5. 配置 OpenTelemetry 采集 -var otelSection = builder.Configuration.GetSection("Otel"); -var otelEndpoint = otelSection.GetValue("Endpoint"); -var useConsoleExporter = otelSection.GetValue("UseConsoleExporter") ?? builder.Environment.IsDevelopment(); -builder.Services.AddOpenTelemetry() - .ConfigureResource(resource => resource.AddService( - serviceName: "TakeoutSaaS.UserApi", - serviceVersion: "1.0.0", - serviceInstanceId: Environment.MachineName)) - .WithTracing(tracing => - { - tracing - .SetSampler(new ParentBasedSampler(new AlwaysOnSampler())) - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddEntityFrameworkCoreInstrumentation(); - - if (!string.IsNullOrWhiteSpace(otelEndpoint)) - { - tracing.AddOtlpExporter(exporter => - { - exporter.Endpoint = new Uri(otelEndpoint); - }); - } - - if (useConsoleExporter) - { - tracing.AddConsoleExporter(); - } - }) - .WithMetrics(metrics => - { - metrics - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddRuntimeInstrumentation() - .AddPrometheusExporter(); - - if (!string.IsNullOrWhiteSpace(otelEndpoint)) - { - metrics.AddOtlpExporter(exporter => - { - exporter.Endpoint = new Uri(otelEndpoint); - }); - } - - if (useConsoleExporter) - { - metrics.AddConsoleExporter(); - } - }); - -// 6. 配置 CORS -var userOrigins = ResolveCorsOrigins(builder.Configuration, "Cors:User"); -builder.Services.AddCors(options => -{ - options.AddPolicy("UserApiCors", policy => - { - ConfigureCorsPolicy(policy, userOrigins); - }); -}); - -// 7. 构建应用并配置中间件管道 -var app = builder.Build(); - -app.UseCors("UserApiCors"); -app.UseTenantResolution(); -app.UseSharedWebCore(); -app.UseAuthentication(); -app.UseAuthorization(); -if (app.Environment.IsDevelopment()) -{ - app.UseSharedSwagger(); -} - -app.MapHealthChecks("/healthz"); -app.MapPrometheusScrapingEndpoint(); -app.MapControllers(); -app.Run(); - -// 8. 解析配置中的 CORS 域名 -static string[] ResolveCorsOrigins(IConfiguration configuration, string sectionKey) -{ - var origins = configuration.GetSection(sectionKey).Get(); - return origins? - .Where(origin => !string.IsNullOrWhiteSpace(origin)) - .Distinct(StringComparer.OrdinalIgnoreCase) - .ToArray() ?? []; -} - -// 9. 构建 CORS 策略 -static void ConfigureCorsPolicy(CorsPolicyBuilder policy, string[] origins) -{ - if (origins.Length == 0) - { - policy.AllowAnyOrigin(); - } - else - { - policy.WithOrigins(origins) - .AllowCredentials(); - } - - policy - .AllowAnyHeader() - .AllowAnyMethod(); -} diff --git a/src/Api/TakeoutSaaS.UserApi/Properties/launchSettings.json b/src/Api/TakeoutSaaS.UserApi/Properties/launchSettings.json deleted file mode 100644 index bb5c543..0000000 --- a/src/Api/TakeoutSaaS.UserApi/Properties/launchSettings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "profiles": { - "TakeoutSaaS.UserApi": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:2682" - } - } -} \ No newline at end of file diff --git a/src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj b/src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj deleted file mode 100644 index ed127bdbdd8294cd7f70943bbbf006bf6b52629c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4046 zcmdUyUvtt>5XJY|8NUPLdsA^7pO8+g^v^i0or3zpOA4W_P+&r$^5w0+bMM4}kO(cU zI1CBgySq8Nd+zS$?q|*R?1$ajz$*65B8zQeH#V}Ny|ouswZL9-udp+;4(nZZhj!(5 zQ%kI8J4n4jX3y&O+@4v@&apDGujq7;s8|!NzSB5GyW@5zNc7kZ?93Y0;_jsa`-0vj z_Pn(U`kBSC!O!iOq7A58_oPcPIt|D;*mQOC?is@vDwQ}is%SR52au{Ma zviEr10k0x3WJRk!w};$4`UL5eeIdV(euhB$KJVpOs@aLdc3YCebC7n(R_OA00lFUF z*m=?6TET|cH~@K<|6*#B9EU{kn!Kb=TmA*M&)S%rDC_SW3nIto&#e5(b#WqR{O$s` z?uSdyQM5;RvpycrQ=P!g;Q2^2#D*4EMM&Hb2c}?aPzl7Fp<|?Kz=YLfkWX0m=Uzyb z#ZHlXjkK>8kB?Oh5Gt{Ek>BgZdE2lb<5xnS{+C!c$c6Z!%Dh-}|90x~=j0FdmdfDFYldLwk;XaNgcatrt=yTui|sSC` zn~{GC&(u$Q#7;Am@2Z;JQ!+@6&Sn5H$cXA`uzI(?At z_Ij$>Q13KD{9WD0d9BCwE~`!Xy(ov}^(n7Vvo)%i5%X2*196Ipk|ybP2^WgB%A-_P N{qy&&>^-|~zX18*trY+O diff --git a/src/Api/TakeoutSaaS.UserApi/appsettings.Development.json b/src/Api/TakeoutSaaS.UserApi/appsettings.Development.json deleted file mode 100644 index 0fe565e..0000000 --- a/src/Api/TakeoutSaaS.UserApi/appsettings.Development.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "Database": { - "DataSources": { - "AppDatabase": { - "Write": "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", - "Reads": [ - "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" - ], - "CommandTimeoutSeconds": 30, - "MaxRetryCount": 3, - "MaxRetryDelaySeconds": 5 - }, - "IdentityDatabase": { - "Write": "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", - "Reads": [ - "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" - ], - "CommandTimeoutSeconds": 30, - "MaxRetryCount": 3, - "MaxRetryDelaySeconds": 5 - }, - "DictionaryDatabase": { - "Write": "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", - "Reads": [ - "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" - ], - "CommandTimeoutSeconds": 30, - "MaxRetryCount": 3, - "MaxRetryDelaySeconds": 5 - }, - "LogsDatabase": { - "Write": "Host=120.53.222.17;Port=5432;Database=takeout_logs_db;Username=logs_user;Password=Logs112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", - "Reads": [ - "Host=120.53.222.17;Port=5432;Database=takeout_logs_db;Username=logs_user;Password=Logs112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" - ], - "CommandTimeoutSeconds": 30, - "MaxRetryCount": 3, - "MaxRetryDelaySeconds": 5 - } - } - }, - "Redis": "49.232.6.45:6379,password=MsuMshk112233,abortConnect=false", - "Identity": { - "Jwt": { - "Issuer": "takeout-saas", - "Audience": "takeout-saas-clients", - "Secret": "psZEx_O##]Mq(W.1$?8Aia*LM03sXGGx", - "AccessTokenExpirationMinutes": 120, - "RefreshTokenExpirationMinutes": 10080 - }, - "LoginRateLimit": { - "WindowSeconds": 60, - "MaxAttempts": 5 - }, - "RefreshTokenStore": { - "Prefix": "identity:refresh:" - } - }, - "Dictionary": { - "Cache": { - "SlidingExpiration": "00:30:00" - } - }, - "Tenancy": { - "TenantIdHeaderName": "X-Tenant-Id", - "TenantCodeHeaderName": "X-Tenant-Code", - "IgnoredPaths": [ - "/health" - ], - "RootDomain": "" - }, - "Otel": { - "Endpoint": "", - "Sampling": "ParentBasedAlwaysOn", - "UseConsoleExporter": true - } -} - diff --git a/src/Api/TakeoutSaaS.UserApi/appsettings.Production.json b/src/Api/TakeoutSaaS.UserApi/appsettings.Production.json deleted file mode 100644 index 0fe565e..0000000 --- a/src/Api/TakeoutSaaS.UserApi/appsettings.Production.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "Database": { - "DataSources": { - "AppDatabase": { - "Write": "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", - "Reads": [ - "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" - ], - "CommandTimeoutSeconds": 30, - "MaxRetryCount": 3, - "MaxRetryDelaySeconds": 5 - }, - "IdentityDatabase": { - "Write": "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", - "Reads": [ - "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" - ], - "CommandTimeoutSeconds": 30, - "MaxRetryCount": 3, - "MaxRetryDelaySeconds": 5 - }, - "DictionaryDatabase": { - "Write": "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", - "Reads": [ - "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" - ], - "CommandTimeoutSeconds": 30, - "MaxRetryCount": 3, - "MaxRetryDelaySeconds": 5 - }, - "LogsDatabase": { - "Write": "Host=120.53.222.17;Port=5432;Database=takeout_logs_db;Username=logs_user;Password=Logs112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", - "Reads": [ - "Host=120.53.222.17;Port=5432;Database=takeout_logs_db;Username=logs_user;Password=Logs112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" - ], - "CommandTimeoutSeconds": 30, - "MaxRetryCount": 3, - "MaxRetryDelaySeconds": 5 - } - } - }, - "Redis": "49.232.6.45:6379,password=MsuMshk112233,abortConnect=false", - "Identity": { - "Jwt": { - "Issuer": "takeout-saas", - "Audience": "takeout-saas-clients", - "Secret": "psZEx_O##]Mq(W.1$?8Aia*LM03sXGGx", - "AccessTokenExpirationMinutes": 120, - "RefreshTokenExpirationMinutes": 10080 - }, - "LoginRateLimit": { - "WindowSeconds": 60, - "MaxAttempts": 5 - }, - "RefreshTokenStore": { - "Prefix": "identity:refresh:" - } - }, - "Dictionary": { - "Cache": { - "SlidingExpiration": "00:30:00" - } - }, - "Tenancy": { - "TenantIdHeaderName": "X-Tenant-Id", - "TenantCodeHeaderName": "X-Tenant-Code", - "IgnoredPaths": [ - "/health" - ], - "RootDomain": "" - }, - "Otel": { - "Endpoint": "", - "Sampling": "ParentBasedAlwaysOn", - "UseConsoleExporter": true - } -} -