Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6f3e261

Browse files
author
qiu rui
committed
feat(module:all): 获取最新期刊api
1 parent 4204301 commit 6f3e261

7 files changed

Lines changed: 278 additions & 15 deletions

File tree

app/api/v1/classic.js

Lines changed: 69 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,50 @@
11
const Router = require('koa-router')
2+
3+
const { Flow } = require('../../models/flow')
4+
25
const router = new Router({
36
prefix: '/v1/classic'
47
})
58

69
const { PositiveIntergerValidator } = require('../../validators/validator')
710
const { Auth } = require('../../../middlewares/auth')
811
const { AuthType } = require('../../lib/enums')
9-
router.get('/latest', new Auth(AuthType.LATEST).m, async (ctx, next) => {
12+
13+
router.get('/latest', new Auth().m, async (ctx, next) => {
1014
/**
11-
* 1.权限是一个很难很复杂的问题
12-
* 目前的auth中间件只是实现了一种限制
13-
* 2.权限分级 scope
14-
* 普通用户 管理员
15-
* 8 16
16-
* 如果普通用户携带的权限数字是8,如果把/latest api的权限数字设置为9,
17-
* 普通用户权限8是小于api权限9的,所以用户无法访问此api
18-
* 但是管理员用户的权限数字是16,大于9,所以管理员可以访问此api
15+
* 查询最新一期期刊
16+
* 最新一期就是index最大的那个
17+
* note: 排序
18+
*
1919
*/
20-
ctx.body = ctx.auth.uid
20+
21+
const flow = await Flow.findOne({
22+
// 排序
23+
order: [
24+
['index', 'DESC']
25+
]
26+
})
27+
28+
ctx.body = flow
2129
})
22-
//#region
30+
31+
//#region 权限问题
32+
// router.get('/latest', new Auth(AuthType.LATEST).m, async (ctx, next) => {
33+
// /**
34+
// * 1.权限是一个很难很复杂的问题
35+
// * 目前的auth中间件只是实现了一种限制
36+
// * 2.权限分级 scope
37+
// * 普通用户 管理员
38+
// * 8 16
39+
// * 如果普通用户携带的权限数字是8,如果把/latest api的权限数字设置为9,
40+
// * 普通用户权限8是小于api权限9的,所以用户无法访问此api
41+
// * 但是管理员用户的权限数字是16,大于9,所以管理员可以访问此api
42+
// */
43+
// ctx.body = ctx.auth.uid
44+
// })
45+
//#endregion
46+
47+
//#region 获取路由参数
2348
/* router.post('/latest', async (ctx, next) => {
2449
// User
2550
// 2部分 通用型 针对小程序
@@ -44,4 +69,36 @@ router.get('/latest', new Auth(AuthType.LATEST).m, async (ctx, next) => {
4469
//#endregion
4570

4671

47-
module.exports = router
72+
module.exports = router
73+
74+
/**
75+
* 数据库设计
76+
* 数据库设计是粗->细的过程
77+
* 1. 数据库主题有哪些
78+
* (1)user
79+
* 期刊 粗
80+
* * (2)movie、(3)Sentence、(4)muisc
81+
* 如果把这三个模型都设计到期刊数据模型中是可以的,但是扩展性是比较差的
82+
* 相似性: 它们都有url,pubdate,title
83+
* movie中有导演
84+
* Sentence中有演员,
85+
* 如果都写在一起扩展性是不好的
86+
*
87+
* 2. 如何用数据表,标识一期一期的数据
88+
* 创建一个新的Model/表,来记录每一期的期刊
89+
* flow表:
90+
*
91+
* 3. 如何设计数据库,经验多了凭的是感觉
92+
** movie、Sentence、muisc 和flow有什么区别?
93+
* * 实体表
94+
* movie、Sentence、muisc是一个实体,记录本身相关信息,
95+
* 实体表相当于大千世界的映射
96+
* * 业务表
97+
* flow很难找到一个具体的实体来体现,这个是抽象出来的,记录业务,用来解决业务问题的
98+
* * 业务表难点:
99+
* (1)抽象
100+
* (2)多变性:业务表没有一个具体的设计方式,存在着好/坏的业务表的区别
101+
* 好的业务表,会让我们操作数据表的时候变得简单,数据库性能好
102+
* 不好的业务表,会导致查询数据表变得繁琐,数据库性能不好
103+
*
104+
*/

app/lib/enums.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ const AuthType = {
3232
LATEST: 7, //课程列表
3333
}
3434

35+
// 期刊类型
36+
const ArtType = {
37+
MOVIE:100,
38+
MUSIC:200,
39+
SENTENCE:300,
40+
BOOK:400,
41+
isThisType
42+
}
43+
44+
3545
module.exports = {
3646
LoginType,
3747
AuthType

app/models/classic.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { Model, Sequelize } from "sequelize/types";
2+
3+
const { sequelize } = require('../../core/db') //sequelize实例
4+
5+
// movie、Sentence、muisc
6+
7+
/**
8+
* 期刊模型
9+
* 定义表名,描述相应的实体
10+
* movie、Sentence、muisc合成称为classic
11+
* movie、Sentence、muisc、book合成称为art
12+
*
13+
* 共同字段/属性
14+
* image,title,pubdate,content,fav_nums,type(代号)
15+
* 不同: music: url
16+
*
17+
* 因为有共同字段/属性,先定义一个基类,让其他类继承这个基类
18+
*/
19+
20+
// 通用字段
21+
const classicFields = {
22+
image: {
23+
type: Sequelize.STRING
24+
},
25+
content: Sequelize.STRING,
26+
pubdate: Sequelize.DATEONLY,
27+
fav_nums: {
28+
type: Sequelize.INTEGER,
29+
defaultValue: 0
30+
},
31+
title: Sequelize.STRING,
32+
type: Sequelize.TINYINT
33+
}
34+
35+
36+
class Movie extends Model {
37+
38+
}
39+
Movie.init(classicFields,{
40+
sequelize,
41+
tableName: 'movie'
42+
})
43+
44+
class Sentence extends Model {
45+
46+
}
47+
Sentence.init(classicFields,{
48+
sequelize,
49+
tableName: 'sentence'
50+
})
51+
52+
class Music extends Model {
53+
54+
}
55+
56+
const musicFields = Object.assign({
57+
url: Sequelize.STRING
58+
},classicFields)
59+
60+
Music.init(musicFields,{
61+
sequelize,
62+
tableName: 'sentence'
63+
})

app/models/flow.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const { Sequelize, Model } = require('sequelize')
2+
const { sequelize } = require('../../core/db') //sequelize实例
3+
4+
class Flow extends Model{
5+
6+
}
7+
8+
Flow.init({
9+
index: Sequelize.INTEGER,
10+
art_id: Sequelize.INTEGER,
11+
type: Sequelize.INTEGER
12+
},{
13+
sequelize,
14+
tableName: 'flow'
15+
})
16+
17+
module.exports = {
18+
Flow
19+
}

app/models/user.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
const bcrypt = require('bcryptjs')
22
const { Sequelize, Model } = require('sequelize')
3-
43
const { sequelize } = require('../../core/db') //sequelize实例
54

65
class User extends Model {

config/config.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,5 @@ module.exports = {
1818
appid: "wx77124add68e6adcb",
1919
appsecret: "0621bffd050cfcbb0139c014652e0453",
2020
loginUrl: "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"
21-
22-
2321
}
2422
}

docs/笔记.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1536,3 +1536,120 @@ MVC模式 业务逻辑写在Model里
15361536
Thinkphp Model Service Logic
15371537
java Model DTO
15381538
```
1539+
## 14. 数据库设计思维
1540+
数据库设计是一个由粗到细的过程,先设计大体数据分类,然后再细化
1541+
1. 此项目的数据库主题有哪些
1542+
* user表(这是最基础的表,每个系统都会有)
1543+
* 期刊(这是一个比较粗的概念,期刊分类很多)
1544+
* movie表
1545+
* Sentence表
1546+
* music表
1547+
1548+
* 它们的相似性: 它们都有url,pubdate,title等字段
1549+
* 它们的差异性: 比如movie中有导演,Sentence中有演员等
1550+
* 因为有一些相似性的字段,如果把这三个表/模型设计成一个表(期刊表),也是可以的,
1551+
但是因为它们的差异性,设计成一个表扩展性是比较差的,
1552+
2. 如何用数据表,标识一期一期的数据
1553+
创建一个新的Model/表,来记录每一期的期刊,flow表
1554+
3. 如何设计数据库
1555+
初学者还是要根据概念性的知识来做数据库设计,经验多了凭的都是感觉
1556+
1557+
movie、Sentence、muisc 和flow有什么区别?
1558+
* 实体表
1559+
* movie、Sentence、muisc
1560+
* 实体表记录本身相关信息,相当于大千世界的映射
1561+
* 业务表
1562+
* flow
1563+
* 业务表是很难找到一个具体的实体来体现的,这个是抽象出来的,记录业务,用来解决业务问题的
1564+
* 业务表的难点:
1565+
1. 抽象
1566+
2. 多变性:业务表没有一个具体的设计方式,存在着好/坏的业务表的区别;
1567+
好的业务表,会让我们操作数据表的时候变得简单,数据库性能好
1568+
不好的业务表,会导致查询数据表变得繁琐,数据库性能不好
1569+
1570+
## 15. 定义模型
1571+
### 期刊classic模型
1572+
```js
1573+
// models/classic.js
1574+
import { Model, Sequelize } from "sequelize/types";
1575+
1576+
const { sequelize } = require('../../core/db') //sequelize实例
1577+
1578+
// movie、Sentence、muisc
1579+
1580+
/**
1581+
* 期刊模型
1582+
* 定义表名,描述相应的实体
1583+
* movie、Sentence、muisc合成称为classic
1584+
* movie、Sentence、muisc、book合成称为art
1585+
*
1586+
* 共同字段/属性
1587+
* image,title,pubdate,content,fav_nums,type(代号)
1588+
* 不同: music: url
1589+
*
1590+
* 因为有共同字段/属性,先定义一个基类,让其他类继承这个基类
1591+
*/
1592+
1593+
// 通用字段
1594+
const classicFields = {
1595+
image: {
1596+
type: Sequelize.STRING
1597+
},
1598+
content: Sequelize.STRING,
1599+
pubdate: Sequelize.DATEONLY,
1600+
fav_nums: {
1601+
type: Sequelize.INTEGER,
1602+
defaultValue: 0
1603+
},
1604+
title: Sequelize.STRING,
1605+
type: Sequelize.TINYINT
1606+
}
1607+
1608+
1609+
class Movie extends Model {
1610+
1611+
}
1612+
Movie.init(classicFields,{
1613+
sequelize,
1614+
tableName: 'movie'
1615+
})
1616+
1617+
class Sentence extends Model {
1618+
1619+
}
1620+
Sentence.init(classicFields,{
1621+
sequelize,
1622+
tableName: 'sentence'
1623+
})
1624+
1625+
class Music extends Model {
1626+
1627+
}
1628+
1629+
const musicFields = Object.assign({
1630+
url: Sequelize.STRING
1631+
},classicFields)
1632+
1633+
Music.init(musicFields,{
1634+
sequelize,
1635+
tableName: 'sentence'
1636+
})
1637+
```
1638+
### flow模型
1639+
```js
1640+
const { Sequelize, Model } = require('sequelize')
1641+
const { sequelize } = require('../../core/db') //sequelize实例
1642+
1643+
class Flow extends Model{
1644+
1645+
}
1646+
1647+
Flow.init({
1648+
index: Sequelize.INTEGER,
1649+
art_id: Sequelize.INTEGER,
1650+
type: Sequelize.INTEGER
1651+
},{
1652+
sequelize,
1653+
tableName: 'flow'
1654+
})
1655+
```

0 commit comments

Comments
 (0)