forked from longlife/labplus-server
feat: 实现一些用户接口
This commit is contained in:
43
src/controllers/user.js
Normal file
43
src/controllers/user.js
Normal file
@@ -0,0 +1,43 @@
|
||||
import express from "express"
|
||||
import User from "../models/user.js"
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
router.get("/", async (req, res) => {
|
||||
const a = await User.find({})
|
||||
res.json(a)
|
||||
})
|
||||
|
||||
router.get("/:id", (req, res) => {
|
||||
User.findById(req.params.id).then((user) => {
|
||||
res.json(user)
|
||||
}).catch((err) => {
|
||||
res.json({error: err})
|
||||
})
|
||||
})
|
||||
|
||||
router.post("/", (req, res) => {
|
||||
const user = new User(req.body)
|
||||
user.save().then(() => {
|
||||
res.json(user)
|
||||
}).catch((err) => {
|
||||
res.json({ error: err })
|
||||
})
|
||||
})
|
||||
|
||||
router.put("/:id", async (req, res) => {
|
||||
const user = await User.findByIdAndUpdate(req.params.id, req.body, { new: true })
|
||||
res.json(user)
|
||||
})
|
||||
|
||||
router.delete("/:id", async (req, res) => {
|
||||
const user = await User.findByIdAndDelete(req.params.id).then(() => {
|
||||
res.json({
|
||||
"message": "User deleted successfully"
|
||||
})
|
||||
}).catch((err) => {
|
||||
res.json({ error: err })
|
||||
})
|
||||
})
|
||||
|
||||
export default router
|
||||
24
src/index.js
Normal file
24
src/index.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import Express from "express"
|
||||
import dotenv from "dotenv"
|
||||
import router from "./router.js"
|
||||
import mongoose from "mongoose"
|
||||
|
||||
dotenv.config()
|
||||
|
||||
const app = Express()
|
||||
const PORT = process.env.PORT || 8080
|
||||
const DATABASE_URL = process.env.DATABASE_URL || "mongodb://localhost:27017/labplus"
|
||||
|
||||
mongoose.connect(DATABASE_URL)
|
||||
const db = mongoose.connection
|
||||
db.on("error", (error) => console.error(error))
|
||||
db.once("open", () => console.log("Connected to Database"))
|
||||
|
||||
app.use(Express.json())
|
||||
app.use(Express.urlencoded({ extended: true }))
|
||||
|
||||
app.use("/api", router)
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Server running on http://localhost:${PORT}`)
|
||||
})
|
||||
8
src/models/permission.js
Normal file
8
src/models/permission.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Schema, model } from 'mongoose'
|
||||
|
||||
const permissionSchema = new Schema({
|
||||
rule: { type: String, required: true },
|
||||
description: { type: String, required: true }
|
||||
})
|
||||
|
||||
export default model('Permission', permissionSchema)
|
||||
14
src/models/role.js
Normal file
14
src/models/role.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Schema } from 'mongoose'
|
||||
|
||||
const roleSchema = new Schema({
|
||||
name: { type: String, required: true },
|
||||
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)
|
||||
33
src/models/user.js
Normal file
33
src/models/user.js
Normal file
@@ -0,0 +1,33 @@
|
||||
import { Schema, model } from 'mongoose'
|
||||
|
||||
// 声明一个数据集 对象
|
||||
const userSchema = new Schema({
|
||||
username: { type: String, unique: true, required: true },
|
||||
password: { type: String, required: true },
|
||||
truename: { type: String, required: true }, // 真实名字
|
||||
role: { type: Schema.Types.ObjectId, ref: 'Role' },
|
||||
lastLogin: { type: Date },
|
||||
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 ...
|
||||
userSchema.pre('deleteOne', { document: true }, () => {
|
||||
this.status.deleted = true
|
||||
this.status.deleteAt = Date.now()
|
||||
})
|
||||
|
||||
userSchema.pre(['findByIdAndUpdate', 'findOneAndUpdate'], (next) => {
|
||||
this.status.updateAt = Date.now()
|
||||
console.log("gdfg");
|
||||
next()
|
||||
})
|
||||
|
||||
export default model('User', userSchema)
|
||||
10
src/router.js
Normal file
10
src/router.js
Normal file
@@ -0,0 +1,10 @@
|
||||
import express from "express"
|
||||
import user from "./controllers/user.js"
|
||||
|
||||
const router = express.Router({
|
||||
caseSensitive: true
|
||||
})
|
||||
|
||||
router.use("/user", user)
|
||||
|
||||
export default router
|
||||
Reference in New Issue
Block a user