2024-06-01 13:03:27 +02:00
|
|
|
import { isString } from "@/src/helpers/general";
|
2024-01-25 14:49:45 +01:00
|
|
|
import { items } from "@/src/services/itemDataService";
|
2023-06-14 02:26:19 +02:00
|
|
|
|
|
|
|
export enum ItemType {
|
|
|
|
Powersuit = "Powersuit",
|
|
|
|
Weapon = "Weapon"
|
|
|
|
}
|
|
|
|
|
|
|
|
export const isItemType = (itemType: string): itemType is ItemType => {
|
|
|
|
return Object.keys(ItemType).includes(itemType);
|
|
|
|
};
|
|
|
|
|
|
|
|
const parseItemType = (itemType: unknown): ItemType => {
|
|
|
|
if (!itemType || !isString(itemType) || !isItemType(itemType)) {
|
|
|
|
throw new Error("incorrect item type");
|
|
|
|
}
|
|
|
|
|
|
|
|
return itemType;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface IAddItemRequest {
|
|
|
|
type: ItemType;
|
|
|
|
InternalName: string;
|
|
|
|
}
|
2024-01-25 14:49:45 +01:00
|
|
|
export const isInternalItemName = (internalName: string): boolean => {
|
2023-06-14 02:26:19 +02:00
|
|
|
const item = items.find(i => i.uniqueName === internalName);
|
|
|
|
return Boolean(item);
|
|
|
|
};
|
|
|
|
|
2024-01-25 14:49:45 +01:00
|
|
|
const parseInternalItemName = (internalName: unknown): string => {
|
|
|
|
if (!isString(internalName) || !isInternalItemName(internalName)) {
|
2023-06-14 02:26:19 +02:00
|
|
|
throw new Error("incorrect internal name");
|
|
|
|
}
|
|
|
|
|
|
|
|
return internalName;
|
|
|
|
};
|
|
|
|
|
2024-01-25 14:49:45 +01:00
|
|
|
export const toAddItemRequest = (body: unknown): IAddItemRequest => {
|
2023-06-14 02:26:19 +02:00
|
|
|
if (!body || typeof body !== "object") {
|
|
|
|
throw new Error("incorrect or missing add item request data");
|
|
|
|
}
|
|
|
|
|
2024-05-30 13:32:28 +02:00
|
|
|
if ("type" in body && "internalName" in body) {
|
2023-06-14 02:26:19 +02:00
|
|
|
return {
|
|
|
|
type: parseItemType(body.type),
|
2024-05-30 13:32:28 +02:00
|
|
|
InternalName: parseInternalItemName(body.internalName)
|
2023-06-14 02:26:19 +02:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
throw new Error("malformed add item request");
|
|
|
|
};
|