第三次作业:详细设计与接口实现报告

news/2025/11/22 1:07:11/文章来源:https://www.cnblogs.com/aliyaablat/p/19254924

团队名称:洛珈山下
日期:2025-11-22

  1. 本次作业目标
    | 维度 | 目标 |
    | ---- | ---------------------------------------------------------- |
    | 对齐进度 | 将第二次作业“校正后的安排”细化为可执行任务并分配到人 |
    | 接口落地 | 给出“已冻结”的 RESTful 接口文档(路径、请求/响应、错误码、Mock) |
    | 前端联调 | 输出Mock 服务器(基于 Vite+Express)与真接口并行方案 |
    | 测试左移 | 为每个接口写出单元测试用例(gtest/doctest)与Postman 集合 |
    | 风险闭环 | 建立每日 Stand-up 模板燃尽图追踪机制 |

  2. 本周(第12周)详细任务分解
    原则:一张卡一个可交付物,粒度 ≤ 4 h,全部录入 Gitee Issues(标签:week-12)
    | 序号 | 任务卡标题 | 描述 / 验收标准 | 后端负责人 | 前端负责人 | 计划工时 |
    | ----- | ------------------ | ------------------- | ----- | ----- | ---- |
    | 12-1 | 【用户】登录/注册接口冻结 | 文档+Mock+单元测试通过 | 齐思贤 | 张嘉铭 | 4 h |
    | 12-2 | 【用户】JWT 中间件 & 全局异常 | 401/403/429 统一返回 | 齐思贤 | — | 3 h |
    | 12-3 | 【商户】创建商户 & 冻结字段 | 包含审核状态流转 | 阿丽亚 | — | 5 h |
    | 12-4 | 【商户】商户详情+列表接口 | 分页、校区/分类筛选 | 阿丽亚 | 文昊 | 5 h |
    | 12-5 | 【点评】发布点评 & 图片上传 | OSS 直签+本地 Mock | 谢嘉骏 | 张嘉铭 | 6 h |
    | 12-6 | 【点评】点赞/取消点赞 | Redis INCR + 定时落库 | 谢嘉骏 | — | 3 h |
    | 12-7 | 【收藏】收藏/取消收藏 | 幂等设计 | 袁镇清 | 文昊 | 3 h |
    | 12-8 | 【搜索】ES 索引 Mapping | 商户 & 点评 2 个索引 | 袁镇清 | — | 4 h |
    | 12-9 | 【Mock】前端联调服务器 | 基于 Vite-plugin-mock | — | 张嘉铭 | 4 h |
    | 12-10 | 【部署】CI 流水线 | Go 单元测试+编译镜像 | 齐思贤 | — | 3 h |

  3. 接口冻结文档(节选)
    完整文档已推送至 Gitee Wiki
    3.1 用户服务
    POST /api/v1/users/register
    Request

JSON
{
"student_id": "20211234",
"password": "Abc123456",
"nickname": "珞珈山扛把子"
}

JSON
{
"code": 200,
"message": "注册成功",
"data": { "user_id": 142536172839456256 }
}
异常

code message 场景
400 学号已存在 DB unique
400 密码强度不足 正则

单元测试(Go)
go
复制
func TestRegisterDuplicate(t *testing.T) {
req := {"student_id":"20211234","password":"Abc123456","nickname":"nick"}
w := httptest.NewRecorder()
router.ServeHTTP(w, httptest.NewRequest("POST", "/api/v1/users/register", strings.NewReader(req)))
assert.Equal(t, 400, w.Code)
assert.Contains(t, w.Body.String(), "学号已存在")
}
3.2 商户服务
POST /api/v1/merchants
Header
Authorization: Bearer
Body
JSON
复制
{
"name": "东区麻辣烫",
"campus": "东校区",
"category_id": 3,
"address": "东区食堂2楼",
"business_hours": "10:00-21:30",
"tags": ["夜宵", "性价比高"],
"images": ["https://cdn.xxx.com/tmp/aaa.jpg"]
}
Response 200
JSON
复制
{
"code": 200,
"message": "提交成功,待审核",
"data": { "merchant_id": 142536199898765312, "status": 10 }
}
3.3 点评服务
POST /api/v1/reviews
Body
JSON
复制
{
"merchant_id": 142536199898765312,
"score": 4.5,
"content": "今天麻辣烫量很大!",
"images": ["https://cdn.xxx.com/review/1.jpg"],
"tags": ["量大", "实惠"],
"anonymous": true
}
Response 200
JSON
复制
{
"code": 200,
"message": "发布成功",
"data": { "review_id": 142536277777777777 }
}
4. 前端 Mock 方案
由张嘉铭统一维护,路径 frontend/mock/
TypeScript
复制
// mock/user.ts
export default [
{
url: '/api/v1/users/register',
method: 'post',
response: ({ body }) => {
if (body.student_id === '20211234') {
return { code: 400, message: '学号已存在' };
}
return { code: 200, data: { user_id: '142536172839456256' } };
},
},
];
启动命令
bash
复制
pnpm dev:mock # 同时启动 Vite + Express-Mock
5. 测试策略

