This commit is contained in:
2024-10-13 17:04:47 +08:00
commit 2183073421
96 changed files with 7949 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
using LMS.Tools.Extensions;
namespace LMS.Repository.Models.DB
{
public class ApiEndpoints
{
public string Id { get; set; }
public string HttpMethod { get; set; }
public string Path { get; set; }
public DateTime CreateTime { get; set; } = BeijingTimeExtension.GetBeijingTime();
public List<string> RequiredPermissionIds { get; set; }
public long CreatedId { get; set; }
public long UpdatedId { get; set; }
}
}
+62
View File
@@ -0,0 +1,62 @@
using static LMS.Common.Enums.MachineEnum;
namespace LMS.Repository.Models.DB
{
public class Machine
{
/// <summary>
/// ID 主键
/// </summary>
public string Id { get; set; }
/// <summary>
/// 机器ID
/// </summary>
public string MachineId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 停用时间
/// </summary>
public DateTime? DeactivationTime { get; set; }
/// <summary>
/// 状态(是否可用)
/// </summary>
public MachineStatus Status { get; set; }
/// <summary>
/// 创建者ID
/// </summary>
public long CreateId { get; set; }
/// <summary>
/// 更新者ID
/// </summary>
public long UpdateId { get; set; }
/// <summary>
/// 使用状态(试用,永久)
/// </summary>
public MachineUseStatus UseStatus { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 所属用户ID
/// </summary>
public required long UserID { get; set; }
}
}
+82
View File
@@ -0,0 +1,82 @@
using LMS.Common.Enums;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
using static LMS.Common.Enums.PermissionEnum;
namespace LMS.Repository.Models.DB
{
/// <summary>
/// 所有的权限集合
/// </summary>
public class Permission
{
/// <summary>
/// 权限的ID
/// </summary>
public string Id { get; set; }
/// <summary>
/// 用户的ID
/// </summary>
public long? UserId { get; set; }
/// <summary>
/// 机器码的ID(是ID,不是机器码)
/// </summary>
public string? MachineId { get; set; }
/// <summary>
/// 角色ID
/// </summary>
public long? RoleId { get; set; }
/// <summary>
/// 权限类型的ID(子权限)
/// </summary>
[Column(TypeName = "json")]
public string PermissionTypeIds { get; set; }
/// <summary>
/// 权限对应的Code
/// </summary>
public string PermissionCode { get; set; }
/// <summary>
/// 权限类型
/// </summary>
public PType Type { get; set; }
/// <summary>
/// 创建人ID
/// </summary>
public long CreateUserId { get; set; }
/// <summary>
/// 更新人ID
/// </summary>
public long UpdateUserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
[NotMapped]
public List<string> PermissionTypeIdsJson
{
get => JsonSerializer.Deserialize<List<string>>(PermissionTypeIds) ?? [];
set => PermissionTypeIds = JsonSerializer.Serialize(value);
}
}
}
+56
View File
@@ -0,0 +1,56 @@
using LMS.Common.Enums;
using static LMS.Common.Enums.PermissionEnum;
namespace LMS.Repository.Models.DB
{
/// <summary>
/// 存放权限的表
/// </summary>
public class PermissionType
{
/// <summary>
/// 权限ID
/// </summary>
public string Id { get; set; }
/// <summary>
/// 权限的名字
/// </summary>
public string Name { get; set; }
/// <summary>
/// 表示权限的代码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 权限的分类(user和machine
/// </summary>
public PermissionEnum.PermissionType Type { get; set; }
/// <summary>
/// 创建者ID
/// </summary>
public long CreateUserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新者ID
/// </summary>
public long UpdateUserId { get; set; }
/// <summary>
/// 更新权限的时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 权限的描述
/// </summary>
public string? Remark { get; set; }
}
}
+71
View File
@@ -0,0 +1,71 @@
namespace LMS.Repository.Models.DB
{
public class Prompt
{
/// <summary>
/// ID
/// </summary>
public string Id { get; set; }
/// <summary>
/// 提示词预设的名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 提示词的类型ID
/// </summary>
public string PromptTypeId { get; set; }
/// <summary>
/// 提示词的类型编码
/// </summary>
public string PromptTypeCode { get; set; }
/// <summary>
/// 提示词预设字符串
/// </summary>
public string PromptString { get; set; }
/// <summary>
/// 当前版本
/// </summary>
public int Version { get; set; }
/// <summary>
/// 状态
/// </summary>
public string Status { get; set; }
/// <summary>
/// 提示词的描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 创建者
/// </summary>
public string CreateUserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新者
/// </summary>
public string UpdateUserId { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
}
}
+61
View File
@@ -0,0 +1,61 @@
namespace LMS.Repository.Models.DB
{
/// <summary>
/// 提示词类型的库
/// </summary>
public class PromptType
{
/// <summary>
/// ID
/// </summary>
public string Id { get; set; }
/// <summary>
/// 提示词类型编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 提示词类型名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 提示词类型描述
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 提示词类型状态
/// </summary>
public string Status { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 创建用户ID
/// </summary>
public string CreateUserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新者ID
/// </summary>
public string UpdateUserId { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
+46
View File
@@ -0,0 +1,46 @@
namespace LMS.Repository.Models.DB
{
public class RefreshTokens
{
/// <summary>
/// 主键 ID
/// </summary>
public required string Id { get; set; }
/// <summary>
/// 用户ID
/// </summary>
public required long UserId { get; set; }
/// <summary>
/// Token
/// </summary>
public required string Token { get; set; }
/// <summary>
/// 到期时间
/// </summary>
public DateTime Expiration { get; set; }
/// <summary>
/// 是不是失效
/// </summary>
public Boolean Revoked { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedTime { get; set; }
/// <summary>
/// 上次校验IP
/// </summary>
public required string LastCheckIp { get; set; }
/// <summary>
/// 设备信息,浏览器信息等
/// </summary>
public required string DeviceInfo { get; set; }
}
}
+18
View File
@@ -0,0 +1,18 @@
using LMS.Tools.Extensions;
using Microsoft.AspNetCore.Identity;
namespace LMS.Repository.Models.DB
{
public class Role : IdentityRole<long>
{
public long CreatedUserId { get; set; }
public long UpdatedUserId { get; set; }
public DateTime CreatedTime { get; set; }
public DateTime UpdatedTime { get; set; }
public string? Remark { get; set; } = string.Empty;
}
}
+57
View File
@@ -0,0 +1,57 @@
using LMS.Tools.Extensions;
namespace LMS.Repository.DB
{
public class RsaKeys
{
/// <summary>
/// ID 主键
/// </summary>
public required string Id { get; set; }
/// <summary>
/// 使用次数
/// </summary>
public int UseCount { get; set; }
/// <summary>
/// 公钥
/// </summary>
public required string PublicKey { get; set; }
/// <summary>
/// 加密后的私钥
/// </summary>
public required string EncryptedPrivateKey { get; set; }
/// <summary>
/// 加密私钥的随机字符串
/// </summary>
public required string EncryptionKey { get; set; } // 加密私钥的随机字符串
/// <summary>
/// 加密私钥的随机IV
/// </summary>
public required string EncryptionIV { get; set; } // 加密私钥的随机字符串
/// <summary>
/// Key的版本
/// </summary>
public int KeyVersion { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedTime { get; set; } = BeijingTimeExtension.GetBeijingTime();
/// <summary>
/// 上次使用的时间
/// </summary>
public DateTime? LastUsed { get; set; }
/// <summary>
/// 到期时间
/// </summary>
public DateTime ExpirationTime { get; set; }
}
}
+69
View File
@@ -0,0 +1,69 @@
using LMS.Repository.User;
using Microsoft.AspNetCore.Identity;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
namespace LMS.Repository.Models.DB
{
public class User : IdentityUser<long>
{
[MaxLength(50)]
public string NickName { get; set; }
/// <summary>
/// 允许使用的机器码数量
/// </summary>
public long AllDeviceCount { get; set; } = 1;
/// <summary>
/// 代理分成比例
/// </summary>
public double AgentPercent { get; set; } = 0.00;
/// <summary>
/// 免费修改机器码次数
/// </summary>
public long FreeCount { get; set; } = 0;
/// <summary>
/// 用户的一些简单的操作
/// </summary>
[Column(TypeName = "json")]
public string? Options { get; set; } = "{}";
[Column(TypeName = "datetime")]
public DateTime CreatedDate { get; set; } = DateTime.Now;
[Column(TypeName = "datetime")]
public DateTime UpdatedDate { get; set; } = DateTime.Now;
[Column(TypeName = "datetime")]
public DateTime LastLoginDate { get; set; } = DateTime.Now;
public string? LastLoginIp { get; set; } = "";
public string? LastLoginDevice { get; set; } = "";
/// <summary>
/// 上级ID
/// </summary>
public long? ParentId { get; set; }
/// <summary>
/// 推广码
/// </summary>
public string AffiliateCode { get; set; } = string.Empty;
/// <summary>
/// 实际使用的Options
/// </summary>
[NotMapped]
public UserPrivateOptions OptionsJson
{
get => JsonSerializer.Deserialize<UserPrivateOptions>(Options ?? "{}") ?? new UserPrivateOptions();
set => Options = JsonSerializer.Serialize(value);
}
}
}
+11
View File
@@ -0,0 +1,11 @@
namespace LMS.Repository.Models.DB
{
public class UserRoles
{
public required string RoleId { get; set; }
public required string UserId { get; set; }
}
}
+19
View File
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LMS.Repository.DTO
{
public class CollectionResponse<T>
{
public int Current { get; set; }
public int Total { get; set; }
public List<T> Collection { get; set; } = new List<T>();
}
}
+14
View File
@@ -0,0 +1,14 @@
using LMS.Repository.DTO.UserDto;
using LMS.Repository.Models.DB;
namespace LMS.Repository.DTO
{
public class MachineDetailDto : Machine
{
public UserBaseDto? CreatedUser { get; set; }
public UserBaseDto? UpdatedUser { get; set; }
public UserBaseDto? OwnUser { get; set; }
}
}
+30
View File
@@ -0,0 +1,30 @@
using static LMS.Common.Enums.MachineEnum;
namespace LMS.Repository.DTO.MachineResponse
{
public class MachineDto
{
public class MachineStatusResponse
{
/// <summary>
/// 机器状态
/// </summary>
public MachineStatus Status { get; set; }
/// <summary>
/// 到期时间
/// </summary>
public DateTime? DeactivationTime { get; set; }
/// <summary>
/// 机器码ID
/// </summary>
public string Id { get; set; }
/// <summary>
/// 机器码
/// </summary>
public string MachineId { get; set; }
}
}
}
+21
View File
@@ -0,0 +1,21 @@
using LMS.Repository.DTO.UserDto;
namespace LMS.Repository.DTO
{
public class RoleDto
{
public long Id { get; set; }
public string Name { get; set; } = string.Empty;
public UserBaseDto? CreatedUser { get; set; }
public UserBaseDto? UpdeatedUser { get; set; }
public DateTime CreatedTime { get; set; }
public DateTime UpdatedTime { get; set; }
public string Remark { get; set; } = string.Empty;
}
}
+10
View File
@@ -0,0 +1,10 @@
namespace LMS.Repository.DTO;
public class SoftwareDao
{
public string Version { get; set; }
public string Author { get; set; }
public string Description { get; set; }
}
@@ -0,0 +1,44 @@
namespace LMS.Repository.DTO.UserDto;
public class UserAgentInfoDto
{
/// <summary>
/// 用户ID
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 用户名称
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public string NickName { get; set; }
/// <summary>
/// 用户的邀请码
/// </summary>
public string AffiliateCode { get; set; }
/// <summary>
/// 用户的代理分成比例
/// </summary>
public double AgentPercent { get; set; }
/// <summary>
/// 邀请人数
/// </summary>
public int AffiliateNumber { get; set; }
/// <summary>
/// 邀请的VIP人数
/// </summary>
public int AffiliateVIPNumber { get; set; }
/// <summary>
/// 邀请获取的金额
/// </summary>
public double AffiliateMoney { get; set; }
}
+18
View File
@@ -0,0 +1,18 @@
using LMS.Repository.User;
namespace LMS.Repository.DTO.UserDto;
public class UserBaseDto
{
public long Id { get; set; }
public string NickName { get; set; } = string.Empty;
public string UserName { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string PhoneNumber { get; set; } = string.Empty;
public string Avatar { get; set; } = string.Empty;
}
@@ -0,0 +1,17 @@
namespace LMS.Repository.DTO.UserDto
{
public class UserCollectionDto : UserBaseDto
{
public List<string> RoleNames { get; set; } = [];
public DateTime CreatedDate { get; set; }
public DateTime LastLoginDate { get; set; }
public long ParentId { get; set; }
public string LastLoginIp { get; set; } = string.Empty;
public string LastLoginDevice { get; set; } = string.Empty;
}
}
+40
View File
@@ -0,0 +1,40 @@
using LMS.Repository.User;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
namespace LMS.Repository.DTO.UserDto
{
public class UserDto : UserBaseDto
{
public List<string> RoleNames { get; set; } = [];
/// <summary>
/// 允许使用的机器码数量
/// </summary>
public long AllDeviceCount { get; set; } = 1;
/// <summary>
/// 代理分成比例
/// </summary>
public double AgentPercent { get; set; } = 0.00;
/// <summary>
/// 免费修改机器码次数
/// </summary>
public long FreeCount { get; set; } = 0;
public DateTime CreatedDate { get; set; }
/// <summary>
/// 邀请码
/// </summary>
public string AffiliateCode { get; set; } = string.Empty;
public long ParentId { get; set; }
/// <summary>
/// 放一些操作信息 不能频繁的修改数据库,使用的json格式存放
/// </summary>
public UserPrivateOptions Options { get; set; } = new UserPrivateOptions();
}
}
+27
View File
@@ -0,0 +1,27 @@
namespace LMS.Repository.Model
{
public class OpenAI
{
public class RequestMessage
{
/// <summary>
/// 请求的角色
/// </summary>
public string role { get; set; }
/// <summary>
/// 请求的消息
/// </summary>
public string content { get; set; }
}
/// <summary>
/// 请求失败,返回错误信息
/// </summary>
public class ErrorResponse
{
public string Error { get; set; }
public string Message { get; set; }
}
}
}
+21
View File
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Folder Include="Prompt\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="8.0.8" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LMS.Tools\LMS.Tools.csproj" />
</ItemGroup>
</Project>
+42
View File
@@ -0,0 +1,42 @@
using System.ComponentModel.DataAnnotations;
using static LMS.Common.Enums.MachineEnum;
namespace LMS.Repository.Models.Machine
{
public class MachineModel
{
/// <summary>
/// 机器ID
/// </summary>
[Required]
public string MachineId { get; set; }
/// <summary>
/// 停用时间
/// </summary>
public DateTime? DeactivationTime { get; set; }
/// <summary>
/// 使用状态(试用,永久)
/// </summary>
[Required]
public MachineUseStatus UseStatus { get; set; }
/// <summary>
/// 当前机器的状态(激活,冻结)
/// </summary>
[Required]
public MachineStatus Status { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 所属用户ID
/// </summary>
public long? UserId { get; set; }
}
}
@@ -0,0 +1,47 @@
using System.ComponentModel.DataAnnotations;
using static LMS.Common.Enums.PermissionEnum;
namespace LMS.Repository.RequestModel.Permission
{
public class PermissionModel
{
/// <summary>
/// 角色ID
/// </summary>
public long? RoleId { get; set; }
/// <summary>
/// 用户的ID
/// </summary>
public long? UserId { get; set; }
/// <summary>
/// 机器码的ID(是ID,不是机器码)
/// </summary>
public string? MachineId { get; set; }
/// <summary>
/// 权限类型的ID(子权限)
/// </summary>
[Required]
public List<string> PermissionTypeIds { get; set; }
/// <summary>
/// 权限对应的Code
/// </summary>
[Required]
public string PermissionCode { get; set; }
/// <summary>
/// 权限类型
/// </summary>
[Required]
public PType Type { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
}
}
@@ -0,0 +1,35 @@
using static LMS.Common.Enums.PermissionEnum;
using System.ComponentModel.DataAnnotations;
namespace LMS.Repository.Models.Promission
{
public class PermissionTypeModel
{
/// <summary>
/// 权限的名字
/// </summary>
[Required]
public string Name { get; set; }
/// <summary>
/// 权限的分类(user和machine
/// </summary>
[Required]
public PermissionType Type { get; set; }
/// <summary>
/// 表示权限的代码
/// </summary>
[Required]
public string Code { get; set; }
/// <summary>
/// 权限的描述
/// </summary>
public string? Remark { get; set; }
}
}
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LMS.Repository.RSAKey
{
public class RSAKeyGenerateModel
{
public string PublicKey { get; set; }
public string EncryptedPrivateKey { get; set; }
public string EncryptedKey { get; set; }
public string EncryptionIV { get; set; }
}
}
+17
View File
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LMS.Repository.Role
{
public class RoleModel
{
[Required]
public string Name { get; set; }
public string Remark { get; set; } = string.Empty;
}
}
+31
View File
@@ -0,0 +1,31 @@
namespace LMS.Repository.Models.User
{
/// <summary>
/// 用户登录的类型
/// </summary>
public enum LoginType
{
Username = 1, Email = 0,
PhoneNumber = 2,
}
/// <summary>
/// 用户登录的实体类
/// </summary>
public class LoginModel
{
public string? UserName { get; set; }
public string? Email { get; set; }
public LoginType LoginType { get; set; } = 0;
public required string Password { get; set; }
public required string TokenId { get; set; }
public bool RememberMe { get; set; } = false;
public required string DeviceInfo { get; set; }
}
}
+19
View File
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LMS.Repository.User
{
public class PublicKeyModel
{
public required string ClientPublicKey { get; set; }
}
public class PublicKeyResponse
{
public required string Token { get; set; }
public required string PublicKey { get; set; }
}
}
+10
View File
@@ -0,0 +1,10 @@
namespace LMS.Repository.Models.User
{
public class RefreshTokenModel
{
public string refreshToken { get; set; }
public required long UserId { get; set; }
public required string DeviceInfo { get; set; }
}
}
+18
View File
@@ -0,0 +1,18 @@
using System.ComponentModel.DataAnnotations;
namespace LMS.Repository.Models.User
{
public class RegisterModel
{
[Required]
public required string UserName { get; set; }
public string? Email { get; set; }
[Required]
public required string Password { get; set; }
[Required]
public required string TokenId { get; set; }
[Required]
public required string AffiliateCode { get; set; }
}
}
+14
View File
@@ -0,0 +1,14 @@
namespace LMS.Repository.User
{
public class UpdatedUserModel
{
public double? AgentPercent { get; set; }
public int? AllDeviceCount { get; set; }
public string? Email { get; set; }
public int? FreeCount { get; set; }
public string? NickName { get; set; }
public string? UserName { get; set; }
public string? PhoneNumber { get; set; }
public List<string>? RoleNames { get; set; }
}
}
+12
View File
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LMS.Repository.User;
public class UserPrivateOptions
{
}