This commit is contained in:
2026-03-25 14:55:34 +08:00
commit 2c44b3a4b2
131 changed files with 7453 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
namespace StopShopping.Services.Models.Resp;
public class AccessToken
{
/// <summary>
/// token
/// </summary>
/// <value></value>
public string? Token { get; set; }
/// <summary>
/// 有效秒
/// </summary>
/// <value></value>
public int ExpiresIn { get; set; }
}

View File

@@ -0,0 +1,54 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// 收货地址
/// </summary>
public class Address
{
public int Id { get; set; }
/// <summary>
/// 姓名
/// </summary>
/// <value></value>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 联系电话
/// </summary>
/// <value></value>
public string Telephone { get; set; } = string.Empty;
/// <summary>
/// 自定义标签
/// </summary>
/// <value></value>
public string? Tag { get; set; }
/// <summary>
/// 是否默认地址
/// </summary>
/// <value></value>
public bool Default { get; set; }
/// <summary>
/// 区域id表示省/直辖市
/// </summary>
/// <value></value>
public int DistrictLevel1Id { get; set; }
/// <summary>
/// 区域id表示市/直辖市时为空
/// </summary>
/// <value></value>
public int? DistrictLevel2Id { get; set; }
/// <summary>
/// 区域id表示区
/// </summary>
/// <value></value>
public int DistrictLevel3Id { get; set; }
/// <summary>
/// 区域id表示街道/镇
/// </summary>
/// <value></value>
public int DistrictLevel4Id { get; set; }
/// <summary>
/// 详细地址
/// </summary>
/// <value></value>
public string? Detail { get; set; }
}

View File

@@ -0,0 +1,18 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// csrf token
/// </summary>
public class AntiForgeryToken
{
/// <summary>
/// csrf请求头
/// </summary>
/// <value></value>
public string? HeaderName { get; set; }
/// <summary>
/// csrf token
/// </summary>
/// <value></value>
public string? Token { get; set; }
}

View File

@@ -0,0 +1,64 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// 强类型返回值
/// </summary>
/// <typeparam name="T"></typeparam>
public class ApiResponse<T>
{
public ApiResponse()
{ }
public ApiResponse(T data)
{
Data = data;
}
/// <summary>
/// 是否成功
/// </summary>
/// <value></value>
public bool IsSucced { get; set; } = true;
/// <summary>
/// 错误消息
/// </summary>
/// <value></value>
public string? Message { get; set; }
/// <summary>
/// 关联数据
/// </summary>
/// <value></value>
public T? Data { get; set; }
public ApiResponse<T> Failed(string message)
{
IsSucced = false;
Message = message;
return this;
}
}
/// <summary>
/// 强类型返回值,只返回成功与否和消息
/// </summary>
public class ApiResponse : ApiResponse<object?>
{
public ApiResponse(bool isSucced = true, string message = "")
{
IsSucced = isSucced;
Message = message;
}
public static ApiResponse Succed(string message = "")
{
return new ApiResponse(message: message);
}
public static new ApiResponse Failed(string message)
{
return new ApiResponse(false, message);
}
}

View File

@@ -0,0 +1,23 @@
namespace StopShopping.Services.Models.Resp;
public record Category
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; } = string.Empty;
/// <summary>
/// logo地址
/// </summary>
/// <value></value>
public string LogoUrl { get; set; } = string.Empty;
/// <summary>
/// 层级中序号
/// </summary>
/// <value></value>
public int Order { get; set; }
/// <summary>
/// 下级分类列表
/// </summary>
/// <value></value>
public List<Category> Children { get; set; } = [];
}

View File

@@ -0,0 +1,29 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// 行政区划
/// </summary>
public class District
{
public int Id { get; set; }
/// <summary>
/// 父级id
/// </summary>
/// <value></value>
public int ParentId { get; set; }
/// <summary>
/// 层级1[2]34
/// </summary>
/// <value></value>
public int Level { get; set; }
/// <summary>
/// 名称
/// </summary>
/// <value></value>
public string FullName { get; set; } = string.Empty;
/// <summary>
/// 下级,街道无下级
/// </summary>
/// <value></value>
public List<District> Children { get; set; } = [];
}

View File

@@ -0,0 +1,18 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// 文件上传结果
/// </summary>
public class FileUpload
{
/// <summary>
/// 新名,上传后重命名
/// </summary>
/// <value></value>
public string NewName { get; set; } = string.Empty;
/// <summary>
/// Url
/// </summary>
/// <value></value>
public string Url { get; set; } = string.Empty;
}

View File

@@ -0,0 +1,32 @@
namespace StopShopping.Services.Models.Resp;
public class PagedResult<T>
{
public int PageCount { get; set; }
public int PageSize { get; set; }
public int PageIndex { get; set; }
public List<T> Data { get; set; } = [];
}
public static class PagedQueryExtensions
{
public static async Task<PagedResult<T>> ToPagedAsync<T>(this IAsyncEnumerable<T> query
, int pageIndex = 1
, int pageSize = 20)
{
PagedResult<T> result = new()
{
PageSize = pageSize,
PageIndex = pageIndex
};
var total = await query.CountAsync();
result.PageCount = (int)Math.Ceiling(total / (decimal)result.PageSize);
result.Data = await query
.Skip((result.PageIndex - 1) * result.PageSize)
.Take(result.PageSize)
.ToListAsync();
return result;
}
}

