diff --git a/src/components/GameWindow.vue b/src/components/GameWindow.vue index f1265e5..bb46444 100644 --- a/src/components/GameWindow.vue +++ b/src/components/GameWindow.vue @@ -6,7 +6,7 @@ import BeltBlock from './BeltBlock.vue'; import MetalPlate from './MetalPlate.vue'; import GameHeader from './GameHeader.vue'; import type { Action, Door, Team } from './models'; -import { apiGetTeam, encodeUTF8ToBase64, getApiUrl } from './client'; +import { apiGetGame, apiGetTeam, apiLetsgo } from './client'; import { UnauthorizedError } from './UnauthorizedError'; const router = useRouter(); @@ -84,21 +84,8 @@ function addAction() { place.value = "" } -function letsgo(place: string) { - console.log("letsgo to " + place) - fetch( - getApiUrl("/team/actions"), - { - method: "POST", - headers: { - "X-Id": encodeUTF8ToBase64(login.value), - "X-Password": password.value - }, - body: JSON.stringify({ - "place": place - }) - } - ) +async function letsgo(place: string) { + await apiLetsgo(login.value, password.value, place) } const scrollToBottom = async (behavior: ScrollBehavior = 'smooth'): Promise => { @@ -111,27 +98,19 @@ const scrollToBottom = async (behavior: ScrollBehavior = 'smooth'): Promise response.json()) - .then(data => { - gameState.value = data.state - if (data.state === "NEW") { - gameStateText.value = "Игра ещё не началась" - } - if (data.state === "RUN") { - gameStateText.value = "" - } - if (data.state === "STOP") { - gameStateText.value = "Игра остановлена" - } - }) - .catch(error => { - console.error('Ошибка:', error) - }); + const data = await apiGetGame(login.value, password.value) + gameState.value = data.state + if (data.state === "NEW") { + gameStateText.value = "Игра ещё не началась" + } + if (data.state === "RUN") { + gameStateText.value = "" + } + if (data.state === "STOP") { + gameStateText.value = "Игра остановлена" + } } // Автоматическая прокрутка при изменении items diff --git a/src/components/client.ts b/src/components/client.ts index 4f76bae..2634dfb 100644 --- a/src/components/client.ts +++ b/src/components/client.ts @@ -1,4 +1,4 @@ -import type { Team } from './models' +import type { Game, Team } from './models' import { UnauthorizedError } from './UnauthorizedError' export const apiGetTeam = async (login: string, password: string): Promise => { @@ -23,6 +23,53 @@ export const apiGetTeam = async (login: string, password: string): Promise } } +export const apiLetsgo = async (login: string, password: string, place: string) => { + try { + const response = await fetch(getApiUrl("/team/actions"), { + method: "POST", + headers: { + "X-Id": encodeUTF8ToBase64(login), + "X-Password": password + }, + body: JSON.stringify({ + "place": place + }) + }) + if (response.status === 401) { + throw new UnauthorizedError('Ошибка авторизации') + } + if (!response.ok) { + throw new Error(`http error status: ${response.status}`) + } + return await response.json() + } catch (error) { + console.error('[apiLetsgo] error:', error) + throw error + } +} + +export const apiGetGame = async (login: string, password: string): Promise => { + try { + const response = await fetch(getApiUrl("/game"), { + method: 'GET', + headers: { + 'X-Id': encodeUTF8ToBase64(login), + 'X-Password': password, + }, + }) + if (response.status === 401) { + throw new UnauthorizedError('Ошибка авторизации') + } + if (!response.ok) { + throw new Error(`http error status: ${response.status}`) + } + return await response.json() + } catch (error) { + console.error('[apiGetGame] error:', error) + throw error + } +} + export function getApiUrl(path: string) { const url = 'http://' + window.location.host.split(':')[0] + ':8090' + path return url diff --git a/src/components/models.ts b/src/components/models.ts index e4fa3fd..a8a3170 100644 --- a/src/components/models.ts +++ b/src/components/models.ts @@ -1,3 +1,13 @@ +// Игра +export type Game = { + // Статус игры (NEW, RUN, STOP) + state: string + // Время начала игры + startAt: string + // Время окончания игры + endAt: string +} + // Команда export type Team = { // Название