mirror of
https://github.com/Troplo/Colubrina.git
synced 2024-11-22 19:27:55 +11:00
121 lines
2.3 KiB
JavaScript
121 lines
2.3 KiB
JavaScript
const express = require("express")
|
|
const router = express.Router()
|
|
const Errors = require("../lib/errors.js")
|
|
const auth = require("../lib/authorize.js")
|
|
const { User, Theme } = require("../models")
|
|
const { Op } = require("sequelize")
|
|
|
|
router.get("/", auth, async (req, res, next) => {
|
|
try {
|
|
const themes = await Theme.findAll({
|
|
where: {
|
|
[Op.or]: [
|
|
{
|
|
userId: req.user.id
|
|
},
|
|
{
|
|
public: true
|
|
}
|
|
]
|
|
},
|
|
include: [
|
|
{
|
|
model: User,
|
|
attributes: ["id", "username"],
|
|
as: "user"
|
|
}
|
|
]
|
|
})
|
|
res.json(themes)
|
|
} catch (e) {
|
|
next(e)
|
|
}
|
|
})
|
|
|
|
router.post("/", auth, async (req, res, next) => {
|
|
try {
|
|
if (
|
|
!req.body.theme?.name ||
|
|
!req.body.theme?.primaryType ||
|
|
!req.body.theme?.dark ||
|
|
!req.body.theme?.light
|
|
) {
|
|
throw Errors.invalidParameter("theme", "Theme validation failed.")
|
|
}
|
|
|
|
const theme = await Theme.create({
|
|
name: req.body.name,
|
|
public: false,
|
|
userId: req.user.id,
|
|
theme: req.body.theme
|
|
})
|
|
|
|
res.json(theme)
|
|
} catch (e) {
|
|
next(e)
|
|
}
|
|
})
|
|
|
|
router.put("/:id", auth, async (req, res, next) => {
|
|
try {
|
|
if (
|
|
!req.body.theme?.name ||
|
|
!req.body.theme?.primaryType ||
|
|
!req.body.theme?.dark ||
|
|
!req.body.theme?.light
|
|
) {
|
|
throw Errors.invalidParameter("theme", "Theme validation failed.")
|
|
}
|
|
|
|
const theme = await Theme.findOne({
|
|
where: {
|
|
id: req.params.id,
|
|
userId: req.user.id
|
|
}
|
|
})
|
|
|
|
if (!theme) {
|
|
throw Errors.invalidParameter("theme", "Theme not found.")
|
|
}
|
|
|
|
await theme.update({
|
|
name: req.body.name,
|
|
theme: req.body.theme
|
|
})
|
|
res.json(theme)
|
|
} catch (e) {
|
|
next(e)
|
|
}
|
|
})
|
|
|
|
router.delete("/:id", auth, async (req, res, next) => {
|
|
try {
|
|
const theme = await Theme.findOne({
|
|
where: {
|
|
id: req.params.id,
|
|
userId: req.user.id
|
|
}
|
|
})
|
|
|
|
if (!theme) {
|
|
throw Errors.invalidParameter("theme", "Theme not found.")
|
|
}
|
|
|
|
await User.update(
|
|
{
|
|
themeId: 1
|
|
},
|
|
{
|
|
where: {
|
|
themeId: theme.id
|
|
}
|
|
}
|
|
)
|
|
await theme.destroy()
|
|
res.sendStatus(204)
|
|
} catch (e) {
|
|
next(e)
|
|
}
|
|
})
|
|
|
|
module.exports = router
|