练习-赛事中心
juvenil-competition
总览
- 需求分析,梳理功能点
- 制定技术方案,绘制架构设计图
- 数据表结构设计
- 建立数据模型
- API 接口设计
- 开发具体功能,完成业务逻辑
- 单元测试
1. 需求分析,梳理功能点
通过管理后台,新建一个项目,在项目中新建一个赛事,上传图片,文字,链接,保存到数据库。前端 H5 页面展示这些上传的数据。
功能点:
- 新增项目、编辑项目、删除项目、获取项目分页
- 新增赛事、编辑赛事、删除赛事、获取赛事分页
- 是否展示赛事
- 图片上传
- 数据排序
- 导入名单,.xls 文件处理
- banner 增删改查
- 校区增删改查
2. 制定技术方案,绘制架构设计图
技术方案文档
架构设计图
技术方案
- 使用 node 实现图片上传
- 使用 xls 包处理表格数据上传
有一个表专门用来存储所有的项目,有一个表用来存储所有的赛事,赛事 ID 关联到项目 ID。
架构流程图:
项目划分:
- H5 端
- 管理后台
- Node 服务
3. 数据表结构设计
3.1. 概要设计:更具需求原型图,分析出需要记录的数据 3.2. 逻辑设计:根据分析出的数据,设计 ER 图,确定数据类型 3.3. 物理设计:将 ER 图转换成表结构数据库模型图
3.1. 概要设计
项目: 项目名称、排序、创建时间
赛事: 赛事名称、赛事类型、排序、创建时间、是否展示赛事、活动介绍图片、获奖类型、报名链接、赛事头图、赛事主图、学员参赛图
名单: 奖项名称、姓名、学员号、校区、指导老师、参赛时间、排序、团队名称
banner: 名称、图片、排序、创建时间、链接地址
校区: 名称、创建时间
3.2. 逻辑设计,ER 图
3.3. 物理设计
项目表:project
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
projectName | varchar(128) | 项目名称 |
projectSort | smallint | 项目排序 |
createTime | datetime | 创建时间 |
赛事表:contest
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
projectId | int | 项目 ID |
contestName | varchar(128) | 赛事名称 |
contestSort | smallint | 赛事排序 |
type | smallint | 赛事类型:(1 / 2) |
createTime | datetime | 创建时间 |
isShow | smallint | 是否展示赛事:(0 / 1) |
link | varchar(256) | 报名链接 |
introduceImg | varchar(256) | 活动介绍图片 |
topImg | varchar(256) | 赛事头图 |
mainImg | varchar(256) | 赛事主图 |
takeImg | varchar(256) | 学员参赛图 |
名单表:user
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
contestId | int | 赛事 ID |
awardName | varchar(128) | 奖项名称 |
groupName | varchar(128) | 团队名称 |
userName | varchar(64) | 学员姓名 |
userCode | varchar(64) | 学员号 |
school | varchar(64) | 校区 |
teacher | varchar(64) | 指导老师 |
awardSort | smallint | 排序 |
awardTime | datetime | 参赛时间 |
轮播表:banner
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
name | varchar(128) | 名称 |
pic | varchar(128) | 图片地址 |
link | varchar(128) | 链接地址 |
sort | smallint | 排序 |
createTime | datetime | 创建时间 |
校区表:school
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
name | varchar(128) | 名称 |
createTime | datetime | 创建时间 |
4. 建立数据模型
在代码中建模,添加表关联
5. API 接口设计
- 设计页面接口
项目管理
新增项目:/add-project
- post
入参:
字段名称 | 类型 | 说明 |
---|---|---|
projectName | varchar(128) | 项目名称 |
projectSort | smallint | 项目排序 |
编辑项目:/edit-project
- post
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
projectName | varchar(128) | 项目名称 |
projectSort | smallint | 项目排序 |
查询项目分页:/get-project-page
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
projectName | varchar(128) | 项目名称 |
current | number | 当前页数 |
size | number | 需要获取多少条数据 |
查询项目详情:/get-project-detail
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
删除项目:/del-project
- delete
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
赛事管理
新增赛事:/add-contest
入参:查看赛事表-contest
- post
编辑赛事:/edit-contest
入参:查看赛事表-contest
- put
查询赛事分页:/get-contest-page
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
contestName | varchar(128) | 赛事名称 |
current | number | 当前页数 |
size | number | 需要获取多少条数据 |
查询赛事详情:/get-contest-detail
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
删除赛事:/del-contest
- del
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
名单管理
新增名单:/add-users
- post
入参:查看名单表-user
下载名单:/get-users
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
contestId | int | 赛事 ID |
banner 管理
新增 banner:/add-banner
- post
入参:轮播表:banner
编辑 banner:/edit-banner
- put
入参:轮播表:banner
获取 banner 分页:/get-banner-page
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
name | varchar(128) | 名称 |
current | number | 当前页数 |
size | number | 需要获取多少条数据 |
获取 banner 详情:/get-banner-detail
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id | int | ID |
删除:/del-banner
- del
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
校区管理
新增校区:/add-school
- post
入参:校区表:school
编辑校区:/edit-school
- put
入参:校区表:school
获取校区分页:/get-school-page
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
name | varchar(128) | 名称 |
current | number | 当前页数 |
size | number | 需要获取多少条数据 |
获取校区详情:/get-school-detail
- get
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id | int | ID |
删除:/del-school
- del
入参:
字段名称 | 类型 | 说明 |
---|---|---|
id(PK) | int | 主键 |
6. 开发具体功能,完成业务逻辑
- 校验数据
- 开发项目管理接口功能
7. 单元测试
- 自测通过后,再前后端联调
使用 ChatGPT 辅助开发
上下文描述:
请协助我做软件开发,只需要提供给我指定的代码片段,去掉安装、配置、启动等步骤代码,因为这些在我的项目中已经实现了。
我使用的技术是:NodeJS + MidwayJS + TypeScript + MySQL + sequelize-typescript
我现在要做的功能是