import { TacticService, ServiceError, TacticContext } from "./TacticService.ts" import { StepContent, StepInfoNode } from "../model/tactic/Tactic.ts" import { fetchAPI, fetchAPIGet } from "../Fetcher.ts" export class APITacticService implements TacticService { private readonly tacticId: number constructor(tacticId: number) { this.tacticId = tacticId } async getContext(): Promise { const infoResponsePromise = fetchAPIGet(`tactics/${this.tacticId}`) const treeResponsePromise = fetchAPIGet(`tactics/${this.tacticId}/tree`) const infoResponse = await infoResponsePromise const treeResponse = await treeResponsePromise if (infoResponse.status == 401 || treeResponse.status == 401) { return ServiceError.UNAUTHORIZED } const { name, courtType } = await infoResponse.json() const { root } = await treeResponse.json() return { courtType, name, stepsTree: root } } async addStep( parent: StepInfoNode, content: StepContent, ): Promise { const response = await fetchAPI(`tactics/${this.tacticId}/steps`, { parentId: parent.id, content, }) if (response.status == 404) return ServiceError.NOT_FOUND if (response.status == 401) return ServiceError.UNAUTHORIZED const { stepId } = await response.json() return { id: stepId, children: [] } } async removeStep(id: number): Promise { const response = await fetchAPI( `tactics/${this.tacticId}/steps/${id}`, {}, "DELETE", ) if (response.status == 404) return ServiceError.NOT_FOUND if (response.status == 401) return ServiceError.UNAUTHORIZED } async setName(name: string): Promise { const response = await fetchAPI( `tactics/${this.tacticId}/name`, { name }, "PUT", ) if (response.status == 404) return ServiceError.NOT_FOUND if (response.status == 401) return ServiceError.UNAUTHORIZED } async saveContent( step: number, content: StepContent, ): Promise { const response = await fetchAPI( `tactics/${this.tacticId}/steps/${step}`, { content }, "PUT", ) if (response.status == 404) return ServiceError.NOT_FOUND if (response.status == 401) return ServiceError.UNAUTHORIZED } async getContent(step: number): Promise { const response = await fetchAPIGet( `tactics/${this.tacticId}/steps/${step}`, ) if (response.status == 404) return ServiceError.NOT_FOUND if (response.status == 401) return ServiceError.UNAUTHORIZED return await response.json() } }