render articles
This commit is contained in:
@@ -7,7 +7,7 @@ import {
|
||||
varchar,
|
||||
integer,
|
||||
bigint,
|
||||
unique,
|
||||
uniqueIndex,
|
||||
boolean,
|
||||
smallint,
|
||||
check,
|
||||
@@ -28,7 +28,8 @@ export const blockTypeEnum = pgEnum("post_block_type", [
|
||||
|
||||
export const articleStatusEnum = pgEnum("post_status", [
|
||||
"draft",
|
||||
"published"
|
||||
"published",
|
||||
"archived"
|
||||
]);
|
||||
|
||||
export const articles = pgTable("articles", {
|
||||
@@ -48,7 +49,7 @@ export const articles = pgTable("articles", {
|
||||
next_article: uuid()
|
||||
},
|
||||
(table) => [
|
||||
unique("no_repeat_slugs_per_author")
|
||||
uniqueIndex("no_repeat_slugs_per_author")
|
||||
.on(table.author_id, table.slug),
|
||||
|
||||
foreignKey({
|
||||
@@ -74,7 +75,7 @@ export const articleBlocks = pgTable("article_blocks", {
|
||||
|
||||
},
|
||||
(table) => [{
|
||||
postPositionIdx: unique("no_repeat_block_position_per_article")
|
||||
postPositionIdx: uniqueIndex("no_repeat_block_position_per_article")
|
||||
.on(table.article_id, table.position)
|
||||
}]);
|
||||
|
||||
|
||||
@@ -2,9 +2,14 @@ import { Request, Response, NextFunction } from "express";
|
||||
import JsonWebToken from '../types/JsonWebToken.ts';
|
||||
|
||||
export enum Permission {
|
||||
none = 0,
|
||||
read = 1,
|
||||
write = 2,
|
||||
delete = 4
|
||||
readwrite = 3,
|
||||
delete = 4,
|
||||
readdelete = 5,
|
||||
writedelete = 6,
|
||||
all = 7,
|
||||
};
|
||||
|
||||
export function requirePermissions(permission: number, isOwner: Boolean, requiredPermissions: number): Boolean {
|
||||
@@ -13,5 +18,4 @@ export function requirePermissions(permission: number, isOwner: Boolean, require
|
||||
permission % 10;
|
||||
|
||||
return (mask & requiredPermissions) === requiredPermissions;
|
||||
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Request, Response, NextFunction } from "express";
|
||||
import { drizzle } from 'drizzle-orm/node-postgres';
|
||||
import { Request, Response, NextFunction } from "express";
|
||||
import { eq } from 'drizzle-orm';
|
||||
import { users } from '../db/schema.ts';
|
||||
import { decodeJWT, generateSignedJWT, verifySignature } from "../helpers/jwt.ts";
|
||||
@@ -56,7 +56,7 @@ export async function refreshJWT(
|
||||
});
|
||||
}
|
||||
|
||||
const toExpire = 60 * 15;
|
||||
const toExpire = 60 * 15; // 15 minutes
|
||||
const jwt = generateSignedJWT(user.id, user.permissions, toExpire)
|
||||
res.set("X-New-Access-Token", jwt);
|
||||
|
||||
|
||||
@@ -40,7 +40,9 @@ articlesRouter.get("/getArticleBySlug/:slug", async (req: Request, res: Response
|
||||
const resp = await db.select()
|
||||
.from(articles)
|
||||
.where(eq(articles.slug, parsedSlug));
|
||||
res.json(resp);
|
||||
|
||||
// Only return the first
|
||||
res.json(resp[0]);
|
||||
});
|
||||
|
||||
articlesRouter.post("/postArticle", async (req: Request, res: Response) => {
|
||||
|
||||
@@ -30,6 +30,20 @@ usersRouter.get("/getUser/:userId", async (req: Request, res: Response) => {
|
||||
res.json(resp);
|
||||
});
|
||||
|
||||
usersRouter.get("/getUserName/:userId", async (req: Request, res: Response) => {
|
||||
const { userId } = req.params;
|
||||
const parsedId = Array.isArray(userId) ? userId[0] : userId;
|
||||
|
||||
const resp = await db.select()
|
||||
.from(users)
|
||||
.where(eq(users.id, parsedId));
|
||||
|
||||
res.json({
|
||||
id: resp[0].id,
|
||||
display_name: resp[0].display_name
|
||||
});
|
||||
});
|
||||
|
||||
usersRouter.post("/createUser", async (req: Request, res: Response) => {
|
||||
const resp = await db
|
||||
.insert(users)
|
||||
|
||||
@@ -27,7 +27,7 @@ export function defaultJWT() {
|
||||
payload: {
|
||||
iat: -1,
|
||||
uid: "",
|
||||
prm: 44,
|
||||
prm: 0,
|
||||
exp: -1
|
||||
},
|
||||
signature: ""
|
||||
|
||||
Reference in New Issue
Block a user