WPF实战项目十三(API篇):备忘录功能api接口、优化待办事项api接口

1、新建MenoDto.cs

/// <summary>/// 备忘录传输实体/// </summary>public class MemoDto : BaseDto{private string title;/// <summary>/// 标题/// </summary>public string Title{get { return title; }set { title = value; OnPropertyChanged(); }}private string content;/// <summary>/// 内容/// </summary>public string Content{get { return content; }set { content = value; OnPropertyChanged(); }}}

2、添加映射关系

CreateMap<Memo, MemoDto>().ReverseMap();

3、新建服务接口IMemoService

    public interface IMemoService : IBaseService<MemoDto>{}

4、新建服务MemoService

public class MemoService : IMemoService{private readonly IUnitOfWork _unitOfWork;private readonly IMapper mapper;public MemoService(IMapper mapper, IUnitOfWork unitOfWork){this.mapper = mapper;_unitOfWork = unitOfWork;}/// <summary>/// 新增备忘录/// </summary>/// <param name="model"></param>/// <returns></returns>public async Task<ApiResponse> AddEntityAsync(MemoDto model){try{var memo = mapper.Map<Memo>(model);await _unitOfWork.GetRepository<Memo>().InsertAsync(memo);if(await _unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, memo);}else{return new ApiResponse(false, "添加数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 删除备忘录/// </summary>/// <param name="id"></param>/// <returns></returns>public async Task<ApiResponse> DeleteEntityAsync(int id){try{var repository = _unitOfWork.GetRepository<Memo>();var memo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(id));if(memo != null){repository.Delete(memo);}if(await _unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, "删除数据成功!");}else{return new ApiResponse(false, "删除数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 查询所有备忘录/// </summary>/// <returns></returns>public async Task<ApiResponse> GetAllAsync(){try{var repository = _unitOfWork.GetRepository<Memo>();var memo = await repository.GetAllAsync();if(memo != null){return new ApiResponse(true, memo);}else{return new ApiResponse(false, "查询数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 根据Id查询备忘录/// </summary>/// <param name="id"></param>/// <returns></returns>public async Task<ApiResponse> GetSingleAsync(int id){try{var repository = _unitOfWork.GetRepository<Memo>();var memo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(id));if(memo != null){return new ApiResponse(true, memo);}else{return new ApiResponse(false, $"查询Id={id}的数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 更新备忘录/// </summary>/// <param name="model"></param>/// <returns></returns>public async Task<ApiResponse> UpdateEntityAsync(MemoDto model){try{var dbmemo = mapper.Map<Memo>(model);var repository = _unitOfWork.GetRepository<Memo>();var memo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(dbmemo.Id));if( memo != null){memo.Title = dbmemo.Title;memo.Content = dbmemo.Content;memo.UpdateDate = DateTime.Now;repository.Update(memo);if(await _unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, "更新数据成功!");}else{return new ApiResponse(false, "更新数据失败!");}}else{return new ApiResponse(false, $"未查询到Id={dbmemo.Id}的数据!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}}

5、新增MemoController控制器

    public class MemoController : BaseApiController{private readonly IUnitOfWork _unitOfWork;private readonly IMemoService memoService;public MemoController(IMemoService memoService, IUnitOfWork unitOfWork){this.memoService = memoService;_unitOfWork = unitOfWork;}[HttpGet]public async Task<ApiResponse> GetMemoById(int Id){return await memoService.GetSingleAsync(Id);}[HttpPost]public async Task<ApiResponse> AddMemo([FromBody] MemoDto memoDto){return await memoService.AddEntityAsync(memoDto);}[HttpDelete]public async Task<ApiResponse> DeleteMemo(int Id){return await memoService.DeleteEntityAsync(Id);}[HttpGet]public async Task<ApiResponse> GetAllMemo(){return await memoService.GetAllAsync();}[HttpPost]public async Task<ApiResponse> UpdateMemo(MemoDto memoDto){return await memoService.UpdateEntityAsync(memoDto);}}

6、在program.cs添加服务

builder.Services.AddTransient<IMemoService, MemoService>();

7、F5运行项目

 

 

 8、针对查询数据可以做个优化,增加查询的页数、内容、数据量等,新建查询参数类

 

    public class QueryParameter{public int PageIndex { get; set; }public int PageSize { get; set; }public string Search { get; set; }}

 9、在IToDoService.cs和IMemoService.cs中添加分页查询的接口 

    public interface IToDoService : IBaseService<TodoDto>{Task<ApiResponse> GetPageListAllAsync(QueryParameter parameter);}public interface IMemoService : IBaseService<MemoDto>{Task<ApiResponse> GetPageListAllAsync(QueryParameter parameter);}

