mirror of
https://github.com/StepanovPlaton/torrent_frontend.git
synced 2026-04-03 20:30:48 +04:00
110 lines
3.1 KiB
TypeScript
110 lines
3.1 KiB
TypeScript
import { HTTPService, RequestCacheOptions } from "@/shared/utils/http";
|
|
import { gameCardsSchema } from "./schemas/gameCard";
|
|
import { GameCreateType, gameSchema, GameType } from "./schemas/game";
|
|
import {
|
|
IItemService,
|
|
ItemCreateType,
|
|
ItemPropertiesDescriptionType,
|
|
ItemType,
|
|
staticImplements,
|
|
TypesOfItems,
|
|
} from "../types";
|
|
import { ItemService } from "../item";
|
|
import {
|
|
GameGenreCreateType,
|
|
gameGenreSchema,
|
|
gameGenresSchema,
|
|
} from "./schemas/genre";
|
|
import { RequiredFrom } from "@/shared/utils/types";
|
|
|
|
@staticImplements<IItemService>()
|
|
export abstract class GameService {
|
|
public static cacheTag = "all_games";
|
|
public static urlPrefix = "games";
|
|
private static cacheOptions(custom_tag?: string): RequestCacheOptions {
|
|
return {
|
|
next: {
|
|
tags: custom_tag ? [this.cacheTag, custom_tag] : [this.cacheTag],
|
|
revalidate: 60 * 5,
|
|
},
|
|
};
|
|
}
|
|
|
|
public static async GetCards() {
|
|
return await HTTPService.get(
|
|
`/${this.urlPrefix}`,
|
|
gameCardsSchema,
|
|
this.cacheOptions(`/${this.urlPrefix}/cards`)
|
|
);
|
|
}
|
|
public static async Get(id: number) {
|
|
return await HTTPService.get(
|
|
`/${this.urlPrefix}/${id}`,
|
|
gameSchema,
|
|
this.cacheOptions(`/${this.urlPrefix}/${id}`)
|
|
);
|
|
}
|
|
public static async Add(info: GameCreateType) {
|
|
return await HTTPService.post(`/${this.urlPrefix}`, gameSchema, {
|
|
body: info,
|
|
});
|
|
}
|
|
public static async Change(id: number, info: GameCreateType) {
|
|
return await HTTPService.put(`/${this.urlPrefix}/${id}`, gameSchema, {
|
|
body: info,
|
|
});
|
|
}
|
|
|
|
public static GetEmpty(): RequiredFrom<GameCreateType> {
|
|
return {
|
|
title: "",
|
|
torrent_file: "",
|
|
type: TypesOfItems.game,
|
|
};
|
|
}
|
|
|
|
public static async GetGenres() {
|
|
return await HTTPService.get(`/genres/${this.urlPrefix}`, gameGenresSchema);
|
|
}
|
|
|
|
public static async CreateGenre(info: GameGenreCreateType) {
|
|
return await HTTPService.post(
|
|
`/genres/${this.urlPrefix}`,
|
|
gameGenreSchema,
|
|
{
|
|
body: info,
|
|
}
|
|
);
|
|
}
|
|
|
|
static propertiesDescription: ItemPropertiesDescriptionType<GameType> = [
|
|
[
|
|
{ name: "Система", key: "system" },
|
|
{ name: "Процессор", key: "processor" },
|
|
{ name: "Оперативная память", key: "memory" },
|
|
{ name: "Видеокарта", key: "graphics" },
|
|
{ name: "Место на диске", key: "storage" },
|
|
],
|
|
[
|
|
{ name: "Версия игры", key: "version" },
|
|
{
|
|
name: "Дата обновления раздачи",
|
|
key: "update_date",
|
|
value: (item: ItemType | ItemCreateType) => {
|
|
return ItemService.isExistingItem(item)
|
|
? item.update_date.toLocaleDateString("ru-ru")
|
|
: new Date().toLocaleDateString("ru-ru");
|
|
},
|
|
editable: false,
|
|
},
|
|
{ name: "Язык", key: "language" },
|
|
{ name: "Разработчик", key: "developer" },
|
|
{
|
|
name: "Год выхода",
|
|
key: "release_date",
|
|
},
|
|
{ name: "Объём загрузки", key: "download_size" },
|
|
],
|
|
];
|
|
}
|