Some more avatar decorations work

This commit is contained in:
Rory& committed 2026-09-23 13:29:15 +02:00
1 parent 404da008ba
commit 5de5934b65
13 files changed
+116 -40

No files matched your search

+17 -2
View File
@@ -19,8 +19,8 @@
import bcrypt from "bcrypt";
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api/middlewares";
import { User } from "@spacebar/database";
import { Config, emitEvent, FieldErrors, generateToken, handleFile, UserUpdateEvent } from "@spacebar/util";
import { AvatarDecoration, User } from "@spacebar/database";
import { ApiError, Config, DiscordApiErrors, emitEvent, FieldErrors, generateToken, handleFile, UserUpdateEvent } from "@spacebar/util";
import { DisplayNameStyle, PrivateUserProjection, UserModifySchema } from "@spacebar/schemas";
const router: Router = Router({ mergeParams: true });
@@ -216,6 +216,21 @@ router.patch(
}
}
if ("avatar_decoration_sku_id" in body) {
if (!body.avatar_decoration_sku_id) {
user.avatar_decoration_data = undefined;
user.avatar_decoration_id = undefined;
} else {
const avatarDecoration = await AvatarDecoration.findOne({ where: { id: body.avatar_decoration_sku_id } });
if (!avatarDecoration) throw FieldErrors({ avatar_decoration_sku_id: { code: "50057", message: "Invalid SKU" } });
if (!(await avatarDecoration.canUseAvatarDecoration(req.user_id)))
throw FieldErrors({ avatar_decoration_sku_id: { code: "40018", message: "You do not have access to this avatar decoration" } }); // TODO: find a better code
user.avatar_decoration_id = body.avatar_decoration_sku_id;
}
}
user.assign(body);
user.validate();
await user.save();
@@ -18,7 +18,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api/middlewares";
import { AvatarDecorations } from "@spacebar/database";
import { AvatarDecoration } from "@spacebar/database";
import { PublicAvatarDecorationResponse, UpdateAvatarDecorationSchema } from "@spacebar/schemas/api/spacebar/AvatarDecorations";
import { ApiError } from "@spacebar/util";
@@ -38,7 +38,7 @@ router.patch(
}),
async (req: Request, res: Response) => {
const changes = req.body as UpdateAvatarDecorationSchema;
const deco = await AvatarDecorations.findOneOrFail({ where: { id: req.params.id as string } });
const deco = await AvatarDecoration.findOneOrFail({ where: { id: req.params.id as string } });
if (deco.uploader_id !== req.user_id) throw new ApiError("You do not have permission to update this avatar decoration", 0, 403);
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { Raw } from "typeorm";
import { route } from "@spacebar/api/middlewares";
import { AvatarDecorations, Member } from "@spacebar/database";
import { AvatarDecoration, Member } from "@spacebar/database";
import { PublicAvatarDecorationListResponse } from "@spacebar/schemas/api/spacebar/AvatarDecorations";
import { arrayDistinctBy } from "@spacebar/extensions";
@@ -40,7 +40,7 @@ router.get(
const memberships = await Member.find({ select: { guild_id: true, roles: { id: true } }, relations: { roles: true }, where: { id: req.user_id } });
const decos = (
await AvatarDecorations.find({
await AvatarDecoration.find({
where: [
{ approved: true, public: true },
{ approved: true, uploader_id: req.user_id },