添加用户实体

This commit is contained in:
陈淳
2023-01-30 18:14:44 +08:00
parent 32b9611eb5
commit 5c5dfcac89
29 changed files with 760 additions and 30 deletions

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Data.Auditing
{
public interface IAuditedObject : ICreationAuditedObject, IModificationAuditedObject
{
}
public interface IAuditedObject<TUser> : IAuditedObject, ICreationAuditedObject<TUser>, IModificationAuditedObject<TUser>
{
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Data.Auditing
{
public interface ICreationAuditedObject : IHasCreationTime, IMayHaveCreator
{
}
public interface ICreationAuditedObject<TCreator> : ICreationAuditedObject, IMayHaveCreator<TCreator>
{
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Data.Auditing
{
public interface IDeletionAuditedObject : IHasDeletionTime
{
long? DeleterId { get; }
}
public interface IDeletionAuditedObject<TUser> : IDeletionAuditedObject
{
TUser Deleter { get; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Data.Auditing
{
public interface IFullAuditedObject : IAuditedObject, IDeletionAuditedObject
{
}
public interface IFullAuditedObject<TUser> : IAuditedObject<TUser>, IFullAuditedObject, IDeletionAuditedObject<TUser>
{
}
}

View File

@@ -0,0 +1,10 @@
using System;
namespace Yi.Framework.Data.Auditing;
public interface IHasCreationTime
{
DateTime CreationTime { get; }
}

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Data.Entities;
namespace Yi.Framework.Data.Auditing
{
public interface IHasDeletionTime : ISoftDelete
{
DateTime? DeletionTime { get; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Data.Auditing
{
public interface IHasEntityVersion
{
int EntityVersion { get; }
}
}

View File

@@ -0,0 +1,9 @@
namespace Yi.Framework.Data.Auditing;
public interface IHasModificationTime
{
DateTime? LastModificationTime { get; }
}

View File

@@ -0,0 +1,13 @@
using System;
namespace Yi.Framework.Data.Auditing;
public interface IMayHaveCreator<TCreator>
{
TCreator Creator { get; }
}
public interface IMayHaveCreator
{
long? CreatorId { get; }
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Data.Auditing
{
public interface IModificationAuditedObject : IHasModificationTime
{
long? LastModifierId { get; }
}
public interface IModificationAuditedObject<TUser> : IModificationAuditedObject
{
TUser LastModifier { get; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
namespace Yi.Framework.Data.Auditing;
public interface IMustHaveCreator<TCreator> : IMustHaveCreator
{
TCreator Creator { get; }
}
public interface IMustHaveCreator
{
long CreatorId { get; }
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Data.Entities
{
public interface IOrderNum
{
int OrderNum { get; set; }
}
}

View File

@@ -13,7 +13,7 @@ namespace Yi.Framework.Template.Abstract
public ModelTemplateProvider(string modelName, string entityName, string nameSpaces) : base(modelName, entityName, nameSpaces) public ModelTemplateProvider(string modelName, string entityName, string nameSpaces) : base(modelName, entityName, nameSpaces)
{ {
AddIgnoreEntityField(/*"Id", */"TenantId", "IsDeleted"); AddIgnoreEntityField(/*"Id", */"TenantId", "IsDeleted", "LastModifierId", "LastModificationTime","OrderNum");
} }
private string entityPath=string.Empty; private string entityPath=string.Empty;

View File

@@ -38,7 +38,7 @@ namespace Yi.Framework.Template.ConstClasses
public const string NameSpaces = "#NameSpaces#"; public const string NameSpaces = "#NameSpaces#";
public const string BuildRootPath = "../../../../../project/BBS"; public const string BuildRootPath = "../../../../../project/rbac";
public const string BuildEntityPath = "../../../../../project/BBS"; public const string BuildEntityPath = "../../../../../project/rbac";
} }
} }

View File

@@ -14,38 +14,38 @@ TemplateFactory templateFactory = new();
//string modelName = "Exhibition"; //string modelName = "Exhibition";
//string nameSpaces = "Yi.BBS"; //string nameSpaces = "Yi.BBS";
//List<string> entityNames = new() { "Banner" }; //List<string> entityNames = new() { "Banner" };
//string modelName = "Forum"; string modelName = "Identity";
//string nameSpaces = "Yi.BBS"; string nameSpaces = "Yi.RBAC";
//List<string> entityNames = new() { "_" }; List<string> entityNames = new() { "User" };
//foreach (var entityName in entityNames) foreach (var entityName in entityNames)
//{ {
// templateFactory.CreateTemplateProviders((option) => templateFactory.CreateTemplateProviders((option) =>
// { {
// option.Add(new ServiceTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new ServiceTemplateProvider(modelName, entityName, nameSpaces));
// option.Add(new IServiceTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new IServiceTemplateProvider(modelName, entityName, nameSpaces));
// option.Add(new CreateInputVoTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new CreateInputVoTemplateProvider(modelName, entityName, nameSpaces));
// option.Add(new UpdateInputVoTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new UpdateInputVoTemplateProvider(modelName, entityName, nameSpaces));
// option.Add(new GetListInputVoTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new GetListInputVoTemplateProvider(modelName, entityName, nameSpaces));
// option.Add(new GetListOutputDtoTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new GetListOutputDtoTemplateProvider(modelName, entityName, nameSpaces));
// option.Add(new GetOutputDtoTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new GetOutputDtoTemplateProvider(modelName, entityName, nameSpaces));
// option.Add(new ConstTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new ConstTemplateProvider(modelName, entityName, nameSpaces));
// option.Add(new ProfileTemplateProvider(modelName, entityName, nameSpaces)); option.Add(new ProfileTemplateProvider(modelName, entityName, nameSpaces));
// //option.Add(new ApiTemplateProvider(modelName, entityName)); //option.Add(new ApiTemplateProvider(modelName, entityName));
// }); });
// //开始构建模板 //开始构建模板
// templateFactory.BuildTemplate(); templateFactory.BuildTemplate();
// Console.WriteLine($"Yi.Framework.Template:{entityName}构建完成!"); Console.WriteLine($"Yi.Framework.Template:{entityName}构建完成!");
//} }
//Console.WriteLine("Yi.Framework.Template:模板全部生成完成!"); Console.WriteLine("Yi.Framework.Template:模板全部生成完成!");
//Console.ReadKey(); Console.ReadKey();
//根据模板文件生成项目文件 //根据模板文件生成项目文件
var template = "D:\\C#\\Yi\\Yi.Framework.Net6\\src\\project\\rbac"; //var template = "D:\\C#\\Yi\\Yi.Framework.Net6\\src\\project\\rbac";
FileHelper.AllInfoReplace(template, "Template", "RBAC"); //FileHelper.AllInfoReplace(template, "Template", "RBAC");

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.RBAC.Application.Contracts.Identity.Dtos;
using Yi.Framework.Ddd.Services.Abstract;
namespace Yi.RBAC.Application.Contracts.Identity
{
/// <summary>
/// User服务抽象
/// </summary>
public interface IUserService : ICrudAppService<UserGetOutputDto, UserGetListOutputDto, long, UserGetListInputVo, UserCreateInputVo, UserUpdateInputVo>
{
}
}

View File

@@ -0,0 +1,17 @@
using Yi.RBAC.Application.Contracts.Identity;
using NET.AutoWebApi.Setting;
using Yi.RBAC.Application.Contracts.Identity.Dtos;
using Yi.RBAC.Domain.Identity.Entities;
using Yi.Framework.Ddd.Services;
namespace Yi.RBAC.Application.Identity
{
/// <summary>
/// User服务实现
/// </summary>
[AppService]
public class UserService : CrudAppService<UserEntity, UserGetOutputDto, UserGetListOutputDto, long, UserGetListInputVo, UserCreateInputVo, UserUpdateInputVo>,
IUserService, IAutoApiService
{
}
}

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.RBAC.Application.Contracts.Identity.Dtos
{
/// <summary>
/// User输入创建对象
/// </summary>
public class UserCreateInputVo
{
public long Id { get; set; }
public string? Name { get; set; }
public int? Age { get; set; }
public string UserName { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public string Salt { get; set; } = string.Empty;
public string? Icon { get; set; }
public string? Nick { get; set; }
public string? Email { get; set; }
public string? Ip { get; set; }
public string? Address { get; set; }
public long? Phone { get; set; }
public string? Introduction { get; set; }
public string? Remark { get; set; }
public SexEnum Sex { get; set; } = SexEnum.Unknown;
public long? DeptId { get; set; }
public DateTime CreationTime { get; set; } = DateTime.Now;
public long? CreatorId { get; set; }
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Ddd.Dtos;
namespace Yi.RBAC.Application.Contracts.Identity.Dtos
{
public class UserGetListInputVo : PagedAndSortedResultRequestDto
{
public long Id { get; set; }
public string? Name { get; set; }
public int? Age { get; set; }
public string UserName { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public string Salt { get; set; } = string.Empty;
public string? Icon { get; set; }
public string? Nick { get; set; }
public string? Email { get; set; }
public string? Ip { get; set; }
public string? Address { get; set; }
public long? Phone { get; set; }
public string? Introduction { get; set; }
public string? Remark { get; set; }
public SexEnum Sex { get; set; } = SexEnum.Unknown;
public long? DeptId { get; set; }
public DateTime CreationTime { get; set; } = DateTime.Now;
public long? CreatorId { get; set; }
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Ddd.Dtos;
namespace Yi.RBAC.Application.Contracts.Identity.Dtos
{
public class UserGetListOutputDto : IEntityDto<long>
{
public long Id { get; set; }
public string? Name { get; set; }
public int? Age { get; set; }
public string UserName { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public string Salt { get; set; } = string.Empty;
public string? Icon { get; set; }
public string? Nick { get; set; }
public string? Email { get; set; }
public string? Ip { get; set; }
public string? Address { get; set; }
public long? Phone { get; set; }
public string? Introduction { get; set; }
public string? Remark { get; set; }
public SexEnum Sex { get; set; } = SexEnum.Unknown;
public long? DeptId { get; set; }
public DateTime CreationTime { get; set; } = DateTime.Now;
public long? CreatorId { get; set; }
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Ddd.Dtos;
namespace Yi.RBAC.Application.Contracts.Identity.Dtos
{
public class UserGetOutputDto : IEntityDto<long>
{
public long Id { get; set; }
public string? Name { get; set; }
public int? Age { get; set; }
public string UserName { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public string Salt { get; set; } = string.Empty;
public string? Icon { get; set; }
public string? Nick { get; set; }
public string? Email { get; set; }
public string? Ip { get; set; }
public string? Address { get; set; }
public long? Phone { get; set; }
public string? Introduction { get; set; }
public string? Remark { get; set; }
public SexEnum Sex { get; set; } = SexEnum.Unknown;
public long? DeptId { get; set; }
public DateTime CreationTime { get; set; } = DateTime.Now;
public long? CreatorId { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.RBAC.Application.Contracts.Identity.Dtos
{
public class UserUpdateInputVo
{
public long Id { get; set; }
public string? Name { get; set; }
public int? Age { get; set; }
public string UserName { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public string Salt { get; set; } = string.Empty;
public string? Icon { get; set; }
public string? Nick { get; set; }
public string? Email { get; set; }
public string? Ip { get; set; }
public string? Address { get; set; }
public long? Phone { get; set; }
public string? Introduction { get; set; }
public string? Remark { get; set; }
public SexEnum Sex { get; set; } = SexEnum.Unknown;
public long? DeptId { get; set; }
public DateTime CreationTime { get; set; } = DateTime.Now;
public long? CreatorId { get; set; }
}
}

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.RBAC.Application.Contracts.Identity.Dtos;
using Yi.Framework.Ddd.Services.Abstract;
namespace Yi.RBAC.Application.Contracts.Identity
{
/// <summary>
/// User服务抽象
/// </summary>
public interface IUserService : ICrudAppService<UserGetOutputDto, UserGetListOutputDto, long, UserGetListInputVo, UserCreateInputVo, UserUpdateInputVo>
{
}
}

View File

@@ -0,0 +1,23 @@
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.RBAC.Application.Contracts.Identity.Dtos;
using Yi.RBAC.Domain.Identity.Entities;
namespace Yi.RBAC.Application.Identity.MapperConfig
{
public class UserProfile: Profile
{
public UserProfile()
{
CreateMap<UserGetListInputVo, UserEntity>();
CreateMap<UserCreateInputVo, UserEntity>();
CreateMap<UserUpdateInputVo, UserEntity>();
CreateMap<UserEntity, UserGetListOutputDto>();
CreateMap<UserEntity, UserGetOutputDto>();
}
}
}

View File

@@ -0,0 +1,17 @@
using Yi.RBAC.Application.Contracts.Identity;
using NET.AutoWebApi.Setting;
using Yi.RBAC.Application.Contracts.Identity.Dtos;
using Yi.RBAC.Domain.Identity.Entities;
using Yi.Framework.Ddd.Services;
namespace Yi.RBAC.Application.Identity
{
/// <summary>
/// User服务实现
/// </summary>
[AppService]
public class UserService : CrudAppService<UserEntity, UserGetOutputDto, UserGetListOutputDto, long, UserGetListInputVo, UserCreateInputVo, UserUpdateInputVo>,
IUserService, IAutoApiService
{
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.RBAC.Domain.Shared.Identity.ConstClasses
{
/// <summary>
/// 常量定义
/// </summary>
public class UserConst
{
}
}

View File

@@ -4,5 +4,140 @@
<name>Yi.RBAC.Domain</name> <name>Yi.RBAC.Domain</name>
</assembly> </assembly>
<members> <members>
<member name="T:Yi.RBAC.Domain.Identity.Entities.UserEntity">
<summary>
用户表
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.IsDeleted">
<summary>
逻辑删除
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Name">
<summary>
姓名
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Age">
<summary>
年龄
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.UserName">
<summary>
用户名
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Password">
<summary>
密码
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Salt">
<summary>
加密盐值
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Icon">
<summary>
头像
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Nick">
<summary>
昵称
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Email">
<summary>
邮箱
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Ip">
<summary>
Ip
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Address">
<summary>
地址
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Phone">
<summary>
电话
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Introduction">
<summary>
简介
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.Sex">
<summary>
性别
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.DeptId">
<summary>
部门id
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.CreationTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.CreatorId">
<summary>
创建者
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.LastModifierId">
<summary>
最后修改者
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.LastModificationTime">
<summary>
最后修改时间
</summary>
</member>
<member name="P:Yi.RBAC.Domain.Identity.Entities.UserEntity.OrderNum">
<summary>
排序
</summary>
</member>
<member name="T:Yi.RBAC.Domain.Identity.Entities.SexEnum">
<summary>
性别
</summary>
</member>
<member name="F:Yi.RBAC.Domain.Identity.Entities.SexEnum.Male">
<summary>
男性
</summary>
</member>
<member name="F:Yi.RBAC.Domain.Identity.Entities.SexEnum.Woman">
<summary>
女性
</summary>
</member>
<member name="F:Yi.RBAC.Domain.Identity.Entities.SexEnum.Unknown">
<summary>
未知
</summary>
</member>
</members> </members>
</doc> </doc>

View File

@@ -0,0 +1,151 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Data.Auditing;
using Yi.Framework.Data.Entities;
using Yi.Framework.Ddd.Entities;
namespace Yi.RBAC.Domain.Identity.Entities
{
/// <summary>
/// 用户表
/// </summary>
[SugarTable("User")]
public class UserEntity : IEntity<long>, ISoftDelete, IAuditedObject, IOrderNum
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 逻辑删除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string? Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int? Age { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; } = string.Empty;
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; } = string.Empty;
/// <summary>
/// 加密盐值
/// </summary>
public string Salt { get; set; } = string.Empty;
/// <summary>
/// 头像
/// </summary>
public string? Icon { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string? Nick { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string? Email { get; set; }
/// <summary>
/// Ip
/// </summary>
public string? Ip { get; set; }
/// <summary>
/// 地址
/// </summary>
public string? Address { get; set; }
/// <summary>
/// 电话
/// </summary>
public long? Phone { get; set; }
/// <summary>
/// 简介
/// </summary>
public string? Introduction { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 性别
/// </summary>
public SexEnum Sex { get; set; } = SexEnum.Unknown;
/// <summary>
/// 部门id
/// </summary>
public long? DeptId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreationTime { get; set; } = DateTime.Now;
/// <summary>
/// 创建者
/// </summary>
public long? CreatorId { get; set; }
/// <summary>
/// 最后修改者
/// </summary>
public long? LastModifierId { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 排序
/// </summary>
public int OrderNum { get; set; } = 0;
}
/// <summary>
/// 性别
/// </summary>
public enum SexEnum
{
/// <summary>
/// 男性
/// </summary>
Male = 0,
/// <summary>
/// 女性
/// </summary>
Woman = 1,
/// <summary>
/// 未知
/// </summary>
Unknown = 2
}
}

View File

@@ -6,7 +6,7 @@
"dotnetRunMessages": true, "dotnetRunMessages": true,
"launchBrowser": true, "launchBrowser": true,
"launchUrl": "swagger", "launchUrl": "swagger",
"applicationUrl": "http://localhost:19001", "applicationUrl": "http://localhost:19002",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
} }