# codepilot-backend **Repository Path**: se5/codepilot-backend ## Basic Information - **Project Name**: codepilot-backend - **Description**: Backend application for Codepilot - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-06-23 - **Last Updated**: 2023-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 后端接口一览 * request POST请求中的data应为json格式,比如 ``` { name:"user00001", password:"12345678", idCard : "user02", phone : "1381000000", email : "zhangqx@qq.com" } ``` * response格式 ``` { code: xxx/xxxxx, msg: "... success/failed", data: "..." / {} } ``` 其中code为整形;msg为String字符串,存放后端产生的异常的具体信息;data为String或json格式,代表返回的数据。 code=200表示请求成功,其他code值均表示请求失败。有两种类型的错误码,三位的错误码为[http错误码](https://blog.csdn.net/qq_57826511/article/details/124773778);五位的错误码为系统错误码,具体的内容可以参考文末的表格。 成功的请求会包含code, msg, data信息,对于失败的请求返回code和msg(data为空)。 ## 一、前端推荐系统接口 baseURL: http://43.143.82.72:28080/api/user ### 1. 用户验证 * 注册(/authorize/register) * 请求类型:POST * data的内容和对应的javascript数据类型 ``` data = { username: string, password: string, gender: string, character: string, birthday: Date, email: string, phone: string } ``` * response结构:{code, msg, data} * data中不含信息 * 登录(/authorize/login) * 请求类型:POST * data的内容和对应的javascript数据类型 ``` data = { username: string, password: string } ``` * response结构:{code, msg, data},其中data的结构为 ``` data = { token: string } ``` ### 2. 个人信息 * 查询个人信息(/getInfo) * 请求类型:GET * response结构:{code, msg, data},其中data结构为 ``` data = { username: string, character: string, status: string, birthday: Date, gender: string, phone: string, email: string, register_time: Date, last_login_time: Date, remark: string } ``` * 修改个人信息(/modify) * 请求类型:POST * data结构 ``` data = { username: string, character: string, birthday: Date, gender: string, phone: string, email: string, remark: string } ``` * response结构:{code, msg, data},其中data为 ``` data = { username: string, character: string, birthday: Date, gender: string, phone: string, email: string, remark: string } ``` * 修改登录密码(/passwd) * 请求类型:POST * data结构 ``` data = { username: string, password: string } ``` * response结构:{code, msg, data} * data中不含信息 * 注销账户(/unregister)(待定) * 请求类型:DELETE * response结构:{code, msg, data} ### 3. 用户做题和统计信息 * 用户收藏信息(/favor) * 请求类型:GET * response中data格式 ``` data = { [ problem_1_id: number, problem_2_id: number, ... ] } // 所有收藏题目的id的数组 ``` * 用户做题记录(/record) * 请求类型:GET * response中data格式 ``` data = { [ problem_1_id: number, problem_2_id: number, ... ] } // 所有历史题目的id的数组 ``` * 用户做题情况(/stats) * 请求类型:GET * response中data格式 ``` data = { total, // 刷题数量,单位:个 accuracy, // 正确率,单位:% days, // 刷题天数,单位:天 type_dist = { // 题型分布,单位:个 "数组": 10, "排序": 2, "...": xx, "其他": 5 }, d_dist = { // 难度分布,单位:个 "easy": 10, "medium": 50, "hard": 20 } } ``` ### 4. 用户推荐信息 * 每日一题(/recommend/one) * 请求类型:GET * response中data格式 ``` data = { [ problem_1_id: number, ] } // 每日一题的id(格式任然是数组,但是里面只有一个题目id) ``` * 定制题单(/recommend/custom) * 请求类型:GET * response中data格式 ``` data = { [ problem_1_id: number, problem_2_id: number, ... ] } // 定制题单中题目的id的数组 ``` * 分类推荐(/recommend/type) * 请求类型:GET * response中data格式 ``` data = { [ problem_1_id: number, problem_2_id: number, ... ] } // 分类推荐的题目的id的数组 ``` * 难度推荐(/recommend/difficulty) * 请求类型:GET * response中data格式 ``` data = { [ problem_1_id: number, problem_2_id: number, ... ] } // 难度推荐的题目的id的数组 ``` * 学习计划(/recommend/plan) * 请求类型:GET * response中data格式 ``` data = { [ problem_1_id: number, problem_2_id: number, ... ] } // 学习计划中题目的id的数组 ``` * 热门题目(/recommend/hot) * 请求类型:GET * response中data格式 ``` data = { [ problem_1_id: number, problem_2_id: number, ... ] } // 热门题目的id的数组 ``` ### 5. 题库信息 * 获取题目信息(/problem/getInfo) * 请求类型:POST * data结构 ``` data = { problem_id: number } // 提交的内容为需要获取详细信息的题目的id ``` * 返回的response中,data结构 ``` data = { problem_id: number, title: string, source: string, url: string, description: string, difficulty: string, summit: number, accept: number, ac_rate: number, } ``` * 题目搜索(/problem/search) * 请求类型:POST * data结构 ``` data = { keywords: "quick sort ..." // 关键词将用空格分开 } ``` * 返回的response中,data的结构为 ``` data = { problem_id: [ problem_1_id: number, problem_2_id: number, "..." ] } // 返回一个problem_id的数组,按照相似度排序 // id为JavaScript中的数字类型 ``` 注:除了“用户验证”,其他的部分在发起请求时,如果需要获得个性化信息,需要在header中附上token。token在登录请求时返回的response中。 ## 二、前端管理系统接口 baseURL: http://43.143.82.72:28080/admin-api ## 三、算法接口 baseURL: http://43.143.82.72:28080/alg-api 服务器会在baseURL目录下维护两张csv表(user.csv, problem.csv),算法模块可以直接访问(比如`pandas.read_csv("http://43.143.82.72:28080/alg-api/user.csv"))`,表格的内容还需要在商量。 后端也需要从算法模块获取推荐结果。上次讨论时的结论是,推荐的结果是提前计算好的,那是不是可以考虑在baseURL下放几张存储推荐结果的表格,由算法模块维护,前端需要时直接由后端读取即可。每当用户或者题目数据库发生变化时,后端给算法模块一个更新的信号。 ## 系统错误码 只是一个初级版本,在开发过程中再进行删改。 | 错误码code | 错误原因 | | :-------: | :------: | | 50000 | 用户名已存在 | | 50001 | 其他原因导致注册失败 | | 50002 | 用户不存在/密码错误导致登录失败 | | 50003 | 账户已被冻结 | | 50004 | 账户已被注销 | | 50010 | 个人信息获取失败 | | 50011 | 个人信息修改失败 | | 50012 | 登录密码修改失败 | | 50013 | 用户注销失败 | ## 开发日志 ## 一些说明和问题 1. 通过前端只能注册普通用户,管理员用户只能通过后端数据库或者管理员界面设置。