forked from longlife/labplus-server
feat: connect to database
This commit is contained in:
18
.vscode/launch.json
vendored
Normal file
18
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Launch Program",
|
||||||
|
"envFile": "${workspaceFolder}/.env",
|
||||||
|
"skipFiles": [
|
||||||
|
"<node_internals>/**"
|
||||||
|
],
|
||||||
|
"program": "${workspaceFolder}\\src\\index.js"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"Codegeex.RepoIndex": true
|
||||||
|
}
|
||||||
21
main.http
21
main.http
@@ -1,4 +1,4 @@
|
|||||||
@url = http://localhost:8001/api
|
@url = http://localhost:8080/api
|
||||||
@json = Content-Type: application/json
|
@json = Content-Type: application/json
|
||||||
|
|
||||||
### main
|
### main
|
||||||
@@ -10,23 +10,30 @@ GET {{url}}
|
|||||||
GET {{url}}/user
|
GET {{url}}/user
|
||||||
|
|
||||||
###
|
###
|
||||||
GET {{url}}/user/6592b261ec153ffe0080527f
|
GET {{url}}/user/66e0fc98bfe90d5ebc373fad
|
||||||
|
|
||||||
|
|
||||||
###
|
###
|
||||||
POST {{url}}/user
|
POST {{url}}/user
|
||||||
Content-Type: application/json
|
{{json}}
|
||||||
|
|
||||||
{
|
{
|
||||||
"username": "dd",
|
"username": "azj",
|
||||||
"password": "wwgweaerhgr",
|
"password": "helloworld",
|
||||||
"truename": "Davie Dro"
|
"truename": "Davie Dro"
|
||||||
}
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
PUT {{url}}/user/6592b261ec153ffe0080527f
|
PUT {{url}}/user/66e0fc4eb7f0bcce35db2755
|
||||||
{{json}}
|
{{json}}
|
||||||
|
|
||||||
{
|
{
|
||||||
"truename": "张表4"
|
"truename": "艾志坚"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###
|
||||||
|
DELETE {{url}}/user/66e0fc98bfe90d5ebc373fad
|
||||||
|
|
||||||
|
###
|
||||||
|
GET http://172.31.2.82:25565
|
||||||
|
|
||||||
|
|||||||
58
src/controllers/sample.js
Normal file
58
src/controllers/sample.js
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
import express from 'express'
|
||||||
|
import Sample from '../models/sample.js'
|
||||||
|
|
||||||
|
const router = express.Router()
|
||||||
|
|
||||||
|
// GET /sample
|
||||||
|
router.get('/', async (req, res) => {
|
||||||
|
let sample = await Sample.find({}).limit(10)
|
||||||
|
res.json(sample)
|
||||||
|
})
|
||||||
|
|
||||||
|
// GET /sample/:id
|
||||||
|
router.get('/:id', async (req, res) => {
|
||||||
|
let id = req.params.id
|
||||||
|
let sample = await Sample.findById(id)
|
||||||
|
res.json(sample)
|
||||||
|
})
|
||||||
|
|
||||||
|
// POST /sample
|
||||||
|
router.post('/', async (req, res) => {
|
||||||
|
let sample = new Sample(req.body)
|
||||||
|
await sample.save().then(() => {
|
||||||
|
res.json(sample)
|
||||||
|
}).catch((err) => {
|
||||||
|
res.json({ error: err })
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// PUT /sample/:id
|
||||||
|
router.put('/:id', async (req, res) => {
|
||||||
|
let id = req.params.id
|
||||||
|
let sample = req.body
|
||||||
|
await Sample.findByIdAndUpdate(id, sample, { new: true }, (err, sample) => {
|
||||||
|
if (err) {
|
||||||
|
res.json({ error: err })
|
||||||
|
} else if (!sample) {
|
||||||
|
res.json({ error: `Sample ${id} not found` })
|
||||||
|
} else {
|
||||||
|
res.json(sample)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// DELETE /sample/:id
|
||||||
|
router.delete('/:id', async (req, res) => {
|
||||||
|
let id = req.params.id
|
||||||
|
await Sample.findByIdAndDelete(id, (err, sample) => {
|
||||||
|
if (err) {
|
||||||
|
res.json({ error: err })
|
||||||
|
} else if (!sample) {
|
||||||
|
res.json({ error: `Sample ${id} not found` })
|
||||||
|
} else {
|
||||||
|
res.json(sample)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
export default router
|
||||||
@@ -1,24 +1,29 @@
|
|||||||
import express from "express"
|
import express from "express"
|
||||||
import User from "../models/user.js"
|
import User from "../models/user.js"
|
||||||
|
import Role from "../models/role.js"
|
||||||
|
import Status from "../models/status.js"
|
||||||
|
|
||||||
const router = express.Router()
|
const router = express.Router()
|
||||||
|
|
||||||
router.get("/", async (req, res) => {
|
router.get("/", async (req, res) => {
|
||||||
const a = await User.find({})
|
let user = await User.find({}).populate("status")
|
||||||
res.json(a)
|
res.json(user)
|
||||||
})
|
})
|
||||||
|
|
||||||
router.get("/:id", (req, res) => {
|
router.get("/:id", (req, res) => {
|
||||||
User.findById(req.params.id).then((user) => {
|
User.findById(req.params.id).populate("status").then((user) => {
|
||||||
res.json(user)
|
res.json(user)
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
res.json({error: err})
|
res.json({ error: err })
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
router.post("/", (req, res) => {
|
router.post("/", async (req, res) => {
|
||||||
const user = new User(req.body)
|
const user = new User(req.body)
|
||||||
user.save().then(() => {
|
let status = new Status()
|
||||||
|
await status.save()
|
||||||
|
user.status = status
|
||||||
|
await user.save().then(() => {
|
||||||
res.json(user)
|
res.json(user)
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
res.json({ error: err })
|
res.json({ error: err })
|
||||||
@@ -26,19 +31,17 @@ router.post("/", (req, res) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
router.put("/:id", async (req, res) => {
|
router.put("/:id", async (req, res) => {
|
||||||
const user = await User.findByIdAndUpdate(req.params.id, req.body, { new: true })
|
await User.findByIdAndUpdate(req.params.id, req.body, { new: true }).then((user) => {
|
||||||
res.json(user)
|
res.json(user)
|
||||||
})
|
|
||||||
|
|
||||||
router.delete("/:id", async (req, res) => {
|
|
||||||
const user = await User.findByIdAndDelete(req.params.id).then(() => {
|
|
||||||
res.json({
|
|
||||||
"message": "deleted successfully",
|
|
||||||
user
|
|
||||||
})
|
|
||||||
}).catch((err) => {
|
|
||||||
res.json({ error: err })
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
router.delete("/:id", async (req, res) => {
|
||||||
|
await User.findByIdAndDelete(req.params.id)
|
||||||
|
.populate("status")
|
||||||
|
.then((user) => {
|
||||||
|
res.json(user)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
41
src/index.js
41
src/index.js
@@ -14,6 +14,47 @@ db.once("open", () => console.log("Connected to Database"))
|
|||||||
app.use(Express.json())
|
app.use(Express.json())
|
||||||
app.use(Express.urlencoded({ extended: true }))
|
app.use(Express.urlencoded({ extended: true }))
|
||||||
|
|
||||||
|
// init premission groups
|
||||||
|
let permissions = {
|
||||||
|
user_create: {
|
||||||
|
level: 0, // 0: anyone, 1: user, 2: admin, 3: root
|
||||||
|
rule: "user_create",
|
||||||
|
description: "Create new user"
|
||||||
|
},
|
||||||
|
user_change_self_password: {
|
||||||
|
level: 1,
|
||||||
|
rule: "user_change_self_password",
|
||||||
|
description: "change self password"
|
||||||
|
},
|
||||||
|
user_change_password: {
|
||||||
|
level: 2,
|
||||||
|
rule: "user_change_password",
|
||||||
|
description: "change any user password"
|
||||||
|
},
|
||||||
|
user_change_admin_password: {
|
||||||
|
level: 3,
|
||||||
|
rule: "user_change_admin_password",
|
||||||
|
description: "change admin password"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
import Permission from "./models/permission.js"
|
||||||
|
for (const key in permissions) {
|
||||||
|
if (Object.prototype.hasOwnProperty.call(permissions, key)) {
|
||||||
|
let element = new Permission(permissions[key])
|
||||||
|
element.save()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO 这里有问题,
|
||||||
|
// init roles
|
||||||
|
// import Role from "./models/role.js"
|
||||||
|
// let r = new Role({
|
||||||
|
// name: "root",
|
||||||
|
// permissions: Permission.find({}).exec()
|
||||||
|
// })
|
||||||
|
// r.save()
|
||||||
|
|
||||||
|
// init router
|
||||||
app.use("/api", router)
|
app.use("/api", router)
|
||||||
|
|
||||||
app.listen(PORT, () => {
|
app.listen(PORT, () => {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Schema, model } from 'mongoose'
|
import { Schema, model } from 'mongoose'
|
||||||
|
|
||||||
const permissionSchema = new Schema({
|
const permissionSchema = new Schema({
|
||||||
|
level: { type: Number, required: true },
|
||||||
rule: { type: String, required: true },
|
rule: { type: String, required: true },
|
||||||
description: { type: String, required: true }
|
description: { type: String, required: true }
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
import { Schema } from 'mongoose'
|
import { Schema, model } from 'mongoose'
|
||||||
|
import Permission from './permission.js'
|
||||||
|
|
||||||
const roleSchema = new Schema({
|
const roleSchema = new Schema({
|
||||||
name: { type: String, required: true },
|
name: { type: String, required: true },
|
||||||
permissions: [{ type: Schema.Types.ObjectId, ref: 'Permission' }],
|
permissions:[{ type: Schema.Types.ObjectId, ref: Permission }],
|
||||||
status: {
|
|
||||||
deleted: { type: Boolean, default: false },
|
|
||||||
createAt: { type: Date, default: Date.now() },
|
|
||||||
deleteAt: { type: Date },
|
|
||||||
updateAt: { type: Date, default: Date.now() }
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
export default model('Role', roleSchema)
|
export default model('Role', roleSchema)
|
||||||
24
src/models/sample.js
Normal file
24
src/models/sample.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import { Schema, model } from 'mongoose'
|
||||||
|
|
||||||
|
const sampleSchema = new Schema({
|
||||||
|
// L414-5KR-7-240703
|
||||||
|
|
||||||
|
// 产品名 L414-5KR
|
||||||
|
productName: { type: String },
|
||||||
|
|
||||||
|
// 批次号字符串 L414-5KR-7-240703
|
||||||
|
batchString: { type: String },
|
||||||
|
|
||||||
|
// 样品 ID 01
|
||||||
|
id: { type: String },
|
||||||
|
|
||||||
|
// 送样时间
|
||||||
|
postTime: { type: Date, default: Date.now },
|
||||||
|
|
||||||
|
// 测试项目
|
||||||
|
testItem: { type: Array, default: [] },
|
||||||
|
|
||||||
|
status: { type: Schema.Types.ObjectId, ref: 'Status' }
|
||||||
|
})
|
||||||
|
|
||||||
|
export default model('Sample', sampleSchema)
|
||||||
12
src/models/status.js
Normal file
12
src/models/status.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { Schema, model } from 'mongoose'
|
||||||
|
|
||||||
|
const statusSchema = new Schema({
|
||||||
|
locked: { type: Boolean, default: false },
|
||||||
|
lockAt: { type: Date },
|
||||||
|
lockBy: { type: Schema.Types.ObjectId, ref: 'User' },
|
||||||
|
deleted: { type: Boolean, default: false },
|
||||||
|
createAt: { type: Date, default: Date.now() },
|
||||||
|
deleteAt: { type: Date },
|
||||||
|
updateAt: { type: Date, default: Date.now() }
|
||||||
|
})
|
||||||
|
export default model('Status', statusSchema)
|
||||||
@@ -7,26 +7,18 @@ const userSchema = new Schema({
|
|||||||
truename: { type: String, required: true }, // 真实名字
|
truename: { type: String, required: true }, // 真实名字
|
||||||
role: { type: Schema.Types.ObjectId, ref: 'Role' },
|
role: { type: Schema.Types.ObjectId, ref: 'Role' },
|
||||||
lastLogin: { type: Date },
|
lastLogin: { type: Date },
|
||||||
status: {
|
status: { type: Schema.Types.ObjectId, ref: 'Status' }
|
||||||
locked: { type: Boolean, default: false },
|
|
||||||
lockAt: { type: Date },
|
|
||||||
lockBy: { type: Schema.Types.ObjectId, ref: 'User' },
|
|
||||||
deleted: { type: Boolean, default: false },
|
|
||||||
createAt: { type: Date, default: Date.now() },
|
|
||||||
deleteAt: { type: Date },
|
|
||||||
updateAt: { type: Date, default: Date.now() }
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// TODO: IT CAN'T WORK ...
|
// TODO: IT CAN'T WORK ...
|
||||||
userSchema.pre('deleteOne', { document: true }, () => {
|
userSchema.pre(['deleteOne', 'findByIdAndDelete'], { document: true }, () => {
|
||||||
this.status.deleted = true
|
this.status.deleted = true
|
||||||
this.status.deleteAt = Date.now()
|
this.status.deleteAt = Date.now()
|
||||||
})
|
})
|
||||||
|
|
||||||
userSchema.pre(['findByIdAndUpdate', 'findOneAndUpdate'], (next) => {
|
userSchema.pre(['findByIdAndUpdate', 'findOneAndUpdate'], (next) => {
|
||||||
this.status.updateAt = Date.now()
|
this.status.updateAt = Date.now()
|
||||||
console.log("gdfg");
|
console.log("gdfg")
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user