1
0
Fork 0
mirror of https://git.sr.ht/~roxwize/mipilin synced 2025-05-07 22:13:07 +00:00
Signed-off-by: roxwize <rae@roxwize.xyz>
This commit is contained in:
Rae 5e 2025-01-28 23:31:31 -05:00
parent 65c29b0564
commit ccc894dc33
Signed by: rae
GPG key ID: 5B1A0FAB9BAB81EE
10 changed files with 111 additions and 41 deletions

View file

@ -8,7 +8,13 @@ import {
users
} from "../db/schema.js";
import { and, desc, eq, ne } from "drizzle-orm";
import { getMoods, render, render404, UserStatus, validateUrl } from "./util.js";
import {
getMoods,
render,
render404,
UserStatus,
validateUrl
} from "./util.js";
import { PgColumn } from "drizzle-orm/pg-core";
import dayjs from "dayjs";
@ -84,9 +90,13 @@ export default async function (app: Express, db: NodePgDatabase) {
})
.from(journalEntries)
.where(
user.id === req.session["uid"] || req.session["status"] & UserStatus.MODERATOR
user.id === req.session["uid"] ||
req.session["status"] & UserStatus.MODERATOR
? eq(journalEntries.user, user.id)
: and(eq(journalEntries.user, user.id), ne(journalEntries.visibility, 0))
: and(
eq(journalEntries.user, user.id),
ne(journalEntries.visibility, 0)
)
)
.orderBy(desc(journalEntries.date))
.limit(5)
@ -139,11 +149,6 @@ export default async function (app: Express, db: NodePgDatabase) {
res.redirect("/login");
return;
}
if (!validateUrl(req.body.website)) {
req.flash("error", "The website URL provided is invalid or malformed.");
res.redirect(req.get("Referrer") || "/");
return;
}
const { uname } = (
await db
.select({ uname: users.name })
@ -154,20 +159,50 @@ export default async function (app: Express, db: NodePgDatabase) {
(uname || "") !== req.session["user"] &&
!(req.session["status"] & UserStatus.MODERATOR)
) {
res.redirect(req.get("Referrer") || "/");
render404(db, res, req);
return;
}
await db
.update(profiles)
.set({
// @ts-expect-error
bio: req.body.bio,
website: req.body.website
})
.where(eq(profiles.user, req.session["uid"]));
req.flash("success", "Profile updated!");
res.redirect("/dashboard");
if (req.query.param && (req.session["status"] & UserStatus.MODERATOR)) {
switch (req.query.param) {
case "status":
if (!req.query.status) {
req.flash("error", "No status parameter specified.");
res.redirect(req.get("Referrer") || "/");
return;
}
await db.update(users).set({
// @ts-expect-error
status: parseInt(req.query.status)
}).where(eq(users.name, req.params.user));
break;
default:
render404(db, res, req);
return;
}
} else {
if (!validateUrl(req.body.website)) {
req.flash(
"error",
"The website URL provided is invalid or malformed."
);
res.redirect(req.get("Referrer") || "/");
return;
}
await db
.update(profiles)
.set({
// @ts-expect-error
bio: req.body.bio,
website: req.body.website
})
.where(eq(profiles.user, req.session["uid"]));
req.flash("success", "Profile updated!");
res.redirect("/dashboard");
return;
}
req.flash("success", "Updated");
res.redirect(req.get("Referrer") || "/");
});
app.post("/users/:user/follow", async (req, res) => {
if (!req.session["loggedIn"]) {