层级 工具 覆盖要求 责任人
单元 Go + testify 核心业务 ≥ 80% 各后端
接口 Postman + Newman 全部 P0 接口 齐思贤
性能 k6 300 并发 < 500 ms 袁镇清
E2E Cypress 登录→发布点评→点赞 主流程 文昊
  1. 风险与对策
    | 风险 | 触发概率 | 影响 | 对策 | owner |
    | ------- | ---- | ---- | -------------------- | ----- |
    | 比赛冲突 | 高 | 工时缩水 | 预留 30% buffer & 每日同步 | 齐思贤 |
    | ES 学习成本 | 中 | 搜索延期 | 先用 SQLite FTS5 降级 | 袁镇清 |
    | OSS 费用 | 低 | 超预算 | 校内 MinIO 替代方案 | 谢嘉骏 |

  2. 本周产出清单(验收标准)
    Gitee Issues 100% 创建并打标签 week-12
    backend/api/ 目录下 接口文档 Markdown 与代码同级
    backend/mock/ 下线,单元测试通过率 ≥ 80%
    frontend/mock/ 可脱离后端独立运行
    Postman 集合导出文件 Campus-Review-P0.json 上传至 Wiki
    燃尽图每日自动推送(GitHub Action)

  3. 下周(13 周)前瞻
    点评回复、搜索联调、管理后台页面
    第一次 “吃狗粮” 活动:团队成员使用自己系统发布 3 条真实点评
    性能压测达标:300 并发 95th < 500 ms

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

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

相关文章

102302112王光诚作业3

作业①: 要求:指定一个网站,爬取这个网站中的所有的所有图片,例如:中国气象网(http://www.weather.com.cn)。实现单线程和多线程的方式爬取。 –务必控制总页数(学号尾数2位)、总下载的图片数量(尾数后3位)等…

【VSCode】为不同语言设置工作区减少内存占用的方法

本方法应该适用于VSCode以及基于VSCode开发的一系列编辑器(Cursor,Antigravity...) motivation是在我16GB内存的电脑上开了几个ide,挂了几个后台应用程序,就发现内存打满了,和同学交流后发现一个解法,通过设置不同…

Xhorse XDKP24 MB Power Adapter for VVDI Key Tool Plus Pad – Simplify MB Key Programming

Why You Need the Xhorse XDKP24 Mercedes-Benz MB Power Adapter In the world of automotive repair, time is critical. Whether you’re a European auto shop technician tackling a complex Mercedes-Benz diagn…

从“阅读”到“调用”:文档抽取技术如何重塑版式软件

在数字化办公时代,PDF、扫描图像等版式固定文档承载着海量的关键信息。然而,这些文档的“只读”特性使其内部的数据如同被锁在坚固的盒子中,难以被直接编辑、分析和利用。文档抽取技术的出现,正是打开这些“数据盒…

2025-11-22 Ed25519 Error: error:1E08010C:DECODER routines::unsupported

Ed25519 Error: error:1E08010C:DECODER routines::unsupported

2025 Xhorse XKXH23EN 4-Button Universal Garage Door Remote (5pcs/lot)

Problem: Garage Door Remote Woes – A Frustration for Mechanics and Car Owners For European and American car owners, a malfunctioning garage door remote is more than an inconvenience—it’s a daily has…

P1009 阶乘之和

点击查看代码 #include<bits/stdc++.h>using namespace std;vector<int> A,s; int n;//高精度加法的模板 vector<int> add(vector<int> A,vector<int> B) {if(A.size()<B.size()) re…

“考古”早期自然语言对话程序——ELIZA

“考古”早期自然语言对话程序——ELIZA 前言 在我小时候读书时,班里曾流行过一个新奇的玩具——《答案之书》(也可以叫《解答之书》)。那是一本颇浪费纸张的书,书很厚但每页的内容却只有寥寥几数字,在心中默念你…

洛谷 B4416:[GESP202509 四级] 最长连续段 ← sort+unique

​【题目来源】https://www.luogu.com.cn/problem/B4416【题目描述】对于 k 个整数构成的数组 [b1, b2, …, bk],如果对 1≤i<k 都有 bi+1=bi+1,那么称数组 b 是一个连续段。给定由 n 个整数构成的数组 [a1, a2, …

Windows Server 2022 安装 SqlServer2000

有个客户有个旧系统,只能使用SqlServer2000,但服务器是Windows Server 2022 Standard,安装时有些地方要注意:SqlServer的安装文件 SQL2000\PERSONAL\X86\SETUP\SETUPSQL.EXE 要设置为“以兼容模式运行这个程序”,…

RCTF pwn方向题解(缺bbox)

mstr python pwn 漏洞和python内部的机制有关系,python对象并不直接存储对象,而是存储对象的引用。而mutableString类的data是string,max_size_str也是string。这就会导致data和max_size_str指向同一个字符对象。 至…

第32天(简单题中等题 数据结构)

打卡第三十二天 3道简单题+1道中等题题目两数之和:思路:哈希表,对数组中的每一个数 x,寻找数组中是否存在 target - x。创建一个哈希表,对于每一个x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈…

2025年11月GEO公司谁专业?硬核测评TOP10终极对比

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年11月GEO公司终极对比:如何选?10家服务商全景解析

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年11月GEO公司深度盘点:哪家做得好?10家服务商全景解析

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年11月GEO公司哪家强?热度榜TOP10硬核测评

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年11月GEO公司谁专业?权威发布推荐对比

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年11月GEO公司全景报告:哪家强?十大服务商权威揭晓

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年11月GEO公司选择报告:哪个服务商实战案例更突出?

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

【CI130x 离在线】Linux平台从命名管道接收PCM格式数据并转为WAV文件——Python脚本实现

我来为您提供一个完整的解决方案,使用Python实现从命名管道读取PCM数据并转换为WAV文件。 方案概述 我将使用Python实现,因为它有良好的音频处理库支持。程序会监听命名管道,当检测到数据流时开始录制,在数据流中断…