练习-赛事中心

juvenil-competition

总览

  1. 需求分析,梳理功能点
  2. 制定技术方案,绘制架构设计图
  3. 数据表结构设计
  4. 建立数据模型
  5. API 接口设计
  6. 开发具体功能,完成业务逻辑
  7. 单元测试

1. 需求分析,梳理功能点

通过管理后台,新建一个项目,在项目中新建一个赛事,上传图片,文字,链接,保存到数据库。前端 H5 页面展示这些上传的数据。

功能点:

  • 新增项目、编辑项目、删除项目、获取项目分页
  • 新增赛事、编辑赛事、删除赛事、获取赛事分页
  • 是否展示赛事
  • 图片上传
  • 数据排序
  • 导入名单,.xls 文件处理
  • banner 增删改查
  • 校区增删改查

2. 制定技术方案,绘制架构设计图

  • 技术方案文档

  • 架构设计图

技术方案

  • 使用 node 实现图片上传
  • 使用 xls 包处理表格数据上传

有一个表专门用来存储所有的项目,有一个表用来存储所有的赛事,赛事 ID 关联到项目 ID。

架构流程图

image

项目划分:

  • H5 端
  • 管理后台
  • Node 服务

3. 数据表结构设计

3.1. 概要设计:更具需求原型图,分析出需要记录的数据 3.2. 逻辑设计:根据分析出的数据,设计 ER 图,确定数据类型 3.3. 物理设计:将 ER 图转换成表结构数据库模型图

3.1. 概要设计

项目: 项目名称、排序、创建时间

赛事: 赛事名称、赛事类型、排序、创建时间、是否展示赛事、活动介绍图片、获奖类型、报名链接、赛事头图、赛事主图、学员参赛图

名单: 奖项名称、姓名、学员号、校区、指导老师、参赛时间、排序、团队名称

banner: 名称、图片、排序、创建时间、链接地址

校区: 名称、创建时间

3.2. 逻辑设计,ER 图

image

3.3. 物理设计

项目表:project

字段名称类型说明
id(PK)int主键
projectNamevarchar(128)项目名称
projectSortsmallint项目排序
createTimedatetime创建时间

赛事表:contest

字段名称类型说明
id(PK)int主键
projectIdint项目 ID
contestNamevarchar(128)赛事名称
contestSortsmallint赛事排序
typesmallint赛事类型:(1 / 2)
createTimedatetime创建时间
isShowsmallint是否展示赛事:(0 / 1)
linkvarchar(256)报名链接
introduceImgvarchar(256)活动介绍图片
topImgvarchar(256)赛事头图
mainImgvarchar(256)赛事主图
takeImgvarchar(256)学员参赛图

名单表:user

字段名称类型说明
id(PK)int主键
contestIdint赛事 ID
awardNamevarchar(128)奖项名称
groupNamevarchar(128)团队名称
userNamevarchar(64)学员姓名
userCodevarchar(64)学员号
schoolvarchar(64)校区
teachervarchar(64)指导老师
awardSortsmallint排序
awardTimedatetime参赛时间

轮播表:banner

字段名称类型说明
id(PK)int主键
namevarchar(128)名称
picvarchar(128)图片地址
linkvarchar(128)链接地址
sortsmallint排序
createTimedatetime创建时间

校区表:school

字段名称类型说明
id(PK)int主键
namevarchar(128)名称
createTimedatetime创建时间

4. 建立数据模型

在代码中建模,添加表关联

5. API 接口设计

  • 设计页面接口

项目管理

新增项目:/add-project

  • post

入参:

字段名称类型说明
projectNamevarchar(128)项目名称
projectSortsmallint项目排序

编辑项目:/edit-project

  • post

入参:

字段名称类型说明
id(PK)int主键
projectNamevarchar(128)项目名称
projectSortsmallint项目排序

查询项目分页:/get-project-page

  • get

入参:

字段名称类型说明
projectNamevarchar(128)项目名称
currentnumber当前页数
sizenumber需要获取多少条数据

查询项目详情:/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

入参:

字段名称类型说明
contestNamevarchar(128)赛事名称
currentnumber当前页数
sizenumber需要获取多少条数据

查询赛事详情:/get-contest-detail

  • get

入参:

字段名称类型说明
id(PK)int主键

删除赛事:/del-contest

  • del

入参:

字段名称类型说明
id(PK)int主键

名单管理

新增名单:/add-users

  • post

入参:查看名单表-user

下载名单:/get-users

  • get

入参:

字段名称类型说明
contestIdint赛事 ID

新增 banner:/add-banner

  • post

入参:轮播表:banner

编辑 banner:/edit-banner

  • put

入参:轮播表:banner

获取 banner 分页:/get-banner-page

  • get

入参:

字段名称类型说明
namevarchar(128)名称
currentnumber当前页数
sizenumber需要获取多少条数据

获取 banner 详情:/get-banner-detail

  • get

入参:

字段名称类型说明
idintID

删除:/del-banner

  • del

入参:

字段名称类型说明
id(PK)int主键

校区管理

新增校区:/add-school

  • post

入参:校区表:school

编辑校区:/edit-school

  • put

入参:校区表:school

获取校区分页:/get-school-page

  • get

入参:

字段名称类型说明
namevarchar(128)名称
currentnumber当前页数
sizenumber需要获取多少条数据

获取校区详情:/get-school-detail

  • get

入参:

字段名称类型说明
idintID

删除:/del-school

  • del

入参:

字段名称类型说明
id(PK)int主键

6. 开发具体功能,完成业务逻辑

  • 校验数据
  • 开发项目管理接口功能

7. 单元测试

  • 自测通过后,再前后端联调

使用 ChatGPT 辅助开发

上下文描述:

请协助我做软件开发,只需要提供给我指定的代码片段,去掉安装、配置、启动等步骤代码,因为这些在我的项目中已经实现了。

我使用的技术是:NodeJS + MidwayJS + TypeScript + MySQL + sequelize-typescript

我现在要做的功能是

Last Updated: 2023/4/24 13:33:14
Contributors: licong96