 10、在ToDoService.cs中实现接口和MemoService.cs中实现接口

/// <summary>/// 分页查询所有数据/// </summary>/// <param name="parameter"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public async Task<ApiResponse> GetPageListAllAsync(QueryParameter parameter){try{var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetPagedListAsync(predicate: x => string.IsNullOrWhiteSpace(parameter.Search) ? true : x.Title.Contains(parameter.Search),pageIndex: parameter.PageIndex,pageSize: parameter.PageSize,orderBy: y => y.OrderByDescending(t => t.CreateDate));if (todo != null){return new ApiResponse(true, todo);}else{return new ApiResponse(false, "查询数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}
/// <summary>/// 分页查询所有备忘录/// </summary>/// <param name="parameter"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public async Task<ApiResponse> GetPageListAllAsync(QueryParameter parameter){try{var repository = _unitOfWork.GetRepository<Memo>();var memo = await repository.GetPagedListAsync(predicate: x => string.IsNullOrWhiteSpace(parameter.Search) ? true : x.Title.Contains(parameter.Search),pageIndex: parameter.PageIndex,pageSize: parameter.PageSize,orderBy: y => y.OrderByDescending(t => t.CreateDate));if (memo != null){return new ApiResponse(true, memo);}else{return new ApiResponse(false, "查询数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}

 11、在ToDoController和MemoController中添加代码

