黑马天机学堂-2、我的课程表 接口分析与设计

在昨天的学习中,我带领大家解决了天机学堂的简单的BUG。并且演示了整个项目的核心业务流程。现在,你对项目有了基本的了解,是时候动手开发一些业务功能了。

接下来接收到一个正式的开发任务:开发天机学堂项目的学习辅助相关功能

不要小看这部分功能,作为一个在线教育项目,学习是核心。而怎样让学员有一个好的学习体验,持续有动力的学习,就显得非常关键。我们要实现的学习辅助功能,就是要起到激励、促进学员、帮助学员学习的功能,非常重要。

那么从哪里入手呢?

我们来回顾一下,在演示项目业务流程时,我们发现搜索课程、报名课程等流程都已经完成开发了。并且在《个人中心-我的订单》页面可以看到我们下单报名的课程:

通过今天的学习,我们要达成的目标如下:

  • 完成我的课程表相关功能

  • 学会阅读产品原型,分析需求

  • 能根据需求设计接口

  • 能根据需求设计数据库表

  • 学会跨微服务的业务开发

1.接口设计

那么接下来,我们就一起来分析、设计、实现这些接口吧。

科程下栽の,参考资料  https://sourl.cn/sx6zLt

接口分析和设计的方法

企业开发中往往会通过一些工具来设计API接口,比如比较常见的一款API接口工具:YAPI

主要描述查询参数的基本信息,包括:

  • 参数名称

  • 参数是否必须

  • 参数示例

  • 参数描述

由于这里是查询用户集合,请求方式是GET,因此查询参数就是普通的QUERY参数,也就是路径后的?

拼接参数。如果是POST或者PUT请求,这里还可以传递更复杂的参数格式,比如FORM表单、JSON等

知道了这些,前端就知道发送请求时,要携带哪些参数了。

...................

2.数据结构

基于之前的分析,我们已经知道了业务基本流程、用户的交互行为。而用户的这些行为必然产生数据,需要保存到数据库中。这些数据在保存时必须有设定好的结构,这样才能支撑我们完成各种接口功能。

接下来,我们就分析一下课表相关的业务对应的数据结构。

ER图

我们可以结合原型图中包含的信息来画一个ER图,分析我的课表包含的信息:

表结构

基于ER图,课表对应的数据库结构应该是这样的:

