Skip to content

设计文档

一、数据库设计

存储: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;