        [HttpGet]public async Task<ApiResponse> GetAllPageListToDo([FromQuery] QueryParameter parameter){return await toDoService.GetPageListAllAsync(parameter);}
[HttpGet]public async Task<ApiResponse> GetAllPageListMemo([FromQuery] QueryParameter parameter){return await memoService.GetPageListAllAsync(parameter);}

12、F5运行项目

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/63453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫-数据解析BeautifulSoup

1、基本简介 BeautifulSoup简称bs4,BeautifulSoup和lxml一样是一个html的解析器&#xff0c;主要功能也是解析和提取数据。 BeautifulSoup和lxml类似&#xff0c;既可以解析本地文件也可以响应服务器文件。 缺点&#xff1a;效率没有lxml的效率高 。 优点&#xff1a;接口设…

实现跨境电商测评和采退、LU卡、LU货最安全的系统方案

首先你要有一个稳定的测评环境系统&#xff0c;这个是做自养号退款、撸货、撸卡的基础。测评环境系统有很多&#xff0c;从早期的虚拟机&#xff0c;模拟机&#xff0c;云手机&#xff0c;VPS等等。这些系统方案先不说成本高&#xff0c;最重要的是成功率很低&#xff0c;所以一…

openGauss学习笔记-57 openGauss 高级特性-并行查询

文章目录 openGauss学习笔记-57 openGauss 高级特性-并行查询57.1 适用场景与限制57.2 资源对SMP性能的影响57.3 其他因素对SMP性能的影响57.4 配置步骤 openGauss学习笔记-57 openGauss 高级特性-并行查询 openGauss的SMP并行技术是一种利用计算机多核CPU架构来实现多线程并行…

Benchmarking Chinese Text Recognition: Datasets, Baselines| OCR 中文数据集【论文翻译】

基础信息如下 https://arxiv.org/pdf/2112.15093.pdfhttps://github.com/FudanVI/benchmarking-chinese-text-recognition Abstract 深度学习蓬勃发展的局面见证了近年来文本识别领域的迅速发展。然而&#xff0c;现有的文本识别方法主要针对英文文本。作为另一种广泛使用的语…

企业架构LNMP学习笔记3

服务器基本环境配置&#xff1a; 1、安装虚拟机&#xff0c;centos7.9 操作系统&#xff1b; 2、网络配置&#xff1b; 3、机器名FQDN设置&#xff1b; 4、DNS解析设置&#xff0c;本地hosts设置&#xff1b; 5、配置yum源环境&#xff1b; 6、vim安装配置&#xff1b; …

RealVNC配置自定义分辨率(AlmaLinux 8)

RealVNC 配置自定义分辨率&#xff08;AlmaLinux8&#xff09; 参考RealVNC官网 how to set up resolution https://help.realvnc.com/hc/en-us/articles/360016058212-How-do-I-adjust-the-screen-resolution-of-a-virtual-desktop-under-Linux-#standard-dummy-driver-0-2 …

Docker环境搭建Prometheus实验环境

环境&#xff1a; OS&#xff1a;Centos7 Docker: 20.10.9 - Community Centos部署Docker 【Kubernetes】Centos中安装Docker和Minikube_云服务器安装docker和minikube_DivingKitten的博客-CSDN博客 一、拉取Prometheus镜像 ## 拉取镜像 docker pull prom/prometheus ## 启动p…

今天使用python进行开发

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

OpenCV(十一):图像仿射变换

目录 1.图像仿射变换介绍 仿射变换&#xff1a; 仿射变换矩阵&#xff1a; 仿射变换公式&#xff1a; 2.仿射变换函数 仿射变换函数&#xff1a;warpAffine() 图像旋转&#xff1a;getRotationMatrix2D() 计算仿射变换矩阵&#xff1a;getAffineTransform() 3.demo 1.…

Java 枚举是什么?什么是枚举类?枚举类的用途?

目录 1. 什么是枚举&#xff1f; 2. 枚举类 3. 枚举类的用途 1. 什么是枚举&#xff1f; 我们可以从字面意思来理解&#xff0c;枚&#xff1a;一枚一枚的&#xff0c;举&#xff1a;举例&#xff0c;举出&#xff0c;将二者意思结合起来可以理解为一个一个的举出。 这样听…

浅谈城市轨道交通视频监控与AI视频智能分析解决方案

一、背景分析 地铁作为重要的公共场所交通枢纽&#xff0c;流动性非常高、人员大量聚集&#xff0c;轨道交通需要利用视频监控系统来实现全程、全方位的安全防范&#xff0c;这也是保证地铁行车组织和安全的重要手段。调度员和车站值班员通过系统监管列车运行、客流情况、变电…

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案 出现的问题及其报错&#xff1a; 在 VScode 中&#xff0c;在使用带有 ESLint 工具的项目中&#xff0c;保存会发现报错&#xff0c;并且修改好代码格式后&#xff0c;保存会发现代码格式依然出现问题&…

MySQL数据库学习【进阶篇】

MySQL数据库学习进阶篇 MySQL进阶篇已经更新完毕&#xff0c;点击网址查看&#x1f449;&#xff1a;MySQL数据库进阶篇

十五、pikachu之CSRF

文章目录 一、CSRF概述二、CSRF实战2.1 CSRF(get)2.2 CSRF之token 一、CSRF概述 Cross-site request forgery 简称为“CSRF”&#xff0c;在CSRF的攻击场景中攻击者会伪造一个请求&#xff08;这个请求一般是一个链接&#xff09;&#xff0c;然后欺骗目标用户进行点击&#xf…

基于白鲸算法优化的BP神经网络(预测应用) - 附代码

基于白鲸算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于白鲸算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.白鲸优化BP神经网络2.1 BP神经网络参数设置2.2 白鲸算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

k8s 启动和删除pod

k8s创建pod pod的启动流程 流程图 运维人员向kube-apiserver发出指令&#xff08;我想干什么&#xff0c;我期望事情是什么状态&#xff09; api响应命令,通过一系列认证授权,把pod数据存储到etcd,创建deployment资源并初始化。(期望状态&#xff09; controller通过list-wa…

jenkins 发布job切换不同的jdk版本/ maven版本

1. 技术要求 因为有个新的项目需要使用jdk17 而旧的项目需要jdk1.8 这就需要jenkins在发布项目的时候可以指定jdk版本 2. 解决 jenkins全局工具配置页面 配置新的jdk 路径 系统管理-> 全局工具配置 如上新增个jdk 名称叫 jdk-17 然后配置jdk-17的根路径即可&#xff08;这…

强化自主可控,润开鸿发布基于RISC-V架构的开源鸿蒙终端新品

2023 RISC-V中国峰会于8月23日至25日在北京召开,峰会以“RISC-V生态共建”为主题,结合当下全球新形势,把握全球新时机,呈现RISC-V全球新观点、新趋势。本次大会邀请了RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇,吸引超过百余家业界企业、高…

【Go 基础篇】Go语言中的自定义错误处理

错误是程序开发过程中不可避免的一部分&#xff0c;而Go语言以其简洁和高效的特性闻名。在Go中&#xff0c;自定义错误&#xff08;Custom Errors&#xff09;是一种强大的方式&#xff0c;可以为特定应用场景创建清晰的错误类型&#xff0c;以便更好地处理和调试问题。本文将详…

关于Incapsula reese84加密的特征研究

最近研究了下reese84的加密算法&#xff0c;基本上两个参数的加密__utmvc和token&#xff0c;因为nodejs调用会有内存问题&#xff0c;没有采用补环境的方式解决&#xff0c;用python扣的算法 1:__utmvc参数的生成是一个ob混淆&#xff0c;ast处理之后调试难度不是很大 测试结…