From d08922030da935b184e3bf410d1d61384c2f2e8b Mon Sep 17 00:00:00 2001 From: sangzhen Date: Tue, 8 Jul 2025 17:32:28 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A1=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=92=8C=E8=8E=B7=E5=8F=96=E6=89=80=E6=9C=89?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Context/Repository/UserRepository.cs | 1 + .../Controllers/UserController.cs | 6 +- WorkStation.Server/Program.cs | 12 ++ WorkStation.Server/Services/IBaseSerivice.cs | 14 --- WorkStation.Server/Services/IBaseService.cs | 45 ++++++++ WorkStation.Server/Services/IUserService.cs | 2 +- WorkStation.Server/Services/UserService.cs | 103 ++++++++++++++++-- WorkStation.Share/ApiResponse.cs | 39 +++++++ 8 files changed, 195 insertions(+), 27 deletions(-) delete mode 100644 WorkStation.Server/Services/IBaseSerivice.cs create mode 100644 WorkStation.Server/Services/IBaseService.cs diff --git a/WorkStation.Server/Context/Repository/UserRepository.cs b/WorkStation.Server/Context/Repository/UserRepository.cs index b3616e2..b924c63 100644 --- a/WorkStation.Server/Context/Repository/UserRepository.cs +++ b/WorkStation.Server/Context/Repository/UserRepository.cs @@ -5,5 +5,6 @@ namespace WorkStation.Server.Context.Repository { public class UserRepository(MyDbContext context) : Repository(context), IRepository { + } } diff --git a/WorkStation.Server/Controllers/UserController.cs b/WorkStation.Server/Controllers/UserController.cs index 932b347..8f959d7 100644 --- a/WorkStation.Server/Controllers/UserController.cs +++ b/WorkStation.Server/Controllers/UserController.cs @@ -12,6 +12,10 @@ namespace WorkStation.Server.Controllers { private readonly IUserService _service = service; [HttpPost] - public Task Add(User item) => _service.AddAsync(item); + public async Task Add(User item) => await _service.AddAsync(item); + [HttpDelete] + public async Task Delete(int id) => await _service.DelateAsync(id); + [HttpGet] + public async Task>> GetAll() => await _service.GetAllAsync(); } } diff --git a/WorkStation.Server/Program.cs b/WorkStation.Server/Program.cs index eed867c..856f3b2 100644 --- a/WorkStation.Server/Program.cs +++ b/WorkStation.Server/Program.cs @@ -9,14 +9,26 @@ var builder = WebApplication.CreateBuilder(args); // Add services to the container. + +// 获取配置文件中的MySQL数据库连接字符串 var connectionString = builder.Configuration.GetConnectionString("MySQLConnection"); + +// 配置MyDbContext使用的数据库上下文选项 builder.Services.AddDbContext(options => { + // 使用MySQL数据库,并自动检测服务器版本 options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); }); + +// 添加单元OfWork管理器,用于处理事务和数据库操作的提交 builder.Services.AddUnitOfWork(); + +// 添加自定义仓库,用于处理User实体的数据库操作 builder.Services.AddCustomRepository(); + +// 注册UserService为瞬态服务,每次请求都会创建一个新的实例 builder.Services.AddTransient(); + builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); diff --git a/WorkStation.Server/Services/IBaseSerivice.cs b/WorkStation.Server/Services/IBaseSerivice.cs deleted file mode 100644 index 967fe9d..0000000 --- a/WorkStation.Server/Services/IBaseSerivice.cs +++ /dev/null @@ -1,14 +0,0 @@ -锘縰sing WorkStation.Share; - -namespace WorkStation.Server.Services -{ - public interface IBaseSerivice - { - Task AddAsync(T item); - Task DelateAsync(int id); - Task UpdateAsync(T item); - Task GetByIdAsync(int id); - Task GetAllAsync(); - - } -} diff --git a/WorkStation.Server/Services/IBaseService.cs b/WorkStation.Server/Services/IBaseService.cs new file mode 100644 index 0000000..4c16175 --- /dev/null +++ b/WorkStation.Server/Services/IBaseService.cs @@ -0,0 +1,45 @@ +锘縰sing WorkStation.Share; + +namespace WorkStation.Server.Services +{ + /// + /// 瀹氫箟浜嗕竴涓熀纭鏈嶅姟鎺ュ彛锛岀敤浜庤鑼冩暟鎹搷浣滅殑鏍囧噯鏂规硶 + /// + /// 琛ㄧず姝ゆ帴鍙e皢閽堝鐨勫叿浣撳疄浣撶被鍨 + public interface IBaseService + { + /// + /// 寮傛娣诲姞涓涓疄浣撻」鍒版暟鎹瓨鍌ㄤ腑 + /// + /// 瑕佹坊鍔犵殑瀹炰綋椤 + /// 杩斿洖涓涓寘鍚坊鍔犳搷浣滅粨鏋滅殑ApiResponse瀵硅薄 + Task AddAsync(T entity); + + /// + /// 鏍规嵁瀹炰綋鐨処D寮傛鍒犻櫎涓涓疄浣撻」 + /// + /// 瑕佸垹闄ゅ疄浣撻」鐨勬爣璇咺D + /// 杩斿洖涓涓寘鍚垹闄ゆ搷浣滅粨鏋滅殑ApiResponse瀵硅薄 + Task DelateAsync(int id); + + /// + /// 寮傛鏇存柊涓涓疄浣撻」 + /// + /// 鍖呭惈鏇存柊鍚庝俊鎭殑瀹炰綋椤 + /// 杩斿洖涓涓寘鍚洿鏂版搷浣滅粨鏋滅殑ApiResponse瀵硅薄 + Task UpdateAsync(T entity); + + /// + /// 鏍规嵁瀹炰綋鐨処D寮傛鑾峰彇涓涓疄浣撻」鐨勮缁嗕俊鎭 + /// + /// 瑕佽幏鍙栧疄浣撻」鐨勬爣璇咺D + /// 杩斿洖涓涓寘鍚寚瀹氬疄浣撻」淇℃伅鐨凙piResponse瀵硅薄 + Task GetByIdAsync(int id); + + /// + /// 寮傛鑾峰彇鎵鏈夊疄浣撻」鐨勫垪琛 + /// + /// 杩斿洖涓涓寘鍚墍鏈夊疄浣撻」鍒楄〃鐨凙piResponse瀵硅薄 + Task>> GetAllAsync(); + } +} diff --git a/WorkStation.Server/Services/IUserService.cs b/WorkStation.Server/Services/IUserService.cs index 91abc3f..d86d4f0 100644 --- a/WorkStation.Server/Services/IUserService.cs +++ b/WorkStation.Server/Services/IUserService.cs @@ -2,7 +2,7 @@ namespace WorkStation.Server.Services { - public interface IUserService : IBaseSerivice + public interface IUserService : IBaseService { } diff --git a/WorkStation.Server/Services/UserService.cs b/WorkStation.Server/Services/UserService.cs index 6b55af1..bbc0394 100644 --- a/WorkStation.Server/Services/UserService.cs +++ b/WorkStation.Server/Services/UserService.cs @@ -6,23 +6,103 @@ namespace WorkStation.Server.Services { public class UserService(IUnitOfWork unitOfWork) : IUserService { - private IUnitOfWork _unitOfWork = unitOfWork; - public async Task AddAsync(User item) + private readonly IUnitOfWork _unitOfWork = unitOfWork; + private readonly int _pageList = 100; + public async Task AddAsync(User entity) { - var repository = _unitOfWork.GetRepository(); - await repository.InsertAsync(item); - var count = await _unitOfWork.SaveChangesAsync(); - return new ApiResponse(true, "娣诲姞鏁版嵁", count); + try + { + if (string.IsNullOrEmpty(entity.Account)) + { + return new ApiResponse(false, "娣诲姞鐢ㄦ埛澶辫触锛岃处鎴锋棤鏁", entity); + } + if (string.IsNullOrEmpty(entity.Password)) + { + return new ApiResponse(false, "娣诲姞鐢ㄦ埛澶辫触锛屽瘑鐮佹棤鏁", entity); + } + entity.CreateTime = DateTime.Now; + entity.UpdateTime = DateTime.Now; + entity.Id = 0; + var repository = _unitOfWork.GetRepository(); + await repository.InsertAsync(entity); + var count = await _unitOfWork.SaveChangesAsync(); + if (count > 0) + { + return new ApiResponse(true, "娣诲姞鐢ㄦ埛鎴愬姛", entity); + } + else + { + return new ApiResponse(false, "娣诲姞鐢ㄦ埛澶辫触锛寀nitOfWork淇濆瓨澶辫触", entity); + } + } + catch (Exception ex) + { + return new ApiResponse(false, $"娣诲姞鐢ㄦ埛寮傚父锛歿ex.Message}", null); + } } - public Task DelateAsync(int id) + public async Task DelateAsync(int id) { - throw new NotImplementedException(); + try + { + if (id <= 0) + { + return new ApiResponse(false, "id = 鏃犳晥", $"id = {id}"); + } + var repository = _unitOfWork.GetRepository(); + var user = await repository.GetFirstOrDefaultAsync(predicate: item => item.Id == id); + if (user == null) + { + return new ApiResponse(false, "鍒犻櫎鐢ㄦ埛澶辫触锛屾病鏈夋煡璇㈠埌璇ョ敤鎴", id); + } + repository.Delete(user); + var count = await _unitOfWork.SaveChangesAsync(); + if (count > 0) + { + return new ApiResponse(true, "鍒犻櫎鐢ㄦ埛鎴愬姛", $"id = {id}"); + } + else + { + return new ApiResponse(false, "鍒犻櫎鐢ㄦ埛澶辫触锛寀nitOfWork淇濆瓨澶辫触", $"id = {id}"); + } + } + catch (Exception ex) + { + return new ApiResponse(false, $"鍒犻櫎鐢ㄦ埛寮傚父锛歿ex.Message}", $"id = {id}"); + } } - public Task GetAllAsync() + public async Task>> GetAllAsync() { - throw new NotImplementedException(); + try + { + var repository = _unitOfWork.GetRepository(); + var pageIndex = 0; + var data = new List(); + while (true) + { + var users = await repository.GetPagedListAsync(pageIndex: pageIndex, + pageSize: _pageList, + orderBy: source => source.OrderByDescending(item => item.Id)); + if (users == null) + { + return new ApiRespon>(false, "鑾峰彇澶辫触锛孏etPagedListAsync 缁撴灉涓 null", null); + } + foreach(var item in users.Items) + { + data.Add(item); + } + if (!users.HasNextPage) + { + return new ApiRespon>(true, "鑾峰彇鐢ㄦ埛鎴愬姛", data); + } + pageIndex++; + } + } + catch(Exception ex) + { + return new ApiRespon>(false, $"鑾峰彇鐢ㄦ埛寮傚父锛歿ex.Message}", null); + } } public Task GetByIdAsync(int id) @@ -30,9 +110,10 @@ namespace WorkStation.Server.Services throw new NotImplementedException(); } - public Task UpdateAsync(User item) + public Task UpdateAsync(User entity) { throw new NotImplementedException(); } + } } diff --git a/WorkStation.Share/ApiResponse.cs b/WorkStation.Share/ApiResponse.cs index 647b705..a2d3d8e 100644 --- a/WorkStation.Share/ApiResponse.cs +++ b/WorkStation.Share/ApiResponse.cs @@ -6,10 +6,49 @@ using System.Threading.Tasks; namespace WorkStation.Share { + /// + /// 瀹氫箟API鍝嶅簲鐨勭粺涓缁撴瀯锛屽寘鍚搷浣滄槸鍚︽垚鍔熴佹秷鎭拰鏁版嵁銆 + /// + /// 鎸囩ず璇锋眰鏄惁鎴愬姛銆 + /// 鍙夊弬鏁帮紝鎻愪緵鍝嶅簲鐨勯檮鍔犱俊鎭紙濡傞敊璇垨鎴愬姛鎻愮ず锛夈 + /// 鍙夊弬鏁帮紝鍖呭惈杩斿洖鐨勫叿浣撴暟鎹紙鏍规嵁API鑰屽彉鍖栵級銆 public class ApiResponse(bool success, string? message, object? data) { + /// + /// 鑾峰彇鎴栬缃姹傜殑鎴愬姛鐘舵併 + /// public bool Success { get; set; } = success; + + /// + /// 鑾峰彇鎴栬缃搷搴旂殑娑堟伅鍐呭銆 + /// public string? Message { get; set; } = message; + + /// + /// 鑾峰彇鎴栬缃搷搴旂殑鏁版嵁鍐呭銆 + /// public object? Data { get; set; } = data; } + + /// + /// 琛ㄧずAPI鍝嶅簲鐨勭粨鏋滐紝鍖呭惈鎴愬姛鐘舵併佹秷鎭唴瀹瑰拰鏁版嵁鍐呭銆 + /// + /// 鍝嶅簲鏁版嵁鐨勭被鍨嬨 + public class ApiRespon(bool success, string? message, T? data) + { + /// + /// 鑾峰彇鎴栬缃姹傜殑鎴愬姛鐘舵併 + /// + public bool Success { get; set; } = success; + + /// + /// 鑾峰彇鎴栬缃搷搴旂殑娑堟伅鍐呭銆 + /// + public string? Message { get; set; } = message; + + /// + /// 鑾峰彇鎴栬缃搷搴旂殑鏁版嵁鍐呭銆 + /// + public T? Data { get; set; } = data; + } }