CREATE TABLE learning_lesson ( id bigint NOT NULL COMMENT '主键', user_id bigint NOT NULL COMMENT '学员id', course_id bigint NOT NULL COMMENT '课程id', status tinyint DEFAULT '0' COMMENT '课程状态,0-未学习,1-学习中,2-已学完,3-已失效', week_freq tinyint DEFAULT NULL COMMENT '每周学习频率,每周3天,每天2节,则频率为6', plan_status tinyint NOT NULL DEFAULT '0' COMMENT '学习计划状态,0-没有计划,1-计划进行中', learned_sections int NOT NULL DEFAULT '0' COMMENT '已学习小节数量', latest_section_id bigint DEFAULT NULL COMMENT '最近一次学习的小节id', latest_learn_time datetime DEFAULT NULL COMMENT '最近一次学习的时间', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', expire_time datetime NOT NULL COMMENT '过期时间', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), UNIQUE KEY idx_user_id (user_id,course_id) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生课表';

我们要创建一个名为tj_learning的database,并且执行上面的SQL语句,创建learning_lesson

3 代码生成

在天机学堂项目中,我们使用的是Mybatis作为持久层框架,并且引入了MybatisPlus来简化开发。因此,在创建据库以后,就需要创建对应的实体类、mapper、service等。

这些代码格式固定,编写起来又比较费时。好在IDEA中提供了一个MP插件,可以生成这些重复代码

private final CatalogueClient catalogueClient;

@Override
public LearningLessonVO queryMyCurrentLesson() {
    // 1.获取当前登录的用户
    Long userId = UserContext.getUser();
    // 2.查询正在学习的课程 select * from xx where user_id = #{userId} AND status = 1 order by latest_learn_time limit 1
    LearningLesson lesson = lambdaQuery()
            .eq(LearningLesson::getUserId, userId)
            .eq(LearningLesson::getStatus, LessonStatus.LEARNING.getValue())
            .orderByDesc(LearningLesson::getLatestLearnTime)
            .last("limit 1")
            .one();
    if (lesson == null) {
        return null;
    }
    // 3.拷贝PO基础属性到VO
    LearningLessonVO vo = BeanUtils.copyBean(lesson, LearningLessonVO.class);
    // 4.查询课程信息
    CourseFullInfoDTO cInfo = courseClient.getCourseInfoById(lesson.getCourseId(), false, false);
    if (cInfo == null) {
        throw new BadRequestException("课程不存在");
    }
    vo.setCourseName(cInfo.getName());
    vo.setCourseCoverUrl(cInfo.getCoverUrl());
    vo.setSections(cInfo.getSectionNum());
    // 5.统计课表中的课程数量 select count(1) from xxx where user_id = #{userId}
    Integer courseAmount = lambdaQuery()
            .eq(LearningLesson::getUserId, userId)
            .count();
    vo.setCourseAmount(courseAmount);
    // 6.查询小节信息
    List<CataSimpleInfoDTO> cataInfos =
            catalogueClient.batchQueryCatalogue(CollUtils.singletonList(lesson.getLatestSectionId()));
    if (!CollUtils.isEmpty(cataInfos)) {
        CataSimpleInfoDTO cataInfo = cataInfos.get(0);
        vo.setLatestSectionName(cataInfo.getName());
        vo.setLatestSectionIndex(cataInfo.getCIndex());
    }
    return vo;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能基础_机器学习040_Sigmoid函数详解_单位阶跃函数与对数几率函数_伯努利分布---人工智能工作笔记0080

然后我们再来详细说一下Sigmoid函数,上面的函数的公式 我们要知道这里的,Sigmoid函数的意义,这逻辑斯蒂回归的意义就是,在多元线性回归的基础上,把 多元线性回归的结果,缩放到0到1之间对吧,根据中间的0.5为分类,小于0.5的一类,大于的一类, 这里的h theta(x) 就是概率函数 然…

Nginx配置免费HTTPS详细教程

文章目录 背景说明环境准备说明安装Nginx及依赖环境配置HTTPS步骤步骤1&#xff1a;创建服务器私钥步骤2&#xff1a;创建签名请求的证书&#xff08;CSR&#xff09;步骤3&#xff1a;加载SSL支持的Nginx并使用私钥时去除口令步骤4&#xff1a;将密钥文件移动到Nginx配置文件目…

【每日一题】2760. 最长奇偶子数组-2023.11.16

题目&#xff1a; 2760. 最长奇偶子数组 给你一个下标从 0 开始的整数数组 nums 和一个整数 threshold 。 请你从 nums 的子数组中找出以下标 l 开头、下标 r 结尾 (0 < l < r < nums.length) 且满足以下条件的 最长子数组 &#xff1a; nums[l] % 2 0对于范围 […

MyEclipse 2017 安装与pj

关于Myeclipse 2017的安装与破解 MyEclipse企业级工作平台&#xff08;MyEclipseEnterprise Workbench &#xff0c;简称MyEclipse&#xff09;是对EclipseIDE的扩展&#xff0c;利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。…

如何实现SSL证书自动部署、自动续费、自动更新?看这里~

SSL证书默认有效期默认为1年&#xff0c;部分免费证书的默认有效期为3个月。您必须在证书到期前的30个自然日内续费并更新证书&#xff0c;才能延长证书的服务时长。证书续费时&#xff0c; 会颁发一个新的证书&#xff0c;您收到新证书后需要手工更新到服务器上。部分证书支持…

人格障碍在线测试,人格障碍筛查和判断 PDQ-4+

每个人都是独一无二的&#xff0c;每个人都存在人格上的偏差&#xff0c;日常生活中我们携带着自己的人格在忙碌&#xff0c;在不够成对学习、生活和工作的影响下&#xff0c;我们认为都是健康的人格&#xff0c;反之则属于人格障碍。 人格障碍给我们的日常生活带来极大的影响…

注册即得/创业平台扶持!

问心一语持续体验中~ 与公司签订线下&#xff08;线上&#xff09;纸质合伙人代理合同&#xff0c;具备法律效力。 一级直推、非一级直推注册即得奖励。(消耗完毕被邀请用户赠送的AI免费使用条数) 即&#xff1a;邀请1人注册即得并消耗&#xff01;只需注册无需充值&#xff…

科普开关电源测试方法之开机延迟时间测试

开机延迟时间是指电源打开时&#xff0c;电源输入到输出之间的时间差。开关电源采用功率半导体器件作为开关元件&#xff0c;通过周期性通断开关&#xff0c;控制开关元件的占空比来调整输出电压。开机延迟时间测试是检测开关电源响应速度的方法之一&#xff0c;从而来判断开关…

学习c#的第十三天

目录 C# 多态性 静态多态性 函数重载 运算符重载 动态多态性 virtual 和 abstract 抽象方法和虚方法的区别 重载(overload)和重写(override) 隐藏方法 C# 多态性 多态是同一个行为具有多个不同表现形式或形态的能力。 多态性意味着有多重形式。在面向对象编程范式中…

2023年山东省安全员A证证考试题库及山东省安全员A证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年山东省安全员A证证考试题库及山东省安全员A证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

一文讲透IGBT工作原理 | 百能云芯

在实际应用中最流行和最常见的电子元器件是双极结型晶体管 BJT 和 MOS管。 IGBT实物图电路符号图 你可以把 IGBT 看作 BJT 和 MOS 管的融合体&#xff0c;IGBT具有 BJT 的输入特性和 MOS 管的输出特性。与 BJT 或 MOS管相比&#xff0c;绝缘栅双极型晶体管 IGBT 的优势在于它提…

项目文章:oxBS揭示复发性膀胱癌的DNA甲基化和羟甲基化变化并鉴定预测PD-L1表达标记物

近日&#xff0c;徐州市中心医院&#xff08;徐州医科大学徐州临床学院&#xff09;史振铎等为第一作者、韩从辉教授为通讯作者在《Biomarker Research》杂志发表题为“Integrative multi-Omics analysis depicts the methylome and hydroxymethylome of recurrent bladder can…

印染污水处理设备的物理法分类有哪些设备?

印染污水处理设备的物理法分类主要有以下几种设备&#xff1a; 筛滤截留法&#xff1a;主要采用筛网、格栅、滤池与微滤机等设备&#xff0c;用于去除污水中的悬浮物和漂浮物。重力分离法&#xff1a;主要采用沉砂池、沉淀池、隔油池与气浮机等设备&#xff0c;利用重力或浮力…

使用量子玻尔兹曼机推进机器学习:新范式

一、说明 量子玻尔兹曼机&#xff08;QBM&#xff09;是量子物理学和机器学习的前沿融合。通过利用叠加和纠缠等量子特性的力量&#xff0c;QBM 可以同时探索多个解决方案&#xff0c;使其异常擅长解决复杂问题。它使用量子位&#xff08;量子计算的构建模块&#xff09;以传统…

表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序

目录 表白墙引入数据库 再谈Cookie和session 得到Cookie ​编辑 设置Cooie 使用Cookie编写一个登入的小界面 表白墙引入数据库 1.先引入数据库的依赖&#xff08;驱动包&#xff09;&#xff0c;5.1.49 pom.xml中&#xff0c;在之前的两个之前&#xff0c;再去添加一个 &…

RT-DETR算法优化改进:轻量级上采样CARAFE算子 | 注意力机制大作战

💡💡💡本文独家改进: 上采样操作CARAFE,具有感受野大、内容感知、轻量级、计算速度快等优点,引入RT-DETR二次创新; 1)代替Upsample进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.html ✨✨✨魔改创…

Seatunnel及web搭建流程

准备工作 Java环境 要求java8或者java11&#xff0c;并设置JAVA_HOME&#xff0c;如果JAVA_HOME无效&#xff0c;需要设置为有效状态。 echo ${JAVA_HOME} 创建安装软件目录 sudo mkdir -p /opt/seatunnel/backend sudo mkdir -p /opt/seatunnel/web 下载软件 从https://…

新手小白看过来——带你快速入门跨境电商

近几年来&#xff0c;国内外贸交易是越来越火爆&#xff0c;其中跨境电商成为了2023年的热门风口行业&#xff0c;尽管现在做跨境电商的从业者有很多&#xff0c;但仍然有许多0基础小白想通过跨境电商获取人生的第一桶金&#xff0c;那么新手应该如何在跨境电商领域取得成功呢&…

jedis连接redis

package com.wsd;import redis.clients.jedis.Jedis;import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties;public class Redis {public static void main(String[] args) {//读取properti…

侧面多级菜单(一个大类、一个小类、小类下多个物体)

效果&#xff1a; 说明&#xff1a; 左右侧面板使用Animator组件控制滑入滑出。左侧面板中&#xff0c;左的左里面是大类&#xff0c;左的右有绿色的小类&#xff0c;绿色的小类下有多个真正的UI图片按钮。 要点&#xff1a; 结合了一点EasyGridBuilderPro插件的UI元素&…