听书项目 Day 05|用户接口与 Elasticsearch 基础
记录当前用户信息和资料更新接口,并学习 Elasticsearch 的分词、倒排索引及基础操作。 本篇要点 补齐用户资料相关接口 理解搜索与倒排索引 练习 Elasticsearch 基础操作 内容回顾 用户登录功能 1、用户登录业务流程 Cookie: – Cookie默认会话级别,设置Cookie有效时间 – 每次请求都会携带cookie值,cookie是key-value结构 – 默认不能跨域访问,放到请求头传递 RabbitMQ: – 异步、解耦、流量削峰 – 场景:用户第一次登录时候,初始化账户使用RabbitMQ异步实现的 – 缺陷:实时一致性,因为异步 2、登录校验 自定义注解 + AOP实现的 3、登录接口 今天内容1、登录其他接口获取当前登录用户信息 123456789101112131415//获取当前登录用户信息@GuiguLogin(required = true)@GetMapping("getUserInfo")public Result getUserInfo() { //获取当前登录用户i...
听书项目 Day 04|微信登录与登录校验
梳理微信小程序登录、OpenID 查询、Redis 保存登录态,以及自定义注解和 AOP 校验登录的流程。 本篇要点 从 code 获取用户身份 用 Redis 保存登录状态 通过注解与切面统一校验登录 内容回顾核心模块 登录 专辑详情 订单 搜索 声音管理模块 保存声音 声音列表 删除声音 修改声音 今天内容前置知识 自定义注解 AOP Redis 1、用户登录流程(背) **httpClient:**请求微信接口服务器使用httpClient **RabbitMQ:**第一次登录,使用RabbitMQ异步初始化账户余额 **Redis:**通过Redis存储token数据,Redis的key是token,value是用户信息,设置过期时间 **Cookie(localStorage):**因为cookie默认不能跨域传递的,每次发送请求时候,把cookie值放到请求头里面进行传递 自定义注解 AOP 2、实现校验登录流程 每次请求接口都需要首先做登录判断 1、从请求头获取token(前端传递过来的) 2、根据token查询redis(redis的key是...
听书项目 Day 03|声音上传与管理
整理声音管理模块,从专辑选择、腾讯云点播上传,到声音列表、删除、修改等接口的学习记录。 本篇要点 分析声音与专辑的关系 学习音频上传与保存流程 梳理声音列表和维护接口 内容回顾专辑管理模块 保存专辑 专辑列表 – 行变列 删除专辑 修改专辑 今天内容声音管理模块1、保存声音1.1 分析实现以下接口 上传声音的接口(腾讯云云点播服务) 上传图片接口(已经完成了) 查询所有专辑接口 保存声音的接口 1.2 查询所有专辑接口 AlbumInfoApiController1234567@Operation(summary = "获取当前用户全部专辑列表")@GetMapping("findUserAllAlbumList")public Result findUserAllAlbumList() { Long userId = 1L; //TODO 再完善 List<AlbumInfo> list = albumInfoService.findUserAllAlbumList(userId)...
听书项目 Day 02|专辑新增与列表管理
记录专辑标签查询、添加专辑、列表检索、删除与修改流程,重点整理关联数据的保存及接口分层。 本篇要点 按分类查询专辑属性与标签 保存专辑及关联信息 完成列表、删除和修改接口 内容回顾1、搭建项目环境 软件环境 项目工程 docker start spzx_rabbitmq 搭建前端环境 2、专辑管理 添加专辑需求 查询所有分类接口(三级分类) 上传文件接口 – 在配置文件里面有数据 yaml 或者 properties 今天内容1、添加专辑功能 根据一级分类Id获取专辑标签对应数据接口效果 表关系123456789101112131415# base_attribute:标签(属性)名称,有一级分类idselect ba.attribute_name from base_attribute ba where ba.category1_id=2;# base_attribute_value: 属性名称下面哪些值,attribute_id关联属性名称# 获取属性名称和对应值,两张表关联查询select ba.category1_id,ba.attribute_na...
听书项目 Day 01|项目搭建与专辑管理
从听书项目概览和技术栈入手,记录开发环境、Maven 工程、分类接口、专辑管理及前端环境搭建的学习过程。 本篇要点 认识项目模块与技术栈 准备环境并搭建工程 梳理分类和专辑管理入口 内容回顾1、JVM 2、JUC 线程池 – 自定义线程池 ThreadPoolExecutor,传递7个参数 – 核心线程数规则 : IO密集型 2N +1 ,CPU密集型 N+1 – 为什么不使用Executors工具类创建?而是自定义创建线程池 3、MySQL高级 索引底层结构 SQL优化 – 单表 – 多表(关联查询) 今天内容1、项目概述总体概述 谷粒随享,阅读类听书项目,类似于喜马拉雅 我们项目运行在微信小程序中 技术栈 SpringBoot:简化Spring应用的初始搭建以及开发过程 SpringBoot+SpringCloudAlibaba(Nacos)+OpenFeign+Gateway MyBatis-Plus:持久层框架,也依赖mybatis Redis:内存做缓存 MongoDB: 分布式文件存储的数据库 Rabbitmq:消息中间件;大型分布式项...
部署
这篇最初记录的是登录拦截器与 ThreadLocal,并非完整部署流水账。下面保留原笔记,在文末补充课程文档中的本地部署方案;方案笔记不等于已经完成线上部署。 TreadLocal保存当前用户信息1.1 ThreadLocal概述 ThreadLocal是Java中用于实现线程局部变量的工具类,它为每个线程提供独立的变量副本,解决多线程环境下的数据隔离问题。其核心原理是通过ThreadLocalMap存储线程专属数据,避免同步开销,适用于数据库连接管理、用户会话存储等场景,但需注意内存泄露风险 ThreadLocal和当前线程绑定到一起,当前线程结束了,ThreadLocal就没有了 ThreadLoca没有了具体指的是 当前对象 没有了,值还存在 map.set(this, value); this 没有了,value还在内存中 手动清除value值,remove方法,不然造成内存泄露 1.2 使用场景接口:获取登录用户个人信息 登录成功后,跳转到主页面中,在主页面里面调用接口,获取当前登录成功的用户信息(用户名或者头像等) 分析过程 浏览器发送请求,首先到拦截器,拦...
后台登录验证码管理
本文保留了两段不同的学习记录:前半是后台管理的图形验证码,后半是移动端的短信验证码登录。两者面对的用户和校验方式不同,阅读时不要将后台登录接口与移动端手机号登录接口混用。 后台管理登录生成图片验证码接口1. 在common中引入EasyCaptcha依赖1234<dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifactId></dependency> 2. 在common中引入redis依赖1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency> 3. 在web-admin配置文件中配置redis信息...
用户和登录模块
平台用户管理数据表user_info 先区分两类用户user_info 对应移动端租房用户;后台员工信息由系统用户相关数据维护。两类用户的使用场景不同,阅读或设计接口时不要把“平台用户管理”和“后台系统用户管理”混为一谈。 结合用户与登录篇,平台用户管理先围绕两件事展开:按手机号和状态进行条件分页,以及根据用户 ID 修改账号状态。列表返回时还要注意密码等敏感字段,不应直接作为普通用户资料展示。 后台系统管理的接口范围 岗位管理:分页、保存或更新、删除、查询与状态调整。 后台用户管理:按姓名或手机号查询,查看详情,保存或更新用户,并处理用户名可用性与账号状态。 登录管理:获取图形验证码、登录、获取当前登录用户信息,以及对受保护接口校验令牌。 这几个部分的调用关系是“维护后台账号与岗位 → 登录校验 → 后续请求携带令牌访问接口”,不是单独完成某个登录接口就结束。 登录链路的阅读顺序 获取图形验证码,服务端保存验证码及对应 key。 登录时先核对验证码,再查询后台账号、检查账号状态和密码,成功后签发 JWT。 前端在后续请求的 Header 中携带令牌;拦截器统一解析和校验,放行...
租赁管理模块
模块导读租赁管理不只有到期任务。参考项目笔记,后台先管理看房预约,再管理租约:预约侧包括条件分页与状态更新;租约侧包括保存或更新、条件分页、详情、删除和状态更新,最后由定时任务处理到期状态。本文原先重点记录的定时任务代码保留在下方。 阅读租约相关接口时,建议同时关注房间、公寓、租期和支付方式之间的关系。笔记中的租约详情会在查询租约后,再组装对应的公寓、房间、支付方式与租期信息,避免列表字段和详情字段混淆。 状态更新也要区分人工操作与到期任务:笔记里的通用状态更新接口是教学写法,实际业务不能让请求任意跳转状态;下方定时任务只筛选到期且处于指定状态的租约,再批量更新为已过期。 租约过期修改状态功能定时任务 SpringBoot定时任务 在SpringBoot启动类上增加@EnableScheduling注解 12345678@SpringBootApplication@EnableSchedulingpublic class AdminWebApplication { public static void main(String[] args) { ...
房间管理模块
房间管理模块接口一:保存或更新房间信息根据项目笔记,后台房间管理围绕六个接口展开:保存或更新、条件分页、详情、删除、修改发布状态,以及按公寓查询房间。下面先补充保存或更新接口的数据关系,便于后续对照实际代码。 请求数据与关联关系RoomSubmitVo 在房间基本信息之外,还携带图片列表、属性值 ID、配套 ID、标签 ID、支付方式 ID 和可选租期 ID。房间本体与这些信息不是同一张表;保存房间后,需要用房间 ID 维护对应的图片记录和关联记录。 更新时,项目笔记采用“清理原关联数据,再写入本次提交的关联数据”的方式。理解这一步时要把主表和关联表一起看:只更新 room_info,页面详情中看到的图片、配套或租期仍可能是旧数据。多表写入也应作为一个整体考虑,避免执行到一半留下不一致的关系。 其余五个接口怎么读 接口 重点核对 条件分页 RoomQueryVo 按省、市、区和公寓筛选;列表结果还包含所属公寓与入住信息。 房间详情 在房间基本信息上组装公寓、图片、属性、配套、标签、支付方式和租期。 删除房间 除房间本体外,还需处理图片及各类关联记录。 修改发...
