feat: 实现一些用户接口

This commit is contained in:
2024-01-15 00:03:15 +08:00
parent d2a6d7fd58
commit b37c8cbdd9
9 changed files with 1031 additions and 0 deletions

43
src/controllers/user.js Normal file
View 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
View 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
View 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
View 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
View 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
View 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