View File

@@ -0,0 +1,62 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// 列表商品
/// </summary>
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = "";
/// <summary>
/// 简介
/// </summary>
/// <value></value>
public string? Description { get; set; }
/// <summary>
/// 图片地址
/// </summary>
/// <value></value>
public string? LogoUrl { get; set; }
/// <summary>
/// 分类名称
/// </summary>
/// <value></value>
public string CategoryName { get; set; } = "";
/// <summary>
/// 最小销售单元
/// </summary>
/// <value></value>
public string MinimumUnit { get; set; } = "";
/// <summary>
/// 单价
/// </summary>
/// <value></value>
public decimal UnitPrice { get; set; }
/// <summary>
/// 已售数量
/// </summary>
/// <value></value>
public int SoldAmount { get; set; }
/// <summary>
/// 添加时间
/// </summary>
/// <value></value>
public string CreateTime { get; set; } = "";
}
/// <summary>
/// 详情商品
/// </summary>
public class ProductInfo : Product
{
/// <summary>
/// 分类id
/// </summary>
/// <value></value>
public int CategoryId { get; set; }
/// <summary>
/// 详情
/// </summary>
/// <value></value>
public string? Detail { get; set; }
}

View File

@@ -0,0 +1,41 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// 竞标
/// </summary>
public class Reply
{
public int Id { get; set; }
public int ProductId { get; set; }
public string ProductName { get; set; } = string.Empty;
/// <summary>
/// 单价
/// </summary>
/// <value></value>
public decimal UnitPrice { get; set; }
/// <summary>
/// 最小销售单元
/// </summary>
/// <value></value>
public string MinimumUnit { get; set; } = string.Empty;
/// <summary>
/// 数量
/// </summary>
/// <value></value>
public int Amount { get; set; }
/// <summary>
/// 竞标时间
/// </summary>
/// <value></value>
public string ReplyTime { get; set; } = string.Empty;
/// <summary>
/// 竞标者
/// </summary>
/// <value></value>
public string Replier { get; set; } = string.Empty;
/// <summary>
/// 留言
/// </summary>
/// <value></value>
public string? Memo { get; set; }
}

View File

@@ -0,0 +1,59 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// 列表需求
/// </summary>
public class Request
{
public int Id { get; set; }
/// <summary>
/// 序列号
/// </summary>
/// <value></value>
public string SerialNo { get; set; } = string.Empty;
/// <summary>
/// 状态
/// </summary>
/// <value></value>
public RequestStatus Status { get; set; }
/// <summary>
/// 名称
/// </summary>
/// <value></value>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 描述
/// </summary>
/// <value></value>
public string? Description { get; set; }
/// <summary>
/// 分类id
/// </summary>
/// <value></value>
public int CategoryId { get; set; }
/// <summary>
/// 分类名称
/// </summary>
/// <value></value>
public string CategoryName { get; set; } = string.Empty;
/// <summary>
/// 发布者
/// </summary>
/// <value></value>
public string Publisher { get; set; } = string.Empty;
/// <summary>
/// 发布时间
/// </summary>
/// <value></value>
public string PublishTime { get; set; } = string.Empty;
/// <summary>
/// 截止日期
/// </summary>
/// <value></value>
public string Deadline { get; set; } = string.Empty;
/// <summary>
/// 竞标者数量
/// </summary>
/// <value></value>
public int ReplyAmount { get; set; }
}

View File

@@ -0,0 +1,47 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
/// 登录返回
/// </summary>
public abstract class SignIn
{
/// <summary>
/// 访问令牌
/// </summary>
/// <returns></returns>
public AccessToken AccessToken { get; set; } = new();
}
/// <summary>
/// 登录用户
/// </summary>
public class SignInUser : SignIn
{
/// <summary>
/// 昵称
/// </summary>
/// <value></value>
public string NickName { get; set; } = string.Empty;
/// <summary>
/// 头像地址
/// </summary>
/// <value></value>
public string? AvatarUrl { get; set; }
/// <summary>
/// 默认角色
/// </summary>
/// <value></value>
public UserRoles DefaultRole { get; set; }
}
/// <summary>
/// 登录管理员
/// </summary>
public class SignInAdmin : SignIn
{
/// <summary>
/// 昵称
/// </summary>
/// <value></value>
public string NickName { get; set; } = string.Empty;
}

View File

@@ -0,0 +1,38 @@
namespace StopShopping.Services.Models.Resp;
/// <summary>
///
/// </summary>
public class User
{
/// <summary>
/// 登录账号
/// </summary>
/// <value></value>
public string Account { get; set; } = string.Empty;
/// <summary>
/// 昵称
/// </summary>
/// <value></value>
public string NickName { get; set; } = string.Empty;
/// <summary>
/// 电话
/// </summary>
/// <value></value>
public string? Telephone { get; set; }
/// <summary>
/// 默认角色
/// </summary>
/// <value></value>
public UserRoles DefaultRole { get; set; }
/// <summary>
/// 头像地址
/// </summary>
/// <value></value>
public string? AvatarUrl { get; set; }
/// <summary>
/// 上次登录时间
/// </summary>
/// <value></value>
public string? LastLoginTime { get; set; }
}