# BUAA士嘉小程序文档
**Repository Path**: duchenhong/buaa-scarlett-applet-document
## Basic Information
- **Project Name**: BUAA士嘉小程序文档
- **Description**: 北京航空航天大学士嘉书院小程序文档
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-02-16
- **Last Updated**: 2021-02-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# BUAA士嘉小程序文档
#### 介绍
北京航空航天大学士嘉书院小程序文档
#### 软件架构
前端使用微信小程序,后端使用ASP.NETCORE 5
# 前端
## 功能
- 使用微信登录认证
- 内容查看发布
- 对内容评价 评论
- 讨论区
- 小程序反馈
## 目录结构
```
|-- miniprogram
|-- images (静态图片资源)
|-- pages (页面, 用index举例创建Page)
|-- index
|-- index.js
|-- index.json
|-- index.wxml
|-- index.wxss
|-- tools
|-- average
|-- average.js
|-- average.json
|-- average.wxml
|-- average.wxss
|-- utils (放一些通用的js实现模块化)
|-- app.js (全局app的js)
|-- app.json (app的全局配置文件)
|-- app.wxss (全局样式文件)
|-- common.wxml (模板文件, 可以没有, 也可以做成Components)
|-- common.wxs (wxml渲染辅助文件, 例如wxml中不能使用indexOf函数作为条件, 可以用wxs辅助)
|-- sitemap.json (允许微信搜索爬虫配置文件)
|-- theme.json (darkMode的变量文件)
```
`wxml`模板:[**微信官方文档**](https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/template.html)
小程序js模块化:[**微信官方文档**](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/module.html)
关于小程序的路由:[**微信官方文档**](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html)
`sitemap.json` 的解释:[**微信官方文档**](https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html)
`theme.json` DarkMode适配指南:[**微信官方文档**](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/darkmode.html)
## UI设计规范
UI设计要所有前端统一一个基本样式(如卡片、输入框一类),并且把这个通用的页面样式写到`app.wxss`中。
强烈建议使用`vant-weapp`组件库,避免重复造轮子。虽然有的时候这组件有坑。[**文档传送门**](https://youzan.github.io/vant-weapp)
使用微信官方的`WeUI`也不错。
图标可以到`iconfont`上找,[**传送门**](https://www.iconfont.cn/collections/index?spm=a313x.7781069.1998910419.4&type=1)
DarkMode可以考虑不做,但也很简单不是吗。仅需使用`theme.json`,添加一个全局字段,再使用几个三元表达式、`css`媒体查询就可以做出高大上的深色模式啦。(赶时间的话以后再做也无妨)
# 后端
## 零.代码规范
0. 编写C#代码总体原则 后端组能看懂 其他人尽力看懂
1. 变量名一律小写.非必要首字符不为'_';命名可以用英文和拼音
2. 函数 属性 类(含记录类型) 接口 结构 枚举 命名空间 每个单词首字母大写 不能有特殊字符
3. 通用的方法写到StaticMethods内部
4. lambda表达式 多行的`(args)=>{;;}`
单行的`(args)=>args`()括号不省略
5. 控制器
- 命名模板:`XxxController`均继承ControllerBase类 可以由默认模板(新建->API控制器)创建
- 控制器打标签`[ApiController]`和路由`[Route("api/[controller]")]`
- 所有函数必须打标签,指示路由`[Route("path")]`及HTTP请求方式`[HttpGet]`,`[HttpPost]`
- IO等耗时长的操作建议放到异步函数
- 返回值 `IActionResult`(同步) `Task`(异步)
## 一.数据库
mongodb为BSON(也可理解为binary json)文档数据库.
使用Csharp驱动库 MongoDB.Driver,MongoDB.Bson
每个文档必然有`_id`字段.
```csharp
public abstract class BaseEntity{
T _id{get;set;}
}
```
## 1.用户
```csharp
public class UserInfo:BaseEntity{
public string username;//用户名,默认为昵称;使用微信openid作为_id
public string sid;//学号
public int usertype;//用户类别,枚举型
//其他用户信息...
}
```
## 2.内容
支持CRUD操作.
```csharp
public class ContentInfo:BaseEntity{//使用内置ObjectId作_id
public string title,content;//标题和内容
public int props;//储存一个32位枚举值表示文章属性
}
```
## 3.文章评论
## 4.讨论区
## 5.反馈
## 二.控制器
## 1.用户
### 登录
- url: `/api/user/login`
- method:POST
- request body:
```json
{
"code":"一个标记",
"detail":{"country":"国籍","avatarUrl":"头像的地址","nickname":"昵称/姓名",...}
}
```
- response:
```json
{
"token":"登录token(凭证)",
"code":"0为成功 非0为失败"
}
```
### 修改信息
## 2.内容
### 获取内容列表
### 获取文章
### 获取评论列表
### 发评论
### 上传图片
- 需要登录
- url: `/api/content/upimg`
- method:POST
- request body:(multipart form;file)
- response
```json
{
"uuid":"图片的uuid"
}
```
## 3.讨论区
### 获取讨论列表
### 部分用户有权限开一个新的讨论
### 跟贴
## 4.反馈
## 5.管理员
### 发布内容
### 修改内容(设置展示状态 置顶状态等)
### 删除内容
### 管理评论
### 讨论区