daphnis/components/(customization)/avatarcustomization/actions.ts

123 lines
3.2 KiB
TypeScript
Raw Normal View History

2024-07-23 20:15:27 +00:00
"use server";
import { getAuth } from "@/auth/queries/getauth";
2024-08-02 01:42:14 +00:00
import { supportedVersionNumber } from "@/lib/helpers";
import { artemis } from "@/lib/prisma";
2024-07-23 20:15:27 +00:00
export async function getCurrentAvatarParts() {
const { user } = await getAuth();
if (!user || !user.accessCode) {
throw new Error("User is not authenticated or accessCode is missing");
}
2024-07-28 05:16:27 +00:00
const CurrentAvatarParts = await artemis.chuni_profile_data.findMany({
where: {
user: user.UserId,
2024-08-02 01:42:14 +00:00
version: supportedVersionNumber, // TODO: eventually change this so the user can set their own version
},
select: {
avatarSkin: true,
avatarBack: true,
avatarFace: true,
avatarFront: true,
avatarHead: true,
avatarItem: true,
avatarWear: true,
},
});
2024-07-28 05:16:27 +00:00
return CurrentAvatarParts;
}
2024-08-02 01:42:14 +00:00
export async function updateAvatarParts(
avatarHead?: number,
avatarFace?: number,
avatarBack?: number,
avatarWear?: number,
avatarItem?: number,
) {
const { user } = await getAuth();
if (!user || !user.accessCode) {
throw new Error("User is not authenticated or accessCode is missing");
}
2024-07-23 20:15:27 +00:00
2024-08-02 01:42:14 +00:00
try {
// only including the values that aren't undefined i.e 0
const avatarPartData: any = {};
if (avatarHead !== undefined) avatarPartData.avatarHead = avatarHead;
if (avatarFace !== undefined) avatarPartData.avatarFace = avatarFace;
if (avatarBack !== undefined) avatarPartData.avatarBack = avatarBack;
if (avatarWear !== undefined) avatarPartData.avatarWear = avatarWear;
if (avatarItem !== undefined) avatarPartData.avatarItem = avatarItem;
2024-08-02 01:42:14 +00:00
const updateAvatarParts = await artemis.chuni_profile_data.update({
2024-08-02 01:42:14 +00:00
where: {
user_version: {
user: user.UserId,
version: supportedVersionNumber,
},
},
data: avatarPartData,
2024-08-02 01:42:14 +00:00
});
return updateAvatarParts;
2024-08-02 01:42:14 +00:00
} catch (error) {
console.error("Error updating avatar parts:", error);
throw error;
}
}
2024-07-23 20:15:27 +00:00
export async function getAllAvatarParts(category: number) {
const { user } = await getAuth();
if (!user || !user.accessCode) {
throw new Error("User is not authenticated or accessCode is missing");
}
// Check for user items in _item_item
const checkUserItems = await artemis.chuni_item_item.findMany({
where: {
itemKind: 11,
user: user.UserId,
},
select: {
itemId: true,
},
});
const chuni_item_item_ItemId = checkUserItems.map((item) => item.itemId);
// Retrieve all avatar parts
const allAvatarParts = await artemis.chuni_static_avatar.findMany({
where: {
category: category,
},
select: {
id: true,
name: true,
avatarAccessoryId: true,
category: true,
version: true,
iconPath: true,
texturePath: true,
},
});
const currentlyUnlockedAvatarParts = Array.from(
new Map(
allAvatarParts
.filter((matchingAvatarParts) =>
chuni_item_item_ItemId.includes(
matchingAvatarParts.avatarAccessoryId,
),
)
2024-08-19 23:14:47 +00:00
.map((unlockedAvatarPartIds) => [
unlockedAvatarPartIds.avatarAccessoryId,
unlockedAvatarPartIds,
]),
).values(),
);
return currentlyUnlockedAvatarParts;
}