设计文档
一、数据库设计
存储:MongoDB
表名:partner_site
索引:
1. {"_id": 1}
2. {"name": 1}
3. {"status": 1}
4. {"status": 1, "name": 1}
表结构:
{
"_id": 1,
"name": "站点名",
"template_id": 1, # 模板ID
"status": 1, # 1-上线,2-下线,3-删除,
"details":{
# banner区设置
"banner":{
"text_content": "这是文案内容",
"text_color": "#fff",
"logo_img": "http://fakdfka.qcloud.com/fjdkfja/fkjakdfja.jpg",
"background_img": "http://fakdfka.qcloud.com/fjdkfja/fkjakdfja.jpg"
},
# 文字营销区设置
"text":{
"title_1_content": "标题1内容",
"title_1_color": "标题1颜色",
"title_2_content": "标题2内容",
"title_2_color": "标题2颜色",
"first_content": "一级内容",
"first_color": "#fff",
"second_content": "二级内容",
"second_color": "#fff",
"background_color": "背景色",
},
# 左上营销区设置
"left_top": {
"first_content": "一级内容",
"first_color": "#fff",
"second_content": "二级内容",
"second_color": "#fff",
"background_img": "背景图地址",
},
# 右上营销区设置
"right_top": {
"first_content": "一级内容",
"first_color": "#fff",
"second_content": "二级内容",
"second_color": "#fff",
"background_img": "背景图地址",
},
# 左下营销区设置
"left_bottom": {
"first_content": "一级内容",
"first_color": "#fff",
"second_content": "二级内容",
"second_color": "#fff",
"background_img": "背景图地址",
},
# 右下营销区设置
"right_bottom": {
"first_content": "一级内容",
"first_color": "#fff",
"second_content": "二级内容",
"second_color": "#fff",
"background_img": "背景图地址",
},
# 联系方式
"contact": {
"address": "xxxxx",
"time": "xxxx",
"phone": "18823740267",
"email": "admin@readthecodes.com",
"text_color": "#fff",
"background_color": "#01a",
}
}
}
二、导航栏
假如用户有get_partner_site权限,则隐藏其他导航栏,只展示微信官网需求相关的导航栏
三、接口设计
a.站点公网展现接口
1.站点官网接口
URL:partner-site/site/<site_id>
Method:GET
请求参数:
site_id M int 站点ID
响应格式:
一个html,前端提供;
逻辑:
1.不验证登录态;
2.根据site_id获取站点的模板ID,然后渲染不同的模板返回给前端;
2.站点设置详情接口
URL:partner-site/site/detail/<site_id>
Method:GET
请求参数:
site_id M int 站点ID
响应格式:
{
"code": 0,
"msg": "ok",
"data":{
# 返回单条数据所有字段,见数据库设计中的表结构;
}
}
逻辑:
1.不验证登录态;
2.根据site_id返回该站点的设置详情,json格式;
b.站点管理类接口
1.站点列表接口
URL:partner-site/manage/list
Method: GET
请求参数:
status O int 0-表示不过滤,拉取全部,默认值;1-只拉取上线状态的站点;2-只拉取下线状态的站点;3-只拉取已删除站点;
name O string 按站点名称过滤,为空的话拉取全部;
响应格式:
{
"code": 0,
"msg": "ok",
"pagination": {
"count": 1000,
"offset": 0,
"limit": 10,
},
"data": [
{
"_id": 1, # 站点ID
"name": "站点名称",
"domain": "station.guanmai.cn/site/1"
"status": 1,
}
]
}
逻辑:
1.验证station登录态;
2.根据status、name拉取站点列表,默认拉取全部状态,name为空拉取全部;
2.新增站点接口
URL:partner-site/manage/create
Method:POST
请求参数:
name M string 站点名
template_id M int 模板ID
details M json 见表结构,字段一样
响应格式:
{
"code": 0,
"msg": "ok",
"data": {
"id": 123, # 新建的站点ID
}
}
逻辑:
1.验证登录态;
2.根据name去重;
3.根据template_id验证details里面的字段;
3.编辑站点设置接口
URL:partner-site/manage/edit
Method:POST
请求参数:
id M int 站点ID
name M string 站点名
details M json 见表结构,字段一样
响应格式:
{
"code": 0,
"msg": "ok",
}
逻辑:
1.验证登录态;
2.name不可重复;
3.校验details字段;
4.编辑站点状态接口
URL:partner-site/manage/edit/status
Method:POST
请求参数:
id M int 站点ID
status M int 新状态
响应格式:
{
"code": 0,
"msg": "ok",
}
逻辑:
1.校验登录态;
2.校验status的值是否合法;
3.更新状态;
5.上传图片接口
URL:partner-site/manage/img/upload
Method:POST
请求参数:
file M file 需要上传的文件
响应格式:
{
"code": 0,
"msg": "ok",
"data": {
"url": "http://static.qcloud.com/xxx/xxx/xxx.jpg", # 新建的站点ID
}
}
逻辑:
1.校验登录态;
2.根据file的内容生成文件ID;
3.上传到腾讯云对象存储;
4.返回带CDN加速的url;