40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
![]() |
import type { Privilege } from "@/types/models/privilege.type";
|
||
|
import type { GetAllPrivilegiesFormat, RawPrivilege } from "./types";
|
||
|
|
||
|
export const validatePrivilege = (privilege: RawPrivilege): Error | null => {
|
||
|
const typeValues: typeof privilege.type[] = ["count", "day", "full"];
|
||
|
|
||
|
if (!typeValues.includes(privilege.type)) {
|
||
|
return new Error("invalid 'type' value");
|
||
|
}
|
||
|
|
||
|
if (isNaN(Number(privilege.price))) {
|
||
|
return new Error("price must be a number");
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
};
|
||
|
|
||
|
export const defineGetAllPrivilegiesFormat = (query: string): GetAllPrivilegiesFormat => {
|
||
|
const formats: GetAllPrivilegiesFormat[] = ["array", "map"];
|
||
|
const findedFormat = formats.find((format) => query === format);
|
||
|
|
||
|
if (!findedFormat) {
|
||
|
return "array";
|
||
|
}
|
||
|
|
||
|
return findedFormat;
|
||
|
};
|
||
|
|
||
|
export const convertPrivilegiesToMap = (privilegies: Privilege[]) => {
|
||
|
return privilegies.reduce<Record<string, Privilege[]>>((accamulator, privilege) => {
|
||
|
if (!accamulator[privilege.serviceKey]) {
|
||
|
accamulator[privilege.serviceKey] = [];
|
||
|
}
|
||
|
|
||
|
accamulator[privilege.serviceKey].push(privilege);
|
||
|
|
||
|
return accamulator;
|
||
|
}, {});
|
||
|
};
|