学术交流平台系统设计方案
1. 项目概述
了给学者提供一个方便了解学术活动以及交流的平台,各种讲座和活动宣传和实行的不便和不规范的特定情况,先行上线为广大师生提供一个可以方便查询参与活动和学术讲座的管理平台。
2. 软件设计方案
项目采用微服务架构,对模块进行垂直拆分并水平扩展,保证系统各个模块相互独立。每个模块都是一个MVC的设计模式,都负责特定的功能,既是一个模块挂了,其他模块也不受影响,做到了前后端的分离。各个模块功能参考如下。
整体系统架构如下
接口api表示方法
后端接口api以restful风格为标准,统一了命名方式。
示例,文档中获取用户信息的URL表示如下:
URL: POST /user/:solink_id/
实际调用时,以请求solink_id为1的用户资料为例,需要完成以下步骤:
- 在URL前加上URL前缀
https://api.so-link.org/v2/
。 - 在
:solink_id
处填写请求用户的solink_id。 - 使用POST方法请求。
完整URL为
https://api.so-link.org/v2/user/1/
接口调用状态
后端V2接口全部采用HTTP状态码来表示接口调用是否成功,返回结果中不会再有旧版API中的success
字段。常见HTTP状态码及其在接口中表示的意义如下表:
状态码 | 变量 | 说明 |
---|---|---|
200 | HTTP_200_OK | |
206 | HTTP_206_PARTIAL_CONTENT | 批量查询中,查询结果部分成功 |
400 | HTTP_400_BAD_REQUEST | 请求的参数、字段错误 |
403 | HTTP_403_FORBIDDEN | 认证失败或无执行操作的权限 |
404 | HTTP_404_NOT_FOUND | 请求的资源不存在 |
405 | HTTP_405_METHOD_NOT_ALLOWED | 请求方法错误 |
409 | HTTP_409_CONFLICT | 服务器资源已存在 |
当状态码不为200时,返回结果中会包含一个detail
字段,用于描述错误原因。示例:
{"detail": "Operation not permitted."}
3. 系统视图
注册时序
登陆时序
签到时序
请求处理流程
部署视图
4. 通用数据模型
用户个人资料
字段 | 类型 | 说明 |
---|---|---|
solink_id | integer | 用户solink_id |
name | string | 用户姓名 |
phone | string | 手机号(创建后不可修改) |
string | 用户邮箱 | |
affiliation | string | 用户所属单位 |
title | string | 用户职称 |
avatar_url | string | 用户头像 |
school_id | string | 用户学号或者工号 |
会议信息
字段 | 类型 | 说明 |
---|---|---|
conference_id | string | 会议id |
name | string | 会议名称 |
start_time | datetime | 会议开始时间 |
end_time | datetime | 会议结束时间 |
location | string | 会议地点 |
poster_url | string | 海报图片url |
introduction | string | 会议介绍 |
organizer | string | 主办方 |
is_valid | integer | 审核状态(0:待审核, 1:审核通过, -1:审核未通过, 2: 会议已删除) |
tags | string | 会议标签 |
popularity | float | 会议热门度 |
评论回复信息
字段 | 类型 | 说明 |
---|---|---|
comment_id | integer | 评论id |
comment_time | datetime | 发表评论时间 |
comment_content | string | 评论内容 |
comment_url | string | 评论图片url |
comment_is_public | Boolean | 评论是否公开 |
comment_upvote_count | integer | 评论点赞数 |
set_top | boolean | 评论顶置, 默认为false |
reply_count | integer | 评论的回复数量 |
reply_id | integer | 对评论的回复id |
parent_reply | integer | 指定对哪一条回复进行回复 |
reply_time | datetime | 回复时间 |
reply_content | string | 回复内容 |
reply_upvote_count | integer | 回复点赞数 |
hasUpvoted | bool | 用户是否已经对某条评论点赞 |
5. 实现视图
6. 技术选型
开发方法:
主要采用面向接口的方式进行开发,尽量解耦合,模块之间通过http,路由到内部网关调用,这样能够很好的保持软件的可维护性和可扩展性。网关是基于openresty构建
开发主要语言:python
开发环境:Windows10,MacOS
部署环境:Docker+Ubuntu
开发工具:pycharm,VSCode
数据库:mysql,redis,mongodb
7. 概念模型工作机制
-
参会者
参会者通过微信或者账号密码登陆,查看各种讲座信息和报名参加各种会议和活动。扫码功能使得用户在现场能够签到。
学者也可以上传自己学术讲座视频分享学术成果。
-
活动发起者
活动主办方登陆后发起一个活动,并可以生成动态的签到二维码,在会场给用户签到。
-
管理员
管理员通过账号密码登录系统后,可以对活动的信息进行管理工作。