初始化项目
This commit is contained in:
parent
bd298bb464
commit
da39817b89
|
|
@ -26,12 +26,8 @@
|
|||
]
|
||||
},
|
||||
"sqlserver": {
|
||||
"command": "uvx",
|
||||
"args": [
|
||||
"--from",
|
||||
"mssql-mcp-server",
|
||||
"mssql_mcp_server"
|
||||
],
|
||||
"command": "node",
|
||||
"args": ["server/scripts/mssql-mcp-server/index.js"],
|
||||
"env": {
|
||||
"MSSQL_SERVER": "192.168.195.15",
|
||||
"MSSQL_PORT": "1433",
|
||||
|
|
@ -39,16 +35,7 @@
|
|||
"MSSQL_PASSWORD": "Dbt@com@123",
|
||||
"MSSQL_DATABASE": "honey_box"
|
||||
},
|
||||
"autoApprove": [
|
||||
"list_tables",
|
||||
"describe_table",
|
||||
"read_query",
|
||||
"write_query",
|
||||
"create_table",
|
||||
"alter_table",
|
||||
"drop_table",
|
||||
"execute_sql"
|
||||
]
|
||||
"autoApprove": ["execute_sql"]
|
||||
}
|
||||
}
|
||||
}
|
||||
240
.kiro/specs/api-infrastructure/design.md
Normal file
240
.kiro/specs/api-infrastructure/design.md
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
# Design Document
|
||||
|
||||
## Overview
|
||||
|
||||
本设计文档描述 HoneyBox 抽奖系统 .NET 8 Web API 项目基础架构的技术实现方案。采用四层架构设计,使用 Autofac 进行依赖注入,Mapster 进行对象映射,Serilog 进行日志记录,Redis 进行分布式缓存。
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ HoneyBox.Api │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
|
||||
│ │ Controllers │ │ Filters │ │ Middlewares │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌───────────────┴───────────────┐
|
||||
▼ ▼
|
||||
┌─────────────────────────┐ ┌─────────────────────────────┐
|
||||
│ HoneyBox.Core │ │ HoneyBox.Model │
|
||||
│ ┌─────────────────┐ │ │ ┌─────────────────────┐ │
|
||||
│ │ Services │ │ │ │ Entities │ │
|
||||
│ ├─────────────────┤ │ │ ├─────────────────────┤ │
|
||||
│ │ Interfaces │ │ │ │ Models │ │
|
||||
│ ├─────────────────┤ │ │ ├─────────────────────┤ │
|
||||
│ │ Mappings │ │ │ │ Data │ │
|
||||
│ └─────────────────┘ │ │ ├─────────────────────┤ │
|
||||
└─────────────────────────┘ │ │ Base │ │
|
||||
│ │ └─────────────────────┘ │
|
||||
▼ └─────────────────────────────┘
|
||||
┌─────────────────────────┐
|
||||
│ HoneyBox.Infrastructure │
|
||||
│ ┌─────────────────┐ │
|
||||
│ │ Cache │ │
|
||||
│ ├─────────────────┤ │
|
||||
│ │ External │ │
|
||||
│ ├─────────────────┤ │
|
||||
│ │ Modules │ │
|
||||
│ └─────────────────┘ │
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
### 依赖关系
|
||||
|
||||
```
|
||||
Api → Core, Model
|
||||
Core → Model, Infrastructure
|
||||
Infrastructure → 无依赖
|
||||
Model → 无依赖
|
||||
```
|
||||
|
||||
## Components and Interfaces
|
||||
|
||||
### HoneyBox.Model 组件
|
||||
|
||||
#### ApiResponse 基类
|
||||
```csharp
|
||||
// Base/ApiResponse.cs
|
||||
public class ApiResponse
|
||||
{
|
||||
public int Code { get; set; }
|
||||
public string Msg { get; set; } = string.Empty;
|
||||
|
||||
public static ApiResponse Success(string msg = "success");
|
||||
public static ApiResponse Fail(string msg, int code = -1);
|
||||
}
|
||||
|
||||
public class ApiResponse<T> : ApiResponse
|
||||
{
|
||||
public T? Data { get; set; }
|
||||
|
||||
public static ApiResponse<T> Success(T data, string msg = "success");
|
||||
public new static ApiResponse<T> Fail(string msg, int code = -1);
|
||||
}
|
||||
```
|
||||
|
||||
#### HoneyBoxDbContext
|
||||
```csharp
|
||||
// Data/HoneyBoxDbContext.cs
|
||||
public partial class HoneyBoxDbContext : DbContext
|
||||
{
|
||||
public HoneyBoxDbContext(DbContextOptions<HoneyBoxDbContext> options);
|
||||
|
||||
public virtual DbSet<User> Users { get; set; }
|
||||
public virtual DbSet<Goods> Goods { get; set; }
|
||||
public virtual DbSet<Order> Orders { get; set; }
|
||||
// ... 其他 DbSet
|
||||
}
|
||||
```
|
||||
|
||||
### HoneyBox.Infrastructure 组件
|
||||
|
||||
#### ICacheService 接口
|
||||
```csharp
|
||||
// Cache/ICacheService.cs
|
||||
public interface ICacheService
|
||||
{
|
||||
Task<T?> GetAsync<T>(string key);
|
||||
Task SetAsync<T>(string key, T value, TimeSpan? expiry = null);
|
||||
Task RemoveAsync(string key);
|
||||
Task<bool> ExistsAsync(string key);
|
||||
Task<bool> IsConnectedAsync();
|
||||
}
|
||||
```
|
||||
|
||||
#### RedisCacheService 实现
|
||||
```csharp
|
||||
// Cache/RedisCacheService.cs
|
||||
public class RedisCacheService : ICacheService
|
||||
{
|
||||
private readonly IDatabase _database;
|
||||
private readonly ConnectionMultiplexer _connection;
|
||||
|
||||
public RedisCacheService(IConfiguration configuration);
|
||||
public Task<T?> GetAsync<T>(string key);
|
||||
public Task SetAsync<T>(string key, T value, TimeSpan? expiry = null);
|
||||
public Task RemoveAsync(string key);
|
||||
public Task<bool> ExistsAsync(string key);
|
||||
public Task<bool> IsConnectedAsync();
|
||||
}
|
||||
```
|
||||
|
||||
#### Autofac 模块
|
||||
```csharp
|
||||
// Modules/ServiceModule.cs
|
||||
public class ServiceModule : Module
|
||||
{
|
||||
protected override void Load(ContainerBuilder builder);
|
||||
}
|
||||
|
||||
// Modules/InfrastructureModule.cs
|
||||
public class InfrastructureModule : Module
|
||||
{
|
||||
protected override void Load(ContainerBuilder builder);
|
||||
}
|
||||
```
|
||||
|
||||
### HoneyBox.Core 组件
|
||||
|
||||
#### MappingConfig
|
||||
```csharp
|
||||
// Mappings/MappingConfig.cs
|
||||
public static class MappingConfig
|
||||
{
|
||||
public static void Configure();
|
||||
}
|
||||
```
|
||||
|
||||
### HoneyBox.Api 组件
|
||||
|
||||
#### GlobalExceptionFilter
|
||||
```csharp
|
||||
// Filters/GlobalExceptionFilter.cs
|
||||
public class GlobalExceptionFilter : IExceptionFilter
|
||||
{
|
||||
public GlobalExceptionFilter(ILogger<GlobalExceptionFilter> logger);
|
||||
public void OnException(ExceptionContext context);
|
||||
}
|
||||
```
|
||||
|
||||
#### HealthController
|
||||
```csharp
|
||||
// Controllers/HealthController.cs
|
||||
[ApiController]
|
||||
[Route("api/[controller]")]
|
||||
public class HealthController : ControllerBase
|
||||
{
|
||||
public HealthController(HoneyBoxDbContext dbContext, ICacheService cacheService);
|
||||
|
||||
[HttpGet]
|
||||
public Task<ApiResponse<HealthCheckData>> GetHealth();
|
||||
}
|
||||
```
|
||||
|
||||
## Data Models
|
||||
|
||||
### 健康检查响应模型
|
||||
```csharp
|
||||
public class HealthCheckData
|
||||
{
|
||||
public string Status { get; set; } = string.Empty;
|
||||
public string Database { get; set; } = string.Empty;
|
||||
public string Redis { get; set; } = string.Empty;
|
||||
public DateTime Timestamp { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### 统一响应格式
|
||||
所有 API 接口返回格式:
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"msg": "success",
|
||||
"data": { ... }
|
||||
}
|
||||
```
|
||||
|
||||
## Correctness Properties
|
||||
|
||||
*A property is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.*
|
||||
|
||||
由于本阶段主要是基础架构搭建,大部分验收标准是结构性检查(文件是否存在、配置是否正确),属于示例测试而非属性测试。以下是可以进行属性测试的场景:
|
||||
|
||||
### Property 1: ApiResponse 格式一致性
|
||||
*For any* API 响应,返回的 JSON 结构 SHALL 始终包含 code、msg 字段,当有数据时包含 data 字段
|
||||
**Validates: Requirements 6.4**
|
||||
|
||||
### Property 2: 缓存读写一致性
|
||||
*For any* 缓存键值对,写入后立即读取 SHALL 返回相同的值
|
||||
**Validates: Requirements 3.5**
|
||||
|
||||
## Error Handling
|
||||
|
||||
### 全局异常处理策略
|
||||
1. 所有未捕获异常由 GlobalExceptionFilter 统一处理
|
||||
2. 异常信息记录到日志(Serilog)
|
||||
3. 返回统一格式的错误响应:`{ "code": 500, "msg": "服务器内部错误" }`
|
||||
4. 开发环境可返回详细错误信息,生产环境隐藏敏感信息
|
||||
|
||||
### 连接失败处理
|
||||
1. 数据库连接失败:健康检查返回 Database: "Disconnected"
|
||||
2. Redis 连接失败:健康检查返回 Redis: "Disconnected",但不影响应用启动
|
||||
|
||||
## Testing Strategy
|
||||
|
||||
### 验证方式
|
||||
由于本阶段是基础架构搭建,主要通过以下方式验证:
|
||||
|
||||
1. **编译验证**:`dotnet build` 确保项目能正常编译
|
||||
2. **运行验证**:启动应用,访问 Swagger 文档
|
||||
3. **健康检查验证**:调用 `/api/health` 接口验证数据库和 Redis 连接
|
||||
4. **日志验证**:检查控制台和日志文件输出
|
||||
|
||||
### 手动测试清单
|
||||
- [ ] 解决方案能正常编译
|
||||
- [ ] 应用能正常启动
|
||||
- [ ] Swagger 文档可访问 (http://localhost:5000/swagger)
|
||||
- [ ] 健康检查接口返回正确格式
|
||||
- [ ] 日志输出到控制台
|
||||
- [ ] 日志输出到文件 (logs/log-*.txt)
|
||||
92
.kiro/specs/api-infrastructure/requirements.md
Normal file
92
.kiro/specs/api-infrastructure/requirements.md
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
# Requirements Document
|
||||
|
||||
## Introduction
|
||||
|
||||
本规格文档定义了 HoneyBox 抽奖系统 .NET 8 Web API 项目基础架构搭建的需求。目标是建立一个完整的项目结构,包含四层架构(Api、Core、Infrastructure、Model),配置好所有基础设施(数据库、缓存、日志、依赖注入等),为后续业务开发提供稳定的技术基础。
|
||||
|
||||
## Glossary
|
||||
|
||||
- **HoneyBox_Api**: Web API 入口层,包含控制器、中间件、过滤器
|
||||
- **HoneyBox_Core**: 核心业务层,包含服务实现、接口定义、映射配置
|
||||
- **HoneyBox_Infrastructure**: 基础设施层,包含 Redis 缓存、外部服务集成、Autofac 模块
|
||||
- **HoneyBox_Model**: 数据模型层,包含数据库实体、DTO、DbContext、统一响应基类
|
||||
- **ApiResponse**: 统一响应格式基类,所有接口返回格式一致
|
||||
- **Mapster**: 高性能对象映射框架
|
||||
- **Autofac**: 依赖注入容器,支持模块化注册
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement 1: 项目结构搭建
|
||||
|
||||
**User Story:** As a 开发者, I want 创建标准的四层项目结构, so that 代码组织清晰、职责分离明确。
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE HoneyBox_Solution SHALL 包含四个项目:HoneyBox.Api、HoneyBox.Model、HoneyBox.Core、HoneyBox.Infrastructure
|
||||
2. THE HoneyBox_Api SHALL 依赖 HoneyBox.Core 和 HoneyBox.Model
|
||||
3. THE HoneyBox_Core SHALL 依赖 HoneyBox.Model 和 HoneyBox.Infrastructure
|
||||
4. THE HoneyBox_Infrastructure SHALL 不依赖任何项目内部模块
|
||||
5. THE HoneyBox_Model SHALL 不依赖任何项目内部模块
|
||||
6. WHEN 项目创建完成 THEN 解决方案 SHALL 能够正常编译
|
||||
|
||||
### Requirement 2: 数据模型层配置
|
||||
|
||||
**User Story:** As a 开发者, I want 配置数据模型层连接 SQL Server 数据库, so that 能够访问已迁移的业务数据。
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE HoneyBox_Model SHALL 包含 EF Core SQL Server 依赖包
|
||||
2. THE HoneyBox_Model SHALL 包含从数据库生成的实体类(Entities 目录)
|
||||
3. THE HoneyBox_Model SHALL 包含 HoneyBoxDbContext 类(Data 目录)
|
||||
4. THE HoneyBox_Model SHALL 包含统一响应基类 ApiResponse(Base 目录)
|
||||
5. THE HoneyBox_Model SHALL 包含 DTO 模型结构(Models 目录,按控制器分文件夹)
|
||||
6. WHEN 配置完成 THEN DbContext SHALL 能够连接到 SQL Server 数据库
|
||||
|
||||
### Requirement 3: 基础设施层配置
|
||||
|
||||
**User Story:** As a 开发者, I want 配置基础设施层提供外部服务支持, so that 业务层能够使用缓存等基础服务。
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE HoneyBox_Infrastructure SHALL 包含 Redis 缓存服务接口和实现
|
||||
2. THE HoneyBox_Infrastructure SHALL 包含 Autofac 模块注册类
|
||||
3. THE ICacheService SHALL 提供 GetAsync、SetAsync、RemoveAsync、ExistsAsync 方法
|
||||
4. THE RedisCacheService SHALL 实现 ICacheService 接口
|
||||
5. WHEN Redis 连接配置正确 THEN 缓存服务 SHALL 能够正常读写数据
|
||||
|
||||
### Requirement 4: 核心业务层配置
|
||||
|
||||
**User Story:** As a 开发者, I want 配置核心业务层的基础结构, so that 后续业务服务开发有统一的规范。
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE HoneyBox_Core SHALL 包含 Mapster 对象映射依赖包
|
||||
2. THE HoneyBox_Core SHALL 包含 MappingConfig 映射配置类
|
||||
3. THE HoneyBox_Core SHALL 包含 Services 和 Interfaces 目录结构
|
||||
4. THE HoneyBox_Core SHALL 包含 Constants 常量定义目录
|
||||
5. WHEN Mapster 配置完成 THEN 对象映射 SHALL 能够正常工作
|
||||
|
||||
### Requirement 5: API 层配置
|
||||
|
||||
**User Story:** As a 开发者, I want 配置 API 层的中间件和基础设施, so that API 服务能够正常运行。
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE HoneyBox_Api SHALL 配置 Autofac 作为依赖注入容器
|
||||
2. THE HoneyBox_Api SHALL 配置 Serilog 日志输出到控制台和文件
|
||||
3. THE HoneyBox_Api SHALL 配置 Swagger API 文档
|
||||
4. THE HoneyBox_Api SHALL 配置全局异常处理过滤器
|
||||
5. THE HoneyBox_Api SHALL 配置 CORS 跨域策略
|
||||
6. WHEN 应用启动 THEN Swagger 文档 SHALL 可以通过 /swagger 访问
|
||||
|
||||
### Requirement 6: 健康检查接口
|
||||
|
||||
**User Story:** As a 运维人员, I want 有一个健康检查接口, so that 能够监控服务运行状态。
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN 访问 /api/health THEN THE System SHALL 返回服务健康状态
|
||||
2. THE 健康检查响应 SHALL 包含数据库连接状态
|
||||
3. THE 健康检查响应 SHALL 包含 Redis 连接状态
|
||||
4. THE 健康检查响应 SHALL 使用统一的 ApiResponse 格式
|
||||
5. IF 数据库或 Redis 连接失败 THEN THE System SHALL 返回对应的错误状态
|
||||
107
.kiro/specs/api-infrastructure/tasks.md
Normal file
107
.kiro/specs/api-infrastructure/tasks.md
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
# Implementation Plan: API 基础架构搭建
|
||||
|
||||
## Overview
|
||||
|
||||
本实现计划将 HoneyBox .NET 8 Web API 项目基础架构分解为可执行的任务,按顺序完成四层项目结构搭建、配置和验证。
|
||||
|
||||
## Tasks
|
||||
|
||||
- [x] 1. 创建解决方案和项目结构
|
||||
- [x] 1.1 创建解决方案和四个项目(Api、Model、Core、Infrastructure)
|
||||
- 使用 dotnet CLI 创建解决方案
|
||||
- 创建 HoneyBox.Api (webapi)
|
||||
- 创建 HoneyBox.Model (classlib)
|
||||
- 创建 HoneyBox.Core (classlib)
|
||||
- 创建 HoneyBox.Infrastructure (classlib)
|
||||
- _Requirements: 1.1_
|
||||
- [x] 1.2 配置项目引用关系
|
||||
- Api → Core, Model
|
||||
- Core → Model, Infrastructure
|
||||
- _Requirements: 1.2, 1.3, 1.4, 1.5_
|
||||
- [x] 1.3 配置各项目 NuGet 包
|
||||
- Model: EF Core, EF Core SqlServer
|
||||
- Core: Mapster
|
||||
- Infrastructure: Redis, Autofac
|
||||
- Api: Autofac.Extensions, Serilog, Swagger, JWT
|
||||
- _Requirements: 2.1, 3.1, 4.1_
|
||||
|
||||
- [x] 2. 配置 HoneyBox.Model 数据模型层
|
||||
- [x] 2.1 创建 Base 目录和 ApiResponse 基类
|
||||
- 创建 ApiResponse 类
|
||||
- 创建 ApiResponse<T> 泛型类
|
||||
- _Requirements: 2.4_
|
||||
- [x] 2.2 创建 Data 目录和 DbContext
|
||||
- 使用 EF Core 脚手架从数据库生成实体
|
||||
- 配置 HoneyBoxDbContext
|
||||
- _Requirements: 2.2, 2.3_
|
||||
- [x] 2.3 创建 Models 目录结构
|
||||
- 创建 Common.cs 通用模型
|
||||
- 创建按控制器分类的子目录(User、Goods、Order 等)
|
||||
- _Requirements: 2.5_
|
||||
|
||||
- [x] 3. 配置 HoneyBox.Infrastructure 基础设施层
|
||||
- [x] 3.1 创建 Cache 目录和缓存服务
|
||||
- 创建 ICacheService 接口
|
||||
- 创建 RedisCacheService 实现
|
||||
- _Requirements: 3.1, 3.3, 3.4_
|
||||
- [x] 3.2 创建 Modules 目录和 Autofac 模块
|
||||
- 创建 ServiceModule 服务注册模块
|
||||
- 创建 InfrastructureModule 基础设施注册模块
|
||||
- _Requirements: 3.2_
|
||||
- [x] 3.3 创建 External 目录结构
|
||||
- 创建 WeChat、Payment、Sms 子目录(预留)
|
||||
- _Requirements: 3.1_
|
||||
|
||||
- [x] 4. 配置 HoneyBox.Core 核心业务层
|
||||
- [x] 4.1 创建 Mappings 目录和映射配置
|
||||
- 创建 MappingConfig 类
|
||||
- _Requirements: 4.2_
|
||||
- [x] 4.2 创建 Services 和 Interfaces 目录
|
||||
- 创建目录结构
|
||||
- _Requirements: 4.3_
|
||||
- [x] 4.3 创建 Constants 目录
|
||||
- 创建常量定义文件
|
||||
- _Requirements: 4.4_
|
||||
|
||||
- [x] 5. 配置 HoneyBox.Api 入口层
|
||||
- [x] 5.1 配置 appsettings.json
|
||||
- 配置数据库连接字符串
|
||||
- 配置 Redis 连接字符串
|
||||
- 配置 Serilog 日志
|
||||
- _Requirements: 2.6, 3.5, 5.2_
|
||||
- [x] 5.2 配置 Program.cs 主程序
|
||||
- 配置 Autofac 依赖注入
|
||||
- 配置 DbContext
|
||||
- 配置 Mapster
|
||||
- 配置 Serilog
|
||||
- 配置 Swagger
|
||||
- 配置 CORS
|
||||
- _Requirements: 5.1, 5.2, 5.3, 5.5_
|
||||
- [x] 5.3 创建 Filters 目录和全局异常处理
|
||||
- 创建 GlobalExceptionFilter
|
||||
- _Requirements: 5.4_
|
||||
|
||||
- [x] 6. 创建健康检查接口
|
||||
- [x] 6.1 创建 HealthController
|
||||
- 实现 /api/health 接口
|
||||
- 检查数据库连接状态
|
||||
- 检查 Redis 连接状态
|
||||
- 返回统一 ApiResponse 格式
|
||||
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_
|
||||
|
||||
- [x] 7. 验证和测试
|
||||
- [x] 7.1 编译验证
|
||||
- 运行 dotnet build 确保编译通过
|
||||
- _Requirements: 1.6_
|
||||
- [x] 7.2 运行验证
|
||||
- 启动应用
|
||||
- 访问 Swagger 文档
|
||||
- 调用健康检查接口
|
||||
- 检查日志输出
|
||||
- _Requirements: 5.6, 6.1_
|
||||
|
||||
## Notes
|
||||
|
||||
- 任务按顺序执行,后续任务依赖前置任务完成
|
||||
- 每个任务完成后进行编译验证
|
||||
- 最终通过健康检查接口验证整体架构
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -237,7 +237,7 @@ Response:
|
|||
|
||||
##### 更新用户信息接口
|
||||
```http
|
||||
PUT /api/v1/user/profile
|
||||
POST /api/v1/user/profile/update
|
||||
Authorization: Bearer {token}
|
||||
Content-Type: application/json
|
||||
|
||||
|
|
@ -300,6 +300,30 @@ Response:
|
|||
- [ ] 添加登录统计功能
|
||||
- [ ] 实现登录记录接口
|
||||
|
||||
### 2.7 账号注销功能 (0.5天)
|
||||
|
||||
#### 任务描述
|
||||
实现用户账号注销功能
|
||||
|
||||
#### 具体工作
|
||||
- [ ] 实现账号注销接口
|
||||
- [ ] 处理用户数据清理逻辑
|
||||
- [ ] 添加注销确认机制
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 注销账号接口
|
||||
```http
|
||||
POST /api/v1/user/logout-account
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "注销成功"
|
||||
}
|
||||
```
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 记录登录接口
|
||||
|
|
@ -395,6 +419,7 @@ public class UserLoginLog
|
|||
- [ ] 用户信息获取和更新正常
|
||||
- [ ] 手机号绑定功能正常
|
||||
- [ ] 登录记录功能正常
|
||||
- [ ] 账号注销功能正常
|
||||
|
||||
### 性能验收
|
||||
- [ ] 登录接口响应时间 < 500ms
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
# 阶段3:用户管理系统
|
||||
|
||||
## 阶段概述
|
||||
**时间**: 2周
|
||||
**目标**: 实现完整的用户管理功能,包括用户资产管理、VIP等级、积分系统、优惠券管理等
|
||||
**时间**: 2.5周
|
||||
**目标**: 实现完整的用户管理功能,包括用户资产管理、VIP等级、积分系统、优惠券管理、福利屋系统等
|
||||
**优先级**: P1 (高优先级)
|
||||
|
||||
## 详细任务清单
|
||||
|
|
@ -459,14 +459,20 @@ Response:
|
|||
- [ ] 实现推荐关系查询
|
||||
- [ ] 实现推荐奖励计算
|
||||
- [ ] 实现推荐统计功能
|
||||
- [ ] 实现绑定邀请码功能
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 推荐信息查询接口
|
||||
```http
|
||||
GET /api/v1/user/referral/info
|
||||
POST /api/v1/user/invitation
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"page": 1
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
|
|
@ -487,6 +493,235 @@ Response:
|
|||
}
|
||||
```
|
||||
|
||||
##### 绑定邀请码接口
|
||||
```http
|
||||
POST /api/v1/user/bind-invite-code
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"invite_code": "ABC123"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "绑定成功"
|
||||
}
|
||||
```
|
||||
|
||||
### 3.7 排行榜系统 (1天)
|
||||
|
||||
#### 任务描述
|
||||
实现用户排行榜功能
|
||||
|
||||
#### 具体工作
|
||||
- [ ] 实现邀请排行榜
|
||||
- [ ] 实现消费排行榜
|
||||
- [ ] 实现排行榜缓存
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 获取排行榜接口
|
||||
```http
|
||||
GET /api/v1/rank/list
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Query Parameters:
|
||||
- type: 排行榜类型 (invite=邀请榜, consume=消费榜)
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": [
|
||||
{
|
||||
"rank": 1,
|
||||
"user_id": 123,
|
||||
"nickname": "用户昵称",
|
||||
"headimg": "https://example.com/avatar.jpg",
|
||||
"value": "1000.00"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 3.8 兑换码系统 (0.5天)
|
||||
|
||||
#### 任务描述
|
||||
实现兑换码使用功能
|
||||
|
||||
#### 具体工作
|
||||
- [ ] 实现兑换码验证
|
||||
- [ ] 实现兑换码使用接口
|
||||
- [ ] 实现兑换奖励发放
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 使用兑换码接口
|
||||
```http
|
||||
POST /api/v1/user/redeem
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"code": "EXCHANGE123"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "兑换成功",
|
||||
"data": {
|
||||
"reward_type": "integral",
|
||||
"reward_amount": "100.00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3.9 福利屋系统 (2天)
|
||||
|
||||
#### 任务描述
|
||||
实现福利屋功能,包括福利活动展示、参与和中奖
|
||||
|
||||
#### 具体工作
|
||||
- [ ] 实现福利屋列表接口
|
||||
- [ ] 实现福利屋详情接口
|
||||
- [ ] 实现福利屋参与者查询
|
||||
- [ ] 实现福利屋记录查询
|
||||
- [ ] 实现用户参与记录查询
|
||||
- [ ] 实现用户中奖记录查询
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 福利屋列表接口
|
||||
```http
|
||||
POST /api/v1/welfare/list
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": [
|
||||
{
|
||||
"id": 1001,
|
||||
"title": "每日福利",
|
||||
"imgurl": "https://example.com/welfare.jpg",
|
||||
"status": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
##### 福利屋详情接口
|
||||
```http
|
||||
POST /api/v1/welfare/detail
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"id": 1001,
|
||||
"title": "每日福利",
|
||||
"imgurl": "https://example.com/welfare.jpg",
|
||||
"prize_list": [],
|
||||
"rules": "活动规则说明"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 福利屋参与者接口
|
||||
```http
|
||||
POST /api/v1/welfare/participants
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"page": 1
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"data": [
|
||||
{
|
||||
"user_id": 123,
|
||||
"nickname": "用户昵称",
|
||||
"headimg": "https://example.com/avatar.jpg",
|
||||
"join_time": "2024-01-01 12:00:00"
|
||||
}
|
||||
],
|
||||
"last_page": 5
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 福利屋记录接口
|
||||
```http
|
||||
POST /api/v1/welfare/records
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"page": 1
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"data": [
|
||||
{
|
||||
"user_id": 123,
|
||||
"nickname": "用户昵称",
|
||||
"prize_title": "奖品名称",
|
||||
"win_time": "2024-01-01 12:00:00"
|
||||
}
|
||||
],
|
||||
"last_page": 3
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 用户福利屋参与记录接口
|
||||
```http
|
||||
GET /api/v1/welfare/user/records
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": []
|
||||
}
|
||||
```
|
||||
|
||||
##### 用户福利屋中奖记录接口
|
||||
```http
|
||||
GET /api/v1/welfare/user/winning-records
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": []
|
||||
}
|
||||
```
|
||||
|
||||
## 数据模型设计
|
||||
|
||||
### 用户资产变更记录表
|
||||
|
|
@ -576,6 +811,10 @@ public class UserTaskList
|
|||
- [ ] 任务系统进度计算和奖励发放正确
|
||||
- [ ] 签到功能和连续签到统计正常
|
||||
- [ ] 推荐关系管理功能正常
|
||||
- [ ] 绑定邀请码功能正常
|
||||
- [ ] 排行榜系统功能正常
|
||||
- [ ] 兑换码使用功能正常
|
||||
- [ ] 福利屋系统功能正常
|
||||
|
||||
### 性能验收
|
||||
- [ ] 资产查询接口响应时间 < 200ms
|
||||
|
|
|
|||
|
|
@ -468,7 +468,77 @@ Response:
|
|||
}
|
||||
```
|
||||
|
||||
### 4.7 中奖记录查询 (3天)
|
||||
### 4.7 商品奖品统计 (1天)
|
||||
|
||||
#### 任务描述
|
||||
实现商品奖品数量和内容统计功能
|
||||
|
||||
#### 具体工作
|
||||
- [ ] 实现奖品数量统计接口
|
||||
- [ ] 实现奖品内容查询接口
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 商品奖品数量统计接口
|
||||
```http
|
||||
POST /api/v1/goods/prize-count
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"total_count": 100,
|
||||
"surplus_count": 50,
|
||||
"category_count": [
|
||||
{
|
||||
"shang_id": 10,
|
||||
"shang_title": "A赏",
|
||||
"total": 10,
|
||||
"surplus": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 商品奖品内容接口
|
||||
```http
|
||||
POST /api/v1/goods/prize-content
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"num": 0
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"goods_list": [
|
||||
{
|
||||
"id": 456,
|
||||
"title": "奖品标题",
|
||||
"imgurl": "https://example.com/prize.jpg",
|
||||
"price": "100.00",
|
||||
"stock": 10,
|
||||
"surplus_stock": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4.8 中奖记录查询 (3天)
|
||||
|
||||
#### 任务描述
|
||||
实现商品中奖记录查询功能
|
||||
|
|
@ -612,6 +682,8 @@ public async Task<List<GoodsListDto>> GetGoodsListWithJoinCountAsync(List<int> g
|
|||
- [ ] 商品收藏功能正常
|
||||
- [ ] 中奖记录查询功能正常
|
||||
- [ ] 商品扩展配置查询正常
|
||||
- [ ] 商品奖品数量统计正常
|
||||
- [ ] 商品奖品内容查询正常
|
||||
|
||||
### 性能验收
|
||||
- [ ] 商品列表接口响应时间 < 300ms
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
# 阶段5:订单系统
|
||||
|
||||
## 阶段概述
|
||||
**时间**: 3周
|
||||
**目标**: 实现完整的订单管理系统,包括下单、支付、订单状态管理、订单查询等功能
|
||||
**时间**: 3.5周
|
||||
**目标**: 实现完整的订单管理系统,包括多种商品类型下单、支付、订单状态管理、仓库管理、发货物流等功能
|
||||
**优先级**: P1 (高优先级)
|
||||
|
||||
## 详细任务清单
|
||||
|
|
@ -210,16 +210,106 @@ public class OrderCalculationResult
|
|||
### 5.3 订单创建和支付 (5天)
|
||||
|
||||
#### 任务描述
|
||||
实现订单创建和支付处理功能
|
||||
实现订单创建和支付处理功能,支持多种商品类型
|
||||
|
||||
#### 具体工作
|
||||
- [ ] 实现订单创建接口
|
||||
- [ ] 实现一番赏订单创建接口
|
||||
- [ ] 实现无限赏订单金额计算接口
|
||||
- [ ] 实现无限赏订单创建接口
|
||||
- [ ] 实现商城订单金额计算接口
|
||||
- [ ] 实现库存扣减逻辑
|
||||
- [ ] 实现支付处理逻辑
|
||||
- [ ] 实现订单状态更新
|
||||
- [ ] 实现事务处理机制
|
||||
- [ ] 实现订单超时取消
|
||||
|
||||
#### 无限赏订单接口
|
||||
|
||||
##### 无限赏订单金额计算接口
|
||||
```http
|
||||
POST /api/v1/order/infinite/calculate
|
||||
Authorization: Bearer {token}
|
||||
Content-Type: application/json
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"prize_num": 1,
|
||||
"use_money_is": 2,
|
||||
"use_integral_is": 2,
|
||||
"use_money2_is": 2,
|
||||
"coupon_id": ""
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"goods_info": {},
|
||||
"calculation": {},
|
||||
"user_assets": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 无限赏订单创建接口
|
||||
```http
|
||||
POST /api/v1/order/infinite/create
|
||||
Authorization: Bearer {token}
|
||||
Content-Type: application/json
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"prize_num": 1,
|
||||
"use_money_is": 2,
|
||||
"use_integral_is": 2,
|
||||
"use_money2_is": 2,
|
||||
"coupon_id": ""
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "订单创建成功",
|
||||
"data": {
|
||||
"order_no": "ORD202401010001",
|
||||
"pay_info": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 商城订单接口
|
||||
|
||||
##### 商城订单金额计算接口
|
||||
```http
|
||||
POST /api/v1/order/mall/calculate
|
||||
Authorization: Bearer {token}
|
||||
Content-Type: application/json
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"prize_num": 1,
|
||||
"goods_num": 1,
|
||||
"use_money_is": 2,
|
||||
"use_integral_is": 2,
|
||||
"use_money2_is": 2
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"goods_info": {},
|
||||
"calculation": {},
|
||||
"user_assets": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 创建订单接口
|
||||
|
|
@ -456,7 +546,221 @@ Response:
|
|||
}
|
||||
```
|
||||
|
||||
### 5.5 订单取消和退款 (3天)
|
||||
### 5.5 仓库/盒柜管理 (4天)
|
||||
|
||||
#### 任务描述
|
||||
实现用户仓库(盒柜)管理功能,包括奖品回收、发货等
|
||||
|
||||
#### 具体工作
|
||||
- [ ] 实现仓库首页接口
|
||||
- [ ] 实现奖品回收接口
|
||||
- [ ] 实现奖品发货接口
|
||||
- [ ] 实现确认发货接口
|
||||
- [ ] 实现发货记录查询
|
||||
- [ ] 实现发货记录详情
|
||||
- [ ] 实现回收记录查询
|
||||
- [ ] 实现物流信息查询
|
||||
|
||||
#### 核心接口实现
|
||||
|
||||
##### 仓库首页接口
|
||||
```http
|
||||
POST /api/v1/warehouse/index
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"page": 1,
|
||||
"status": 0
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"data": [
|
||||
{
|
||||
"id": 20001,
|
||||
"goodslist_title": "限定手办A",
|
||||
"goodslist_imgurl": "https://example.com/prize.jpg",
|
||||
"goodslist_price": "299.00",
|
||||
"goodslist_money": "150.00",
|
||||
"status": 0,
|
||||
"addtime": 1640995300
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 回收奖品接口
|
||||
```http
|
||||
POST /api/v1/warehouse/recovery
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"order_list_ids": "20001,20002"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "回收成功",
|
||||
"data": {
|
||||
"recovery_amount": "300.00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 发货奖品接口
|
||||
```http
|
||||
POST /api/v1/warehouse/send
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"order_list_ids": "20001,20002",
|
||||
"name": "张三",
|
||||
"mobile": "13800138000",
|
||||
"address": "北京市朝阳区xxx街道xxx号",
|
||||
"message": "请小心轻放"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "发货申请成功",
|
||||
"data": {
|
||||
"delivery_id": 70001
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 确认发货接口
|
||||
```http
|
||||
POST /api/v1/warehouse/send/confirm
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"id": 70001
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "确认成功"
|
||||
}
|
||||
```
|
||||
|
||||
##### 发货记录接口
|
||||
```http
|
||||
POST /api/v1/warehouse/send/records
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"page": 1
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"data": [
|
||||
{
|
||||
"id": 70001,
|
||||
"name": "张三",
|
||||
"mobile": "138****8000",
|
||||
"address": "北京市朝阳区xxx",
|
||||
"status": 1,
|
||||
"addtime": "2024-01-01 12:00:00"
|
||||
}
|
||||
],
|
||||
"last_page": 3
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 发货记录详情接口
|
||||
```http
|
||||
POST /api/v1/warehouse/send/detail
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"id": 70001
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"id": 70001,
|
||||
"name": "张三",
|
||||
"mobile": "13800138000",
|
||||
"address": "北京市朝阳区xxx街道xxx号",
|
||||
"status": 1,
|
||||
"items": [],
|
||||
"logistics": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 回收记录接口
|
||||
```http
|
||||
POST /api/v1/warehouse/recovery/records
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"page": 1
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"data": [],
|
||||
"last_page": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 物流信息接口
|
||||
```http
|
||||
POST /api/v1/warehouse/logistics
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"id": 70001
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"company": "顺丰速运",
|
||||
"tracking_no": "SF1234567890",
|
||||
"status": "已签收",
|
||||
"traces": [
|
||||
{
|
||||
"time": "2024-01-03 10:00:00",
|
||||
"content": "已签收"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5.6 订单取消和退款 (3天)
|
||||
|
||||
#### 任务描述
|
||||
实现订单取消和退款功能
|
||||
|
|
@ -698,12 +1002,18 @@ public class WechatPayService
|
|||
## 验收标准
|
||||
|
||||
### 功能验收
|
||||
- [ ] 订单创建流程完整可用
|
||||
- [ ] 一番赏订单创建流程完整可用
|
||||
- [ ] 无限赏订单创建流程完整可用
|
||||
- [ ] 商城订单创建流程完整可用
|
||||
- [ ] 订单金额计算准确
|
||||
- [ ] 支付流程正常
|
||||
- [ ] 订单查询功能正常
|
||||
- [ ] 订单取消和退款功能正常
|
||||
- [ ] 库存管理机制正确
|
||||
- [ ] 仓库/盒柜管理功能正常
|
||||
- [ ] 奖品回收功能正常
|
||||
- [ ] 奖品发货功能正常
|
||||
- [ ] 物流信息查询正常
|
||||
|
||||
### 性能验收
|
||||
- [ ] 订单创建接口响应时间 < 1000ms
|
||||
|
|
|
|||
|
|
@ -199,13 +199,15 @@ public class LotteryEngine : ILotteryEngine
|
|||
### 7.2 抽奖接口实现 (4天)
|
||||
|
||||
#### 任务描述
|
||||
实现抽奖相关的API接口
|
||||
实现抽奖相关的API接口,支持多种抽奖类型
|
||||
|
||||
#### 具体工作
|
||||
- [ ] 实现单次抽奖接口
|
||||
- [ ] 实现多次抽奖接口
|
||||
- [ ] 实现抽奖预览接口
|
||||
- [ ] 实现抽奖历史查询
|
||||
- [ ] 实现一番赏抽奖结果接口
|
||||
- [ ] 实现无限赏抽奖结果接口
|
||||
- [ ] 实现一番赏中奖记录接口
|
||||
- [ ] 实现无限赏中奖记录接口
|
||||
- [ ] 实现每日抽奖记录接口
|
||||
- [ ] 实现道具卡抽奖接口
|
||||
- [ ] 添加抽奖限制验证
|
||||
|
||||
#### 核心接口实现
|
||||
|
|
@ -304,6 +306,145 @@ Response:
|
|||
}
|
||||
```
|
||||
|
||||
##### 一番赏抽奖结果接口
|
||||
```http
|
||||
POST /api/v1/lottery/prize-log
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"order_num": "202401010001"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": [
|
||||
{
|
||||
"id": 20001,
|
||||
"order_id": 10001,
|
||||
"goodslist_title": "限定手办A",
|
||||
"goodslist_imgurl": "https://example.com/prize.jpg",
|
||||
"goodslist_price": "299.00",
|
||||
"goodslist_money": "150.00",
|
||||
"goodslist_type": 1,
|
||||
"status": 0,
|
||||
"addtime": 1640995300,
|
||||
"prize_code": "A001",
|
||||
"luck_no": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
##### 无限赏抽奖结果接口
|
||||
```http
|
||||
POST /api/v1/lottery/infinite/prize-log
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"order_num": "202401010001"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": []
|
||||
}
|
||||
```
|
||||
|
||||
##### 一番赏中奖记录接口
|
||||
```http
|
||||
POST /api/v1/lottery/shang-log
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"num": 0,
|
||||
"page": 1
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"data": [
|
||||
{
|
||||
"user_nickname": "用户***",
|
||||
"goodslist_title": "限定手办A",
|
||||
"addtime": "2024-01-01 10:30:00",
|
||||
"luck_no": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 无限赏中奖记录接口
|
||||
```http
|
||||
POST /api/v1/lottery/infinite/shang-log
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"page": 1
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": {
|
||||
"data": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 每日抽奖记录接口
|
||||
```http
|
||||
POST /api/v1/lottery/infinite/daily-records
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "请求成功",
|
||||
"data": []
|
||||
}
|
||||
```
|
||||
|
||||
##### 道具卡抽奖接口
|
||||
```http
|
||||
POST /api/v1/lottery/item-card
|
||||
Authorization: Bearer {token}
|
||||
|
||||
Request:
|
||||
{
|
||||
"goods_id": 1001,
|
||||
"item_card_id": 1
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"status": 1,
|
||||
"msg": "抽奖成功",
|
||||
"data": {
|
||||
"prize": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 抽奖历史接口
|
||||
```http
|
||||
GET /api/v1/user/lottery-history
|
||||
|
|
|
|||
|
|
@ -410,12 +410,13 @@ Response:
|
|||
```
|
||||
|
||||
```http
|
||||
PUT /api/v1/admin/config/{key}
|
||||
POST /api/v1/admin/config/update
|
||||
Authorization: Bearer {admin_token}
|
||||
Content-Type: application/json
|
||||
|
||||
Request:
|
||||
{
|
||||
"key": "lottery.max_draws_per_minute",
|
||||
"value": "15",
|
||||
"reason": "调整抽奖频率限制"
|
||||
}
|
||||
|
|
|
|||
BIN
server/C#/HoneyBox/.vs/HoneyBox/DesignTimeBuild/.dtbcache.v2
Normal file
BIN
server/C#/HoneyBox/.vs/HoneyBox/DesignTimeBuild/.dtbcache.v2
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
server/C#/HoneyBox/.vs/HoneyBox/v17/.suo
Normal file
BIN
server/C#/HoneyBox/.vs/HoneyBox/v17/.suo
Normal file
Binary file not shown.
12
server/C#/HoneyBox/.vs/HoneyBox/v17/DocumentLayout.json
Normal file
12
server/C#/HoneyBox/.vs/HoneyBox/v17/DocumentLayout.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\",
|
||||
"Documents": [],
|
||||
"DocumentGroupContainers": [
|
||||
{
|
||||
"Orientation": 0,
|
||||
"VerticalTabListWidth": 256,
|
||||
"DocumentGroups": []
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
server/C#/HoneyBox/.vs/HoneyBox/v18/.futdcache.v2
Normal file
BIN
server/C#/HoneyBox/.vs/HoneyBox/v18/.futdcache.v2
Normal file
Binary file not shown.
BIN
server/C#/HoneyBox/.vs/HoneyBox/v18/.suo
Normal file
BIN
server/C#/HoneyBox/.vs/HoneyBox/v18/.suo
Normal file
Binary file not shown.
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\",
|
||||
"Documents": [],
|
||||
"DocumentGroupContainers": [
|
||||
{
|
||||
"Orientation": 0,
|
||||
"VerticalTabListWidth": 256,
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": -1,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
126
server/C#/HoneyBox/.vs/HoneyBox/v18/DocumentLayout.json
Normal file
126
server/C#/HoneyBox/.vs/HoneyBox/v18/DocumentLayout.json
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
{
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{B3732485-B324-43A2-AEB0-092AD84A1302}|src\\HoneyBox.Model\\HoneyBox.Model.csproj|d:\\outsource\\haniblindbox\\server\\c#\\honeybox\\src\\honeybox.model\\data\\honeyboxdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{B3732485-B324-43A2-AEB0-092AD84A1302}|src\\HoneyBox.Model\\HoneyBox.Model.csproj|solutionrelative:src\\honeybox.model\\data\\honeyboxdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{B3732485-B324-43A2-AEB0-092AD84A1302}|src\\HoneyBox.Model\\HoneyBox.Model.csproj|d:\\outsource\\haniblindbox\\server\\c#\\honeybox\\src\\honeybox.model\\base\\apiresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{B3732485-B324-43A2-AEB0-092AD84A1302}|src\\HoneyBox.Model\\HoneyBox.Model.csproj|solutionrelative:src\\honeybox.model\\base\\apiresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{73C88F2C-A98A-4E84-A61C-02FBA69416A4}|src\\HoneyBox.Api\\HoneyBox.Api.csproj|d:\\outsource\\haniblindbox\\server\\c#\\honeybox\\src\\honeybox.api\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{73C88F2C-A98A-4E84-A61C-02FBA69416A4}|src\\HoneyBox.Api\\HoneyBox.Api.csproj|solutionrelative:src\\honeybox.api\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{73C88F2C-A98A-4E84-A61C-02FBA69416A4}|src\\HoneyBox.Api\\HoneyBox.Api.csproj|d:\\outsource\\haniblindbox\\server\\c#\\honeybox\\src\\honeybox.api\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
|
||||
"RelativeMoniker": "D:0:0:{73C88F2C-A98A-4E84-A61C-02FBA69416A4}|src\\HoneyBox.Api\\HoneyBox.Api.csproj|solutionrelative:src\\honeybox.api\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{B3732485-B324-43A2-AEB0-092AD84A1302}|src\\HoneyBox.Model\\HoneyBox.Model.csproj|d:\\outsource\\haniblindbox\\server\\c#\\honeybox\\src\\honeybox.model\\models\\prize\\prizemodels.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{B3732485-B324-43A2-AEB0-092AD84A1302}|src\\HoneyBox.Model\\HoneyBox.Model.csproj|solutionrelative:src\\honeybox.model\\models\\prize\\prizemodels.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{B3732485-B324-43A2-AEB0-092AD84A1302}|src\\HoneyBox.Model\\HoneyBox.Model.csproj|d:\\outsource\\haniblindbox\\server\\c#\\honeybox\\src\\honeybox.model\\entities\\t_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{B3732485-B324-43A2-AEB0-092AD84A1302}|src\\HoneyBox.Model\\HoneyBox.Model.csproj|solutionrelative:src\\honeybox.model\\entities\\t_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
{
|
||||
"Orientation": 0,
|
||||
"VerticalTabListWidth": 256,
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 1,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "HoneyBoxDbContext.cs",
|
||||
"DocumentMoniker": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Model\\Data\\HoneyBoxDbContext.cs",
|
||||
"RelativeDocumentMoniker": "src\\HoneyBox.Model\\Data\\HoneyBoxDbContext.cs",
|
||||
"ToolTip": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Model\\Data\\HoneyBoxDbContext.cs",
|
||||
"RelativeToolTip": "src\\HoneyBox.Model\\Data\\HoneyBoxDbContext.cs",
|
||||
"ViewState": "AgIAADgAAAAAAAAAAAA3wEgAAAA9AAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-02T06:46:26.809Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "Program.cs",
|
||||
"DocumentMoniker": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Api\\Program.cs",
|
||||
"RelativeDocumentMoniker": "src\\HoneyBox.Api\\Program.cs",
|
||||
"ToolTip": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Api\\Program.cs",
|
||||
"RelativeToolTip": "src\\HoneyBox.Api\\Program.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-02T06:46:17.477Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "appsettings.json",
|
||||
"DocumentMoniker": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Api\\appsettings.json",
|
||||
"RelativeDocumentMoniker": "src\\HoneyBox.Api\\appsettings.json",
|
||||
"ToolTip": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Api\\appsettings.json",
|
||||
"RelativeToolTip": "src\\HoneyBox.Api\\appsettings.json",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
|
||||
"WhenOpened": "2026-01-02T06:46:15.627Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "ApiResponse.cs",
|
||||
"DocumentMoniker": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Model\\Base\\ApiResponse.cs",
|
||||
"RelativeDocumentMoniker": "src\\HoneyBox.Model\\Base\\ApiResponse.cs",
|
||||
"ToolTip": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Model\\Base\\ApiResponse.cs",
|
||||
"RelativeToolTip": "src\\HoneyBox.Model\\Base\\ApiResponse.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-02T06:46:13.048Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 4,
|
||||
"Title": "PrizeModels.cs",
|
||||
"DocumentMoniker": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Model\\Models\\Prize\\PrizeModels.cs",
|
||||
"RelativeDocumentMoniker": "src\\HoneyBox.Model\\Models\\Prize\\PrizeModels.cs",
|
||||
"ToolTip": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Model\\Models\\Prize\\PrizeModels.cs",
|
||||
"RelativeToolTip": "src\\HoneyBox.Model\\Models\\Prize\\PrizeModels.cs",
|
||||
"ViewState": "AgIAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-02T06:45:58.04Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"Title": "T_Task.cs",
|
||||
"DocumentMoniker": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Model\\Entities\\T_Task.cs",
|
||||
"RelativeDocumentMoniker": "src\\HoneyBox.Model\\Entities\\T_Task.cs",
|
||||
"ToolTip": "D:\\outsource\\HaniBlindBox\\server\\C#\\HoneyBox\\src\\HoneyBox.Model\\Entities\\T_Task.cs",
|
||||
"RelativeToolTip": "src\\HoneyBox.Model\\Entities\\T_Task.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-02T06:45:33.368Z",
|
||||
"EditorCaption": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
84
server/C#/HoneyBox/HoneyBox.sln
Normal file
84
server/C#/HoneyBox/HoneyBox.sln
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HoneyBox.Api", "src\HoneyBox.Api\HoneyBox.Api.csproj", "{73C88F2C-A98A-4E84-A61C-02FBA69416A4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HoneyBox.Model", "src\HoneyBox.Model\HoneyBox.Model.csproj", "{B3732485-B324-43A2-AEB0-092AD84A1302}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HoneyBox.Core", "src\HoneyBox.Core\HoneyBox.Core.csproj", "{76F12C15-F00E-4379-9572-E3196BFB0FAA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HoneyBox.Infrastructure", "src\HoneyBox.Infrastructure\HoneyBox.Infrastructure.csproj", "{316BF1ED-56D9-4AF1-8EA5-615103C5954F}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302}.Release|x86.Build.0 = Release|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Release|x64.Build.0 = Release|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA}.Release|x86.Build.0 = Release|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{73C88F2C-A98A-4E84-A61C-02FBA69416A4} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{B3732485-B324-43A2-AEB0-092AD84A1302} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{76F12C15-F00E-4379-9572-E3196BFB0FAA} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{316BF1ED-56D9-4AF1-8EA5-615103C5954F} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using HoneyBox.Infrastructure.Cache;
|
||||
using HoneyBox.Model.Base;
|
||||
using HoneyBox.Model.Data;
|
||||
|
||||
namespace HoneyBox.Api.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// 健康检查控制器
|
||||
/// </summary>
|
||||
[ApiController]
|
||||
[Route("api/[controller]")]
|
||||
public class HealthController : ControllerBase
|
||||
{
|
||||
private readonly HoneyBoxDbContext _dbContext;
|
||||
private readonly ICacheService _cacheService;
|
||||
private readonly ILogger<HealthController> _logger;
|
||||
|
||||
public HealthController(
|
||||
HoneyBoxDbContext dbContext,
|
||||
ICacheService cacheService,
|
||||
ILogger<HealthController> logger)
|
||||
{
|
||||
_dbContext = dbContext;
|
||||
_cacheService = cacheService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取服务健康状态
|
||||
/// </summary>
|
||||
/// <returns>健康检查结果</returns>
|
||||
[HttpGet]
|
||||
public async Task<ApiResponse<HealthCheckData>> GetHealth()
|
||||
{
|
||||
var healthData = new HealthCheckData
|
||||
{
|
||||
Timestamp = DateTime.Now
|
||||
};
|
||||
|
||||
// 检查数据库连接状态
|
||||
try
|
||||
{
|
||||
var canConnect = await _dbContext.Database.CanConnectAsync();
|
||||
healthData.Database = canConnect ? "Connected" : "Disconnected";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "数据库连接检查失败");
|
||||
healthData.Database = "Disconnected";
|
||||
}
|
||||
|
||||
// 检查 Redis 连接状态
|
||||
try
|
||||
{
|
||||
var isRedisConnected = await _cacheService.IsConnectedAsync();
|
||||
healthData.Redis = isRedisConnected ? "Connected" : "Disconnected";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Redis 连接检查失败");
|
||||
healthData.Redis = "Disconnected";
|
||||
}
|
||||
|
||||
// 确定整体状态
|
||||
healthData.Status = (healthData.Database == "Connected" && healthData.Redis == "Connected")
|
||||
? "Healthy"
|
||||
: "Unhealthy";
|
||||
|
||||
return ApiResponse<HealthCheckData>.Success(healthData);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 健康检查响应数据
|
||||
/// </summary>
|
||||
public class HealthCheckData
|
||||
{
|
||||
/// <summary>
|
||||
/// 整体状态
|
||||
/// </summary>
|
||||
public string Status { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 数据库连接状态
|
||||
/// </summary>
|
||||
public string Database { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Redis 连接状态
|
||||
/// </summary>
|
||||
public string Redis { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 检查时间戳
|
||||
/// </summary>
|
||||
public DateTime Timestamp { get; set; }
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
using HoneyBox.Model.Base;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
|
||||
namespace HoneyBox.Api.Filters;
|
||||
|
||||
/// <summary>
|
||||
/// 全局异常处理过滤器
|
||||
/// </summary>
|
||||
public class GlobalExceptionFilter : IExceptionFilter
|
||||
{
|
||||
private readonly ILogger<GlobalExceptionFilter> _logger;
|
||||
private readonly IHostEnvironment _environment;
|
||||
|
||||
public GlobalExceptionFilter(
|
||||
ILogger<GlobalExceptionFilter> logger,
|
||||
IHostEnvironment environment)
|
||||
{
|
||||
_logger = logger;
|
||||
_environment = environment;
|
||||
}
|
||||
|
||||
public void OnException(ExceptionContext context)
|
||||
{
|
||||
// 记录异常日志
|
||||
_logger.LogError(context.Exception,
|
||||
"Unhandled exception occurred. Path: {Path}, Method: {Method}",
|
||||
context.HttpContext.Request.Path,
|
||||
context.HttpContext.Request.Method);
|
||||
|
||||
// 构建错误响应
|
||||
var response = _environment.IsDevelopment()
|
||||
? ApiResponse.Fail($"服务器内部错误: {context.Exception.Message}", 500)
|
||||
: ApiResponse.Fail("服务器内部错误", 500);
|
||||
|
||||
context.Result = new ObjectResult(response)
|
||||
{
|
||||
StatusCode = 200 // 返回 200 状态码,错误信息在响应体中
|
||||
};
|
||||
|
||||
context.ExceptionHandled = true;
|
||||
}
|
||||
}
|
||||
23
server/C#/HoneyBox/src/HoneyBox.Api/HoneyBox.Api.csproj
Normal file
23
server/C#/HoneyBox/src/HoneyBox.Api/HoneyBox.Api.csproj
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.1" />
|
||||
<PackageReference Include="Scalar.AspNetCore" Version="2.0.36" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\HoneyBox.Model\HoneyBox.Model.csproj" />
|
||||
<ProjectReference Include="..\HoneyBox.Core\HoneyBox.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
6
server/C#/HoneyBox/src/HoneyBox.Api/HoneyBox.Api.http
Normal file
6
server/C#/HoneyBox/src/HoneyBox.Api/HoneyBox.Api.http
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
@HoneyBox.Api_HostAddress = http://localhost:5238
|
||||
|
||||
GET {{HoneyBox.Api_HostAddress}}/weatherforecast/
|
||||
Accept: application/json
|
||||
|
||||
###
|
||||
111
server/C#/HoneyBox/src/HoneyBox.Api/Program.cs
Normal file
111
server/C#/HoneyBox/src/HoneyBox.Api/Program.cs
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
using Autofac;
|
||||
using Autofac.Extensions.DependencyInjection;
|
||||
using HoneyBox.Api.Filters;
|
||||
using HoneyBox.Core.Mappings;
|
||||
using HoneyBox.Infrastructure.Cache;
|
||||
using HoneyBox.Infrastructure.Modules;
|
||||
using HoneyBox.Model.Data;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Scalar.AspNetCore;
|
||||
using Serilog;
|
||||
|
||||
// 配置 Serilog
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
.ReadFrom.Configuration(new ConfigurationBuilder()
|
||||
.AddJsonFile("appsettings.json")
|
||||
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
|
||||
.Build())
|
||||
.CreateLogger();
|
||||
|
||||
try
|
||||
{
|
||||
Log.Information("Starting HoneyBox API...");
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// 使用 Serilog
|
||||
builder.Host.UseSerilog();
|
||||
|
||||
// 使用 Autofac 作为依赖注入容器
|
||||
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
|
||||
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
|
||||
{
|
||||
// 注册基础设施模块
|
||||
containerBuilder.RegisterModule<InfrastructureModule>();
|
||||
// 注册服务模块
|
||||
containerBuilder.RegisterModule<ServiceModule>();
|
||||
});
|
||||
|
||||
// 配置 DbContext
|
||||
builder.Services.AddDbContext<HoneyBoxDbContext>(options =>
|
||||
{
|
||||
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
|
||||
});
|
||||
|
||||
// 配置 Mapster
|
||||
builder.Services.AddMapsterConfiguration();
|
||||
|
||||
// 注册 Redis 缓存服务(通过 Autofac 模块注册,这里添加 IConfiguration)
|
||||
builder.Services.AddSingleton<ICacheService>(sp =>
|
||||
new RedisCacheService(builder.Configuration));
|
||||
|
||||
// 添加控制器
|
||||
builder.Services.AddControllers(options =>
|
||||
{
|
||||
// 添加全局异常过滤器
|
||||
options.Filters.Add<GlobalExceptionFilter>();
|
||||
});
|
||||
|
||||
// 配置 OpenAPI(.NET 10 内置支持)
|
||||
builder.Services.AddOpenApi();
|
||||
|
||||
|
||||
// 配置 CORS(仅开发环境,生产环境由 Nginx 处理)
|
||||
builder.Services.AddCors(options =>
|
||||
{
|
||||
options.AddPolicy("Development", policy =>
|
||||
{
|
||||
policy.AllowAnyOrigin()
|
||||
.AllowAnyMethod()
|
||||
.AllowAnyHeader();
|
||||
});
|
||||
});
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// 配置 HTTP 请求管道
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
// 使用 OpenAPI 和 Scalar UI
|
||||
app.MapOpenApi();
|
||||
app.MapScalarApiReference();
|
||||
|
||||
// 仅开发环境启用 CORS,生产环境由 Nginx 配置
|
||||
app.UseCors("Development");
|
||||
}
|
||||
|
||||
// 使用 Serilog 请求日志
|
||||
app.UseSerilogRequestLogging();
|
||||
|
||||
// 使用路由
|
||||
app.UseRouting();
|
||||
|
||||
// 使用授权(后续添加 JWT 认证时启用)
|
||||
// app.UseAuthentication();
|
||||
// app.UseAuthorization();
|
||||
|
||||
// 映射控制器
|
||||
app.MapControllers();
|
||||
|
||||
Log.Information("HoneyBox API started successfully");
|
||||
|
||||
app.Run();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Fatal(ex, "Application terminated unexpectedly");
|
||||
}
|
||||
finally
|
||||
{
|
||||
Log.CloseAndFlush();
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": false,
|
||||
"applicationUrl": "http://localhost:5238",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=localhost;Database=HoneyBox;User Id=sa;Password=YourPassword;TrustServerCertificate=True;",
|
||||
"Redis": "localhost:6379,abortConnect=false,connectTimeout=5000"
|
||||
},
|
||||
"Serilog": {
|
||||
"MinimumLevel": {
|
||||
"Default": "Debug",
|
||||
"Override": {
|
||||
"Microsoft": "Information",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"Microsoft.EntityFrameworkCore": "Information"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
37
server/C#/HoneyBox/src/HoneyBox.Api/appsettings.json
Normal file
37
server/C#/HoneyBox/src/HoneyBox.Api/appsettings.json
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=192.168.195.15;uid=sa;pwd=Dbt@com@123;Database=honey_box;MultipleActiveResultSets=true;pooling=true;min pool size=5;max pool size=32767;connect timeout=20;Encrypt=True;TrustServerCertificate=True;",
|
||||
"Redis": "192.168.195.15:6379,abortConnect=false,connectTimeout=5000"
|
||||
},
|
||||
"Serilog": {
|
||||
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
|
||||
"MinimumLevel": {
|
||||
"Default": "Information",
|
||||
"Override": {
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"Microsoft.EntityFrameworkCore": "Warning",
|
||||
"System": "Warning"
|
||||
}
|
||||
},
|
||||
"WriteTo": [
|
||||
{
|
||||
"Name": "Console",
|
||||
"Args": {
|
||||
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "File",
|
||||
"Args": {
|
||||
"path": "logs/log-.txt",
|
||||
"rollingInterval": "Day",
|
||||
"retainedFileCountLimit": 30,
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
|
||||
}
|
||||
}
|
||||
],
|
||||
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,989 @@
|
|||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v10.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v10.0": {
|
||||
"HoneyBox.Api/1.0.0": {
|
||||
"dependencies": {
|
||||
"Autofac.Extensions.DependencyInjection": "10.0.0",
|
||||
"HoneyBox.Core": "1.0.0",
|
||||
"HoneyBox.Model": "1.0.0",
|
||||
"Microsoft.AspNetCore.OpenApi": "10.0.1",
|
||||
"Scalar.AspNetCore": "2.0.36",
|
||||
"Serilog.AspNetCore": "8.0.0",
|
||||
"Serilog.Sinks.Console": "5.0.0",
|
||||
"Serilog.Sinks.File": "5.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"HoneyBox.Api.dll": {}
|
||||
}
|
||||
},
|
||||
"Autofac/8.1.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Autofac.dll": {
|
||||
"assemblyVersion": "8.1.0.0",
|
||||
"fileVersion": "8.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Autofac.Extensions.DependencyInjection/10.0.0": {
|
||||
"dependencies": {
|
||||
"Autofac": "8.1.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Autofac.Extensions.DependencyInjection.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Azure.Core/1.25.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.AsyncInterfaces": "1.1.1",
|
||||
"System.Memory.Data": "1.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net5.0/Azure.Core.dll": {
|
||||
"assemblyVersion": "1.25.0.0",
|
||||
"fileVersion": "1.2500.22.33004"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Azure.Identity/1.7.0": {
|
||||
"dependencies": {
|
||||
"Azure.Core": "1.25.0",
|
||||
"Microsoft.Identity.Client": "4.47.2",
|
||||
"Microsoft.Identity.Client.Extensions.Msal": "2.19.3",
|
||||
"System.Security.Cryptography.ProtectedData": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Azure.Identity.dll": {
|
||||
"assemblyVersion": "1.7.0.0",
|
||||
"fileVersion": "1.700.22.46903"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mapster/7.4.0": {
|
||||
"dependencies": {
|
||||
"Mapster.Core": "1.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Mapster.dll": {
|
||||
"assemblyVersion": "7.4.0.0",
|
||||
"fileVersion": "7.4.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mapster.Core/1.2.1": {
|
||||
"runtime": {
|
||||
"lib/net7.0/Mapster.Core.dll": {
|
||||
"assemblyVersion": "1.2.1.0",
|
||||
"fileVersion": "1.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mapster.DependencyInjection/1.0.1": {
|
||||
"dependencies": {
|
||||
"Mapster": "7.4.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Mapster.DependencyInjection.dll": {
|
||||
"assemblyVersion": "1.0.1.0",
|
||||
"fileVersion": "1.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.OpenApi/10.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.OpenApi": "2.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/Microsoft.AspNetCore.OpenApi.dll": {
|
||||
"assemblyVersion": "10.0.1.0",
|
||||
"fileVersion": "10.0.125.57005"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/1.1.1": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "4.700.20.21406"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Data.SqlClient/5.1.1": {
|
||||
"dependencies": {
|
||||
"Azure.Identity": "1.7.0",
|
||||
"Microsoft.Data.SqlClient.SNI.runtime": "5.1.0",
|
||||
"Microsoft.Identity.Client": "4.47.2",
|
||||
"Microsoft.IdentityModel.JsonWebTokens": "6.24.0",
|
||||
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.24.0",
|
||||
"Microsoft.SqlServer.Server": "1.0.0",
|
||||
"System.Configuration.ConfigurationManager": "6.0.1",
|
||||
"System.Runtime.Caching": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.Data.SqlClient.dll": {
|
||||
"assemblyVersion": "5.0.0.0",
|
||||
"fileVersion": "5.0.0.0"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/net6.0/Microsoft.Data.SqlClient.dll": {
|
||||
"rid": "unix",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "5.0.0.0",
|
||||
"fileVersion": "5.0.0.0"
|
||||
},
|
||||
"runtimes/win/lib/net6.0/Microsoft.Data.SqlClient.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "5.0.0.0",
|
||||
"fileVersion": "5.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Data.SqlClient.SNI.runtime/5.1.0": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-arm/native/Microsoft.Data.SqlClient.SNI.dll": {
|
||||
"rid": "win-arm",
|
||||
"assetType": "native",
|
||||
"fileVersion": "5.1.0.0"
|
||||
},
|
||||
"runtimes/win-arm64/native/Microsoft.Data.SqlClient.SNI.dll": {
|
||||
"rid": "win-arm64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "5.1.0.0"
|
||||
},
|
||||
"runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.dll": {
|
||||
"rid": "win-x64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "5.1.0.0"
|
||||
},
|
||||
"runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.dll": {
|
||||
"rid": "win-x86",
|
||||
"assetType": "native",
|
||||
"fileVersion": "5.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions/8.0.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Relational/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.SqlServer/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Data.SqlClient": "5.1.1",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.SqlServer.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel/8.0.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyModel.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Identity.Client/4.47.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Abstractions": "6.24.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp2.1/Microsoft.Identity.Client.dll": {
|
||||
"assemblyVersion": "4.47.2.0",
|
||||
"fileVersion": "4.47.2.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Identity.Client.Extensions.Msal/2.19.3": {
|
||||
"dependencies": {
|
||||
"Microsoft.Identity.Client": "4.47.2",
|
||||
"System.Security.Cryptography.ProtectedData": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp2.1/Microsoft.Identity.Client.Extensions.Msal.dll": {
|
||||
"assemblyVersion": "2.19.3.0",
|
||||
"fileVersion": "2.19.3.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Abstractions/6.24.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.Abstractions.dll": {
|
||||
"assemblyVersion": "6.24.0.0",
|
||||
"fileVersion": "6.24.0.31013"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.JsonWebTokens/6.24.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Tokens": "6.24.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
|
||||
"assemblyVersion": "6.24.0.0",
|
||||
"fileVersion": "6.24.0.31013"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Logging/6.24.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Abstractions": "6.24.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.Logging.dll": {
|
||||
"assemblyVersion": "6.24.0.0",
|
||||
"fileVersion": "6.24.0.31013"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Protocols/6.24.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Logging": "6.24.0",
|
||||
"Microsoft.IdentityModel.Tokens": "6.24.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.Protocols.dll": {
|
||||
"assemblyVersion": "6.24.0.0",
|
||||
"fileVersion": "6.24.0.31013"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Protocols.OpenIdConnect/6.24.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Protocols": "6.24.0",
|
||||
"System.IdentityModel.Tokens.Jwt": "6.24.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": {
|
||||
"assemblyVersion": "6.24.0.0",
|
||||
"fileVersion": "6.24.0.31013"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens/6.24.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Logging": "6.24.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.Tokens.dll": {
|
||||
"assemblyVersion": "6.24.0.0",
|
||||
"fileVersion": "6.24.0.31013"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.OpenApi/2.0.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.OpenApi.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.SqlServer.Server/1.0.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.SqlServer.Server.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Win32.SystemEvents/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Pipelines.Sockets.Unofficial/2.2.8": {
|
||||
"runtime": {
|
||||
"lib/net5.0/Pipelines.Sockets.Unofficial.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "2.2.8.1080"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Scalar.AspNetCore/2.0.36": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Scalar.AspNetCore.dll": {
|
||||
"assemblyVersion": "2.0.36.0",
|
||||
"fileVersion": "2.0.36.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog/3.1.1": {
|
||||
"runtime": {
|
||||
"lib/net7.0/Serilog.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "3.1.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.AspNetCore/8.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "3.1.1",
|
||||
"Serilog.Extensions.Hosting": "8.0.0",
|
||||
"Serilog.Extensions.Logging": "8.0.0",
|
||||
"Serilog.Formatting.Compact": "2.0.0",
|
||||
"Serilog.Settings.Configuration": "8.0.0",
|
||||
"Serilog.Sinks.Console": "5.0.0",
|
||||
"Serilog.Sinks.Debug": "2.0.0",
|
||||
"Serilog.Sinks.File": "5.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Serilog.AspNetCore.dll": {
|
||||
"assemblyVersion": "0.0.0.0",
|
||||
"fileVersion": "8.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Extensions.Hosting/8.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "3.1.1",
|
||||
"Serilog.Extensions.Logging": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Serilog.Extensions.Hosting.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "8.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Extensions.Logging/8.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "3.1.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Serilog.Extensions.Logging.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "8.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Formatting.Compact/2.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "3.1.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Serilog.Formatting.Compact.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Settings.Configuration/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyModel": "8.0.0",
|
||||
"Serilog": "3.1.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Serilog.Settings.Configuration.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Sinks.Console/5.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "3.1.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Serilog.Sinks.Console.dll": {
|
||||
"assemblyVersion": "5.0.0.0",
|
||||
"fileVersion": "5.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Sinks.Debug/2.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "3.1.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/Serilog.Sinks.Debug.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Sinks.File/5.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "3.1.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net5.0/Serilog.Sinks.File.dll": {
|
||||
"assemblyVersion": "5.0.0.0",
|
||||
"fileVersion": "5.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"StackExchange.Redis/2.7.4": {
|
||||
"dependencies": {
|
||||
"Pipelines.Sockets.Unofficial": "2.2.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/StackExchange.Redis.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.7.4.20928"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Configuration.ConfigurationManager/6.0.1": {
|
||||
"dependencies": {
|
||||
"System.Security.Cryptography.ProtectedData": "6.0.0",
|
||||
"System.Security.Permissions": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Configuration.ConfigurationManager.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.922.41905"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Drawing.Common/6.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.SystemEvents": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Drawing.Common.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/net6.0/System.Drawing.Common.dll": {
|
||||
"rid": "unix",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
},
|
||||
"runtimes/win/lib/net6.0/System.Drawing.Common.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt/6.24.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.JsonWebTokens": "6.24.0",
|
||||
"Microsoft.IdentityModel.Tokens": "6.24.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.IdentityModel.Tokens.Jwt.dll": {
|
||||
"assemblyVersion": "6.24.0.0",
|
||||
"fileVersion": "6.24.0.31013"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Memory.Data/1.0.2": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Memory.Data.dll": {
|
||||
"assemblyVersion": "1.0.2.0",
|
||||
"fileVersion": "1.0.221.20802"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Runtime.Caching/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Configuration.ConfigurationManager": "6.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Runtime.Caching.dll": {
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/net6.0/System.Runtime.Caching.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.ProtectedData/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Security.Cryptography.ProtectedData.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Permissions/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Windows.Extensions": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Security.Permissions.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Windows.Extensions/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Drawing.Common": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Windows.Extensions.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/net6.0/System.Windows.Extensions.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"HoneyBox.Core/1.0.0": {
|
||||
"dependencies": {
|
||||
"HoneyBox.Infrastructure": "1.0.0",
|
||||
"HoneyBox.Model": "1.0.0",
|
||||
"Mapster": "7.4.0",
|
||||
"Mapster.DependencyInjection": "1.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"HoneyBox.Core.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"HoneyBox.Infrastructure/1.0.0": {
|
||||
"dependencies": {
|
||||
"Autofac": "8.1.0",
|
||||
"StackExchange.Redis": "2.7.4"
|
||||
},
|
||||
"runtime": {
|
||||
"HoneyBox.Infrastructure.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"HoneyBox.Model/1.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "8.0.0",
|
||||
"Microsoft.EntityFrameworkCore.SqlServer": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"HoneyBox.Model.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"HoneyBox.Api/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Autofac/8.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-O2QT+0DSTBR2Ojpacmcj3L0KrnnXTFrwLl/OW1lBUDiHhb89msHEHNhTA8AlK3jdFiAfMbAYyQaJVvRe6oSBcQ==",
|
||||
"path": "autofac/8.1.0",
|
||||
"hashPath": "autofac.8.1.0.nupkg.sha512"
|
||||
},
|
||||
"Autofac.Extensions.DependencyInjection/10.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ZjR/onUlP7BzQ7VBBigQepWLAyAzi3VRGX3pP6sBqkPRiT61fsTZqbTpRUKxo30TMgbs1o3y6bpLbETix4SJog==",
|
||||
"path": "autofac.extensions.dependencyinjection/10.0.0",
|
||||
"hashPath": "autofac.extensions.dependencyinjection.10.0.0.nupkg.sha512"
|
||||
},
|
||||
"Azure.Core/1.25.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-X8Dd4sAggS84KScWIjEbFAdt2U1KDolQopTPoHVubG2y3CM54f9l6asVrP5Uy384NWXjsspPYaJgz5xHc+KvTA==",
|
||||
"path": "azure.core/1.25.0",
|
||||
"hashPath": "azure.core.1.25.0.nupkg.sha512"
|
||||
},
|
||||
"Azure.Identity/1.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-eHEiCO/8+MfNc9nH5dVew/+FvxdaGrkRL4OMNwIz0W79+wtJyEoeRlXJ3SrXhoy9XR58geBYKmzMR83VO7bcAw==",
|
||||
"path": "azure.identity/1.7.0",
|
||||
"hashPath": "azure.identity.1.7.0.nupkg.sha512"
|
||||
},
|
||||
"Mapster/7.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-RYGoDqvS4WTKIq0HDyPBBVIj6N0mluOCXQ1Vk95JKseMHEsbCXSEGKSlP95oL+s42IXAXbqvHj7p0YaRBUcfqg==",
|
||||
"path": "mapster/7.4.0",
|
||||
"hashPath": "mapster.7.4.0.nupkg.sha512"
|
||||
},
|
||||
"Mapster.Core/1.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-11lokmfliBEMMmjeqxFGNpqGXq6tN96zFqpBmfYeahr4Ybk63oDmeJmOflsATjobYkX248g5Y62oQ2NNnZaeww==",
|
||||
"path": "mapster.core/1.2.1",
|
||||
"hashPath": "mapster.core.1.2.1.nupkg.sha512"
|
||||
},
|
||||
"Mapster.DependencyInjection/1.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-LfjnRIwx6WAo3ssq8PFeaHFaUz00BfSG9BhWgXsiDa3H5lDhG0lpMGDF6w2ZnooS4eHYmAv4f77VxmzpvgorNg==",
|
||||
"path": "mapster.dependencyinjection/1.0.1",
|
||||
"hashPath": "mapster.dependencyinjection.1.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.OpenApi/10.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-gMY53EggRIFawhue66GanHcm1Tcd0+QzzMwnMl60LrEoJhGgzA9qAbLx6t/ON3hX4flc2NcEbTK1Z5GCLYHcwA==",
|
||||
"path": "microsoft.aspnetcore.openapi/10.0.1",
|
||||
"hashPath": "microsoft.aspnetcore.openapi.10.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/1.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w==",
|
||||
"path": "microsoft.bcl.asyncinterfaces/1.1.1",
|
||||
"hashPath": "microsoft.bcl.asyncinterfaces.1.1.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Data.SqlClient/5.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-MW5E9HFvCaV069o8b6YpuRDPBux8s96qDnOJ+4N9QNUCs7c5W3KxwQ+ftpAjbMUlImL+c9WR+l+f5hzjkqhu2g==",
|
||||
"path": "microsoft.data.sqlclient/5.1.1",
|
||||
"hashPath": "microsoft.data.sqlclient.5.1.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Data.SqlClient.SNI.runtime/5.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-jVsElisM5sfBzaaV9kdq2NXZLwIbytetnsOIlJ0cQGgQP4zFNBmkfHBnpwtmKrtBJBEV9+9PVQPVrcCVhDgcIg==",
|
||||
"path": "microsoft.data.sqlclient.sni.runtime/5.1.0",
|
||||
"hashPath": "microsoft.data.sqlclient.sni.runtime.5.1.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-SoODat83pGQUpWB9xULdMX6tuKpq/RTXDuJ2WeC1ldUKcKzLkaFJD1n+I0nOLY58odez/e7z8b6zdp235G/kyg==",
|
||||
"path": "microsoft.entityframeworkcore/8.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-VR22s3+zoqlVI7xauFKn1znSIFHO8xuILT+noSwS8bZCKcHz0ydkTDQMuaxSa5WBaQrZmwtTz9rmRvJ7X8mSPQ==",
|
||||
"path": "microsoft.entityframeworkcore.abstractions/8.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.abstractions.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Relational/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-fFKkr24cYc7Zw5T6DC4tEyOEPgPbq23BBmym1r9kn4ET9F3HKaetpOeQtV2RryYyUxEeNkJuxgfiZHTisqZc+A==",
|
||||
"path": "microsoft.entityframeworkcore.relational/8.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.relational.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.SqlServer/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-GeOmafQn64HyQtYcI/Omv/D/YVHd1zEkWbP3zNQu4oC+usE9K0qOp0R8KgWWFEf8BU4tXuYbok40W0SjfbaK/A==",
|
||||
"path": "microsoft.entityframeworkcore.sqlserver/8.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.sqlserver.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-NSmDw3K0ozNDgShSIpsZcbFIzBX4w28nDag+TfaQujkXGazBm+lid5onlWoCBy4VsLxqnnKjEBbGSJVWJMf43g==",
|
||||
"path": "microsoft.extensions.dependencymodel/8.0.0",
|
||||
"hashPath": "microsoft.extensions.dependencymodel.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Identity.Client/4.47.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-SPgesZRbXoDxg8Vv7k5Ou0ee7uupVw0E8ZCc4GKw25HANRLz1d5OSr0fvTVQRnEswo5Obk8qD4LOapYB+n5kzQ==",
|
||||
"path": "microsoft.identity.client/4.47.2",
|
||||
"hashPath": "microsoft.identity.client.4.47.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Identity.Client.Extensions.Msal/2.19.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-zVVZjn8aW7W79rC1crioDgdOwaFTQorsSO6RgVlDDjc7MvbEGz071wSNrjVhzR0CdQn6Sefx7Abf1o7vasmrLg==",
|
||||
"path": "microsoft.identity.client.extensions.msal/2.19.3",
|
||||
"hashPath": "microsoft.identity.client.extensions.msal.2.19.3.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Abstractions/6.24.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-X6aBK56Ot15qKyG7X37KsPnrwah+Ka55NJWPppWVTDi8xWq7CJgeNw2XyaeHgE1o/mW4THwoabZkBbeG2TPBiw==",
|
||||
"path": "microsoft.identitymodel.abstractions/6.24.0",
|
||||
"hashPath": "microsoft.identitymodel.abstractions.6.24.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.JsonWebTokens/6.24.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-XDWrkThcxfuWp79AvAtg5f+uRS1BxkIbJnsG/e8VPzOWkYYuDg33emLjp5EWcwXYYIDsHnVZD/00kM/PYFQc/g==",
|
||||
"path": "microsoft.identitymodel.jsonwebtokens/6.24.0",
|
||||
"hashPath": "microsoft.identitymodel.jsonwebtokens.6.24.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Logging/6.24.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-qLYWDOowM/zghmYKXw1yfYKlHOdS41i8t4hVXr9bSI90zHqhyhQh9GwVy8pENzs5wHeytU23DymluC9NtgYv7w==",
|
||||
"path": "microsoft.identitymodel.logging/6.24.0",
|
||||
"hashPath": "microsoft.identitymodel.logging.6.24.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Protocols/6.24.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-+NzKCkvsQ8X1r/Ff74V7CFr9OsdMRaB6DsV+qpH7NNLdYJ8O4qHbmTnNEsjFcDmk/gVNDwhoL2gN5pkPVq0lwQ==",
|
||||
"path": "microsoft.identitymodel.protocols/6.24.0",
|
||||
"hashPath": "microsoft.identitymodel.protocols.6.24.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Protocols.OpenIdConnect/6.24.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-a/2RRrc8C9qaw8qdD9hv1ES9YKFgxaqr/SnwMSLbwQZJSUQDd4qx1K4EYgWaQWs73R+VXLyKSxN0f/uE9CsBiQ==",
|
||||
"path": "microsoft.identitymodel.protocols.openidconnect/6.24.0",
|
||||
"hashPath": "microsoft.identitymodel.protocols.openidconnect.6.24.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens/6.24.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ZPqHi86UYuqJXJ7bLnlEctHKkPKT4lGUFbotoCNiXNCSL02emYlcxzGYsRGWWmbFEcYDMi2dcTLLYNzHqWOTsw==",
|
||||
"path": "microsoft.identitymodel.tokens/6.24.0",
|
||||
"hashPath": "microsoft.identitymodel.tokens.6.24.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.OpenApi/2.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-GGYLfzV/G/ct80OZ45JxnWP7NvMX1BCugn/lX7TH5o0lcVaviavsLMTxmFV2AybXWjbi3h6FF1vgZiTK6PXndw==",
|
||||
"path": "microsoft.openapi/2.0.0",
|
||||
"hashPath": "microsoft.openapi.2.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.SqlServer.Server/1.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-N4KeF3cpcm1PUHym1RmakkzfkEv3GRMyofVv40uXsQhCQeglr2OHNcUk2WOG51AKpGO8ynGpo9M/kFXSzghwug==",
|
||||
"path": "microsoft.sqlserver.server/1.0.0",
|
||||
"hashPath": "microsoft.sqlserver.server.1.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Win32.SystemEvents/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==",
|
||||
"path": "microsoft.win32.systemevents/6.0.0",
|
||||
"hashPath": "microsoft.win32.systemevents.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"Pipelines.Sockets.Unofficial/2.2.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==",
|
||||
"path": "pipelines.sockets.unofficial/2.2.8",
|
||||
"hashPath": "pipelines.sockets.unofficial.2.2.8.nupkg.sha512"
|
||||
},
|
||||
"Scalar.AspNetCore/2.0.36": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-piAamX1ArrRA3+Vgz8FaO+oeintpD+qD4d5DmGcW+RtKB76H7FIqZifemPzOEl8cJYjhmwYr81gJOPaJF9+5KQ==",
|
||||
"path": "scalar.aspnetcore/2.0.36",
|
||||
"hashPath": "scalar.aspnetcore.2.0.36.nupkg.sha512"
|
||||
},
|
||||
"Serilog/3.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-P6G4/4Kt9bT635bhuwdXlJ2SCqqn2nhh4gqFqQueCOr9bK/e7W9ll/IoX1Ter948cV2Z/5+5v8pAfJYUISY03A==",
|
||||
"path": "serilog/3.1.1",
|
||||
"hashPath": "serilog.3.1.1.nupkg.sha512"
|
||||
},
|
||||
"Serilog.AspNetCore/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-FAjtKPZ4IzqFQBqZKPv6evcXK/F0ls7RoXI/62Pnx2igkDZ6nZ/jn/C/FxVATqQbEQvtqP+KViWYIe4NZIHa2w==",
|
||||
"path": "serilog.aspnetcore/8.0.0",
|
||||
"hashPath": "serilog.aspnetcore.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Extensions.Hosting/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-db0OcbWeSCvYQkHWu6n0v40N4kKaTAXNjlM3BKvcbwvNzYphQFcBR+36eQ/7hMMwOkJvAyLC2a9/jNdUL5NjtQ==",
|
||||
"path": "serilog.extensions.hosting/8.0.0",
|
||||
"hashPath": "serilog.extensions.hosting.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Extensions.Logging/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==",
|
||||
"path": "serilog.extensions.logging/8.0.0",
|
||||
"hashPath": "serilog.extensions.logging.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Formatting.Compact/2.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ob6z3ikzFM3D1xalhFuBIK1IOWf+XrQq+H4KeH4VqBcPpNcmUgZlRQ2h3Q7wvthpdZBBoY86qZOI2LCXNaLlNA==",
|
||||
"path": "serilog.formatting.compact/2.0.0",
|
||||
"hashPath": "serilog.formatting.compact.2.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Settings.Configuration/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-nR0iL5HwKj5v6ULo3/zpP8NMcq9E2pxYA6XKTSWCbugVs4YqPyvaqaKOY+OMpPivKp7zMEpax2UKHnDodbRB0Q==",
|
||||
"path": "serilog.settings.configuration/8.0.0",
|
||||
"hashPath": "serilog.settings.configuration.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Sinks.Console/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-IZ6bn79k+3SRXOBpwSOClUHikSkp2toGPCZ0teUkscv4dpDg9E2R2xVsNkLmwddE4OpNVO3N0xiYsAH556vN8Q==",
|
||||
"path": "serilog.sinks.console/5.0.0",
|
||||
"hashPath": "serilog.sinks.console.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Sinks.Debug/2.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Y6g3OBJ4JzTyyw16fDqtFcQ41qQAydnEvEqmXjhwhgjsnG/FaJ8GUqF5ldsC/bVkK8KYmqrPhDO+tm4dF6xx4A==",
|
||||
"path": "serilog.sinks.debug/2.0.0",
|
||||
"hashPath": "serilog.sinks.debug.2.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Sinks.File/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
|
||||
"path": "serilog.sinks.file/5.0.0",
|
||||
"hashPath": "serilog.sinks.file.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"StackExchange.Redis/2.7.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lD6a0lGOCyV9iuvObnzStL74EDWAyK31w6lS+Md9gIz1eP4U6KChDIflzTdtrktxlvVkeOvPtkaYOcm4qjbHSw==",
|
||||
"path": "stackexchange.redis/2.7.4",
|
||||
"hashPath": "stackexchange.redis.2.7.4.nupkg.sha512"
|
||||
},
|
||||
"System.Configuration.ConfigurationManager/6.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-jXw9MlUu/kRfEU0WyTptAVueupqIeE3/rl0EZDMlf8pcvJnitQ8HeVEp69rZdaStXwTV72boi/Bhw8lOeO+U2w==",
|
||||
"path": "system.configuration.configurationmanager/6.0.1",
|
||||
"hashPath": "system.configuration.configurationmanager.6.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Drawing.Common/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==",
|
||||
"path": "system.drawing.common/6.0.0",
|
||||
"hashPath": "system.drawing.common.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt/6.24.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Qibsj9MPWq8S/C0FgvmsLfIlHLE7ay0MJIaAmK94ivN3VyDdglqReed5qMvdQhSL0BzK6v0Z1wB/sD88zVu6Jw==",
|
||||
"path": "system.identitymodel.tokens.jwt/6.24.0",
|
||||
"hashPath": "system.identitymodel.tokens.jwt.6.24.0.nupkg.sha512"
|
||||
},
|
||||
"System.Memory.Data/1.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==",
|
||||
"path": "system.memory.data/1.0.2",
|
||||
"hashPath": "system.memory.data.1.0.2.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.Caching/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-E0e03kUp5X2k+UAoVl6efmI7uU7JRBWi5EIdlQ7cr0NpBGjHG4fWII35PgsBY9T4fJQ8E4QPsL0rKksU9gcL5A==",
|
||||
"path": "system.runtime.caching/6.0.0",
|
||||
"hashPath": "system.runtime.caching.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Cryptography.ProtectedData/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==",
|
||||
"path": "system.security.cryptography.protecteddata/6.0.0",
|
||||
"hashPath": "system.security.cryptography.protecteddata.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Permissions/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==",
|
||||
"path": "system.security.permissions/6.0.0",
|
||||
"hashPath": "system.security.permissions.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Windows.Extensions/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==",
|
||||
"path": "system.windows.extensions/6.0.0",
|
||||
"hashPath": "system.windows.extensions.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"HoneyBox.Core/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"HoneyBox.Infrastructure/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"HoneyBox.Model/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net10.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "10.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "10.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.GC.Server": true,
|
||||
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"Version":1,"ManifestType":"Build","Endpoints":[]}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=localhost;Database=HoneyBox;User Id=sa;Password=YourPassword;TrustServerCertificate=True;",
|
||||
"Redis": "localhost:6379,abortConnect=false,connectTimeout=5000"
|
||||
},
|
||||
"Serilog": {
|
||||
"MinimumLevel": {
|
||||
"Default": "Debug",
|
||||
"Override": {
|
||||
"Microsoft": "Information",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"Microsoft.EntityFrameworkCore": "Information"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=192.168.195.15;uid=sa;pwd=Dbt@com@123;Database=honey_box;MultipleActiveResultSets=true;pooling=true;min pool size=5;max pool size=32767;connect timeout=20;Encrypt=True;TrustServerCertificate=True;",
|
||||
"Redis": "192.168.195.15:6379,abortConnect=false,connectTimeout=5000"
|
||||
},
|
||||
"Serilog": {
|
||||
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
|
||||
"MinimumLevel": {
|
||||
"Default": "Information",
|
||||
"Override": {
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"Microsoft.EntityFrameworkCore": "Warning",
|
||||
"System": "Warning"
|
||||
}
|
||||
},
|
||||
"WriteTo": [
|
||||
{
|
||||
"Name": "Console",
|
||||
"Args": {
|
||||
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "File",
|
||||
"Args": {
|
||||
"path": "logs/log-.txt",
|
||||
"rollingInterval": "Day",
|
||||
"retainedFileCountLimit": 30,
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
|
||||
}
|
||||
}
|
||||
],
|
||||
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user