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

news2025/1/12 12:27:45

1、新建MenoDto.cs

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

	}

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.coloradmin.cn/o/945292.html

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

相关文章

实验三十一、OCL 电路输出功率和效率的研究

一、题目 研究 OCL 功率放大电路的输出功率和效率。 二、仿真电路 OCL 功率放大电路如图1所示。 图 1 OCL 功率放大电路 图1\,\,\,\textrm{OCL}\,功率放大电路 图1OCL功率放大电路图中采用 NPN 型低频功率晶体管 2SC2001&#xff0c;其参数为&#xff1a; I C M 700 mA I_…

5G NR:RACH流程 -- Msg1之选择正确的PRACH时频资源

PRACH的时域资源是如何确定的 PRACH的时域资源主要由参数“prach-ConfigurationIndex”决定。拿着这个参数的取值去协议38211查表6.3.3.2-2/3/4&#xff0c;需要注意根据实际情况在这三张表中进行选择&#xff1a; FR1 FDD/SULFR1 TDDFR2 TDD Random access preambles can onl…

信号和槽的相关操作

目录 信号和槽 connect()函数 自定义信号槽 例子 自定义信号槽需要注意的事项 信号槽的更多用法 Lambda表达式 ① 函数对象参数 ② 操作符重载函数参数 ③ 可修改标示符 ④ 错误抛出标示符 ⑤ 函数返回值 ⑥ 是函数体 所谓信号槽&#xff0c;实际就是观察者模式。当…

AVS3变换:PBT、ST和SBT

前面的文章介绍了AVS3中的变换工具IST和ISTS&#xff0c;本文将介绍AVS3中剩余的几种变换工具&#xff1a;基于位置的变换&#xff08;PBT,Position Based Transform&#xff09;、二次变换&#xff08;ST, Secondary Transform&#xff09;和子块变换&#xff08;SBT, Sub-Blo…

SmartInspect Professional .Net Delphi Crack

SmartInspect Professional .Net & Delphi Crack SmartInspect Professional是一个用于调试和跟踪.NET、Java和Delphi软件的高级日志记录工具。它使您能够识别错误&#xff0c;找到客户问题的解决方案&#xff0c;并让您清楚地了解软件在不同环境和条件下的工作方式。可以轻…

给oracle逻辑导出clob大字段、大数据量表提提速

文章目录 前言一、大表数据附&#xff1a;查询大表 二、解题思路1.导出排除大表的数据2.rowid切片导出大表数据Linux代码如下&#xff08;示例&#xff09;&#xff1a;Windows代码如下&#xff08;示例&#xff09;&#xff1a;手工执行代码如下&#xff08;示例&#xff09;&…

java八股文面试[多线程]——Synchronized的底层实现原理

笔试&#xff1a;画出Synchronized 线程状态流转实现原理图 synchronized关键字解决的是多个线程之间访问资源的同步性&#xff0c;synchronized 翻译为中文的意思是同步&#xff0c;也称之为”同步锁“。 synchronized的作用是保证在同一时刻&#xff0c; 被修饰的代码块或方…

任意文件上传

文章目录 渗透测试漏洞原理任意文件上传1. 任意文件上传概述1.1 漏洞成因1.2 漏洞原理1.3 漏洞危害1.4 漏洞的利用方法1.5 漏洞的验证 2. WebShell解析2.1 Shell2.1.1 命令解释器 2.2 WebShell2.2.1 大马2.2.2 小马2.2.3 GetShell2.2.4 WebShell项目 3. 任意文件上传攻防3.1 毫…

注册字符设备

五、注册字符设备 struct cdev {struct kobject kobj;//表示该类型实体是一种内核对象struct module *owner;//填THIS_MODULE&#xff0c;表示该字符设备从属于哪个内核模块const struct file_operations *ops;//指向空间存放着针对该设备的各种操作函数地址struct list_head …

RAD Installer Crack,集成到RAD Studio IDE支持

RAD & Installer Crack,集成到RAD Studio IDE支持 用于创建NSIS和Inno Setup安装程序的RAD Studio扩展。它将NSIS(Nullsoft Scriptable Install System)和Inno Setup与Embarcadero RAD Studio IDE结合在一起。它允许您在RAD Studio中设计和构建NSIS和Inno Setup项目&#x…

错误的迷宫:探索开发中的异常管理之旅

引言&#xff1a;为什么我们需要谈论错误处理&#xff1f; 在软件开发的世界中&#xff0c;错误是不可避免的。它们是我们编程旅程中的挑战&#xff0c;但也是我们成长的机会。正确地处理错误不仅可以确保软件的稳定性和可靠性&#xff0c;还可以为开发者提供宝贵的反馈。本文…

Icon设计神器!这5个软件一定要试试

在界面设计中&#xff0c;Icon既可以为用户指明用途&#xff0c;又可以提升界面设计的质感&#xff0c;可以说是一种必不可少的设计素材。而市面上可以制作的Icon的设计软件也十分丰富&#xff0c;今天本文将选出了5个好用的与大家分享&#xff0c;它们不仅功能强大&#xff0c…

RunnerGo:高效、易用的性能测试神器

你是否曾经遇到过这样的难题&#xff1a;在测试软件性能时&#xff0c;缺乏高效且易用的测试工具&#xff0c;导致测试过程繁琐&#xff0c;测试用例难以管理&#xff0c;测试报告也不尽人意。这些问题让我们在测试过程中倍感困扰。然而&#xff0c;现在有了RunnerGo这款性能测…

基于SpringBoot高校心理教育辅导设计与实现【附开题|万字文档(LW)和搭建文档】

主要功能 前台界面&#xff1a; ①首页、公告管理、查看更多等 ②心理健康学习、文章标题搜索、试卷列表、考试等 ③公告通知、留言反馈等 ④个人中心、考试记录、错题本等 后台登录&#xff1a; ①学生登录&#xff1a; 个人中心、修改密码、个人信息、辅导预约管理、考试管理…

(详解)数据结构-----------栈与队列 c语言实现

本章将会详细讲解以下知识点&#xff1a; 目录 一&#xff1a;栈 1&#xff1a;栈的定义&#xff0c;栈的特点 2&#xff1a;用什么结构来实现栈与原因的分析? 3: (超详解)栈的常用接口并且附上测试用例 二:队列 1:队列的定义&#xff0c;队列的特点 2&#xff1a;用什么结…

QT6为工程添加资源文件

如果在同一个文件夹 如果不在同一个文件夹 然后浏览资源位置&#xff0c;找到文件就可以了

【超简单】远程服务器使用 plt.show() 和 cv2.imshow() 可视化图像

远程服务器可视化图像 我的配置MobaXterm 远程显示VSCode 远程显示 我的配置 服务器 Ubuntu 20.04.3 LTSAnaconda 本地电脑 Win11MobaXtermVSCode MobaXterm 远程显示 配置好服务器连接&#xff08;此处略&#xff09;&#xff1b; 连接服务器&#xff0c;并激活使用的 A…

对接webservice接口时报错:发送方和接收方 Action 不匹配

趁着早上有时间&#xff0c;赶紧记录一下&#xff0c;哈哈。 错误提示如下&#xff1a; 1、英文版&#xff1a; <s:Envelope xmlns:s“http://schemas.xmlsoap.org/soap/envelope/”><s:Body><s:Fault>a:ActionNotSupportedThe message with Action ‘’ ca…

自然语言处理(四):全局向量的词嵌入(GloVe)

全局向量的词嵌入&#xff08;GloVe&#xff09; 全局向量的词嵌入&#xff08;Global Vectors for Word Representation&#xff09;&#xff0c;通常简称为GloVe&#xff0c;是一种用于将词语映射到连续向量空间的词嵌入方法。它旨在捕捉词语之间的语义关系和语法关系&#…

【USRP】集成化仪器系列2 :示波器,基于labview实现

USRP 示波器 1、设备IP地址&#xff1a;默认为192.168.10.2&#xff0c;请勿 修改&#xff0c;运行阶段无法修改。 2、中心频率&#xff1a;当需要生成不同频率单载波的 时候请直接修改中心频率&#xff0c;在运行的时候您 也可以直接修改中心频率。 3、接收增益&#xff1a;…