This commit is contained in:
2026-09-01 01:04:38 +07:00
parent 1bf463de02
commit cfda264b02
2 changed files with 459 additions and 9 deletions
@@ -208,6 +208,7 @@ export type Scenario = {
export type Story = {
introduction: Introduction | undefined;
places: Place[] | undefined;
questions: Question[] | undefined;
};
export type Introduction = {
@@ -245,6 +246,18 @@ export type Key = {
name: string | undefined;
};
// Вопрос дела - вопрос, на который команда должна ответить в конце игры.
// Правильный ответ (answer) виден только автору сценария и организаторам
// (при оценке ответов команд), команде не передаётся.
export type Question = {
// Код вопроса - используется при отправке ответов командой
code: string | undefined;
// Текст вопроса
text: string | undefined;
// Правильный ответ (справка для организатора при оценке)
answer: string | undefined;
};
export type GetScenariosCatalogReq = {
};
@@ -262,6 +275,37 @@ export type GetScenarioRsp = {
scenario: Scenario | undefined;
};
// Ответ команды на вопрос дела
export type Answer = {
// Код вопроса
questionCode: string | undefined;
// Текст ответа команды
answer: string | undefined;
};
// Ответ команды с баллом (для панели организатора)
export type AnswerScore = {
questionCode: string | undefined;
answer: string | undefined;
// Балл, выставленный организатором; отсутствует, если ещё не оценено
score?: number;
};
// Ответы одной команды на вопросы дела
export type TeamAnswers = {
team: Team | undefined;
answers: AnswerScore[] | undefined;
};
export type Team = {
id: number | undefined;
name: string | undefined;
status: string | undefined;
password: string | undefined;
actionsCount: number | undefined;
applications: Application[] | undefined;
};
export type UpdateScenarioReq = {
id: number | undefined;
name: string | undefined;
@@ -334,6 +378,34 @@ export type UpdateScenarioIntroRsp = {
error: string | undefined;
};
export type AddScenarioQuestionReq = {
id: number | undefined;
question: Question | undefined;
};
export type AddScenarioQuestionRsp = {
error: string | undefined;
};
export type UpdateScenarioQuestionReq = {
id: number | undefined;
code: string | undefined;
question: Question | undefined;
};
export type UpdateScenarioQuestionRsp = {
error: string | undefined;
};
export type DeleteScenarioQuestionReq = {
id: number | undefined;
code: string | undefined;
};
export type DeleteScenarioQuestionRsp = {
error: string | undefined;
};
export type DownloadScenarioArchiveReq = {
id: number | undefined;
};
@@ -375,15 +447,6 @@ export type Game = {
endedAt?: wellKnownTimestamp;
};
export type Team = {
id: number | undefined;
name: string | undefined;
status: string | undefined;
password: string | undefined;
actionsCount: number | undefined;
applications: Application[] | undefined;
};
export type GetGameReq = {
id: number | undefined;
};
@@ -393,6 +456,16 @@ export type GetGameRsp = {
game: Game | undefined;
};
export type GetGameAnswersReq = {
gameId: number | undefined;
};
export type GetGameAnswersRsp = {
error: string | undefined;
questions: Question[] | undefined;
teams: TeamAnswers[] | undefined;
};
export type UpdateGameReq = {
id: number | undefined;
name: string | undefined;
@@ -519,6 +592,37 @@ export type DeleteLastTeamActionRsp = {
error: string | undefined;
};
export type GetTeamAnswersReq = {
id: number | undefined;
password: string | undefined;
};
export type GetTeamAnswersRsp = {
error: string | undefined;
answers: Answer[] | undefined;
};
export type SubmitTeamAnswersReq = {
id: number | undefined;
password: string | undefined;
answers: Answer[] | undefined;
};
export type SubmitTeamAnswersRsp = {
error: string | undefined;
};
export type SetTeamAnswerScoreReq = {
id: number | undefined;
questionCode: string | undefined;
// Балл; отсутствует — сбросить выставленный балл
score?: number;
};
export type SetTeamAnswerScoreRsp = {
error: string | undefined;
};
export interface EveningDetectiveServer {
Ping(request: PingReq): Promise<PingRsp>;
Echo(request: EchoReq): Promise<EchoRsp>;
@@ -550,12 +654,16 @@ export interface EveningDetectiveServer {
AddScenarioPlace(request: AddScenarioPlaceReq): Promise<AddScenarioPlaceRsp>;
UpdateScenarioPlace(request: UpdateScenarioPlaceReq): Promise<UpdateScenarioPlaceRsp>;
DeleteScenarioPlace(request: DeleteScenarioPlaceReq): Promise<DeleteScenarioPlaceRsp>;
AddScenarioQuestion(request: AddScenarioQuestionReq): Promise<AddScenarioQuestionRsp>;
UpdateScenarioQuestion(request: UpdateScenarioQuestionReq): Promise<UpdateScenarioQuestionRsp>;
DeleteScenarioQuestion(request: DeleteScenarioQuestionReq): Promise<DeleteScenarioQuestionRsp>;
UpdateScenarioIntro(request: UpdateScenarioIntroReq): Promise<UpdateScenarioIntroRsp>;
DownloadScenarioArchive(request: DownloadScenarioArchiveReq): Promise<googleapi_HttpBody>;
UploadScenarioArchive(request: googleapi_HttpBody): Promise<UploadScenarioArchiveRsp>;
AddGame(request: AddGameReq): Promise<AddGameRsp>;
GetGames(request: GetGamesReq): Promise<GetGamesRsp>;
GetGame(request: GetGameReq): Promise<GetGameRsp>;
GetGameAnswers(request: GetGameAnswersReq): Promise<GetGameAnswersRsp>;
UpdateGame(request: UpdateGameReq): Promise<UpdateGameRsp>;
StartGame(request: StartGameReq): Promise<StartGameRsp>;
PauseGame(request: PauseGameReq): Promise<PauseGameRsp>;
@@ -570,6 +678,9 @@ export interface EveningDetectiveServer {
GetTeamStory(request: GetTeamStoryReq): Promise<GetTeamStoryRsp>;
AddTeamAction(request: AddTeamActionReq): Promise<AddTeamActionRsp>;
DeleteLastTeamAction(request: DeleteLastTeamActionReq): Promise<DeleteLastTeamActionRsp>;
GetTeamAnswers(request: GetTeamAnswersReq): Promise<GetTeamAnswersRsp>;
SubmitTeamAnswers(request: SubmitTeamAnswersReq): Promise<SubmitTeamAnswersRsp>;
SetTeamAnswerScore(request: SetTeamAnswerScoreReq): Promise<SetTeamAnswerScoreRsp>;
}
type RequestType = {
@@ -1142,6 +1253,72 @@ export function createEveningDetectiveServerClient(
method: "DeleteScenarioPlace",
}) as Promise<DeleteScenarioPlaceRsp>;
},
AddScenarioQuestion(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.id) {
throw new Error("missing required field request.id");
}
const path = `api/scenarios/${request.id}/questions`; // eslint-disable-line quotes
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
if (queryParams.length > 0) {
uri += `?${queryParams.join("&")}`
}
return handler({
path: uri,
method: "POST",
body,
}, {
service: "EveningDetectiveServer",
method: "AddScenarioQuestion",
}) as Promise<AddScenarioQuestionRsp>;
},
UpdateScenarioQuestion(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.id) {
throw new Error("missing required field request.id");
}
if (!request.code) {
throw new Error("missing required field request.code");
}
const path = `api/scenarios/${request.id}/questions/${request.code}`; // eslint-disable-line quotes
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
if (queryParams.length > 0) {
uri += `?${queryParams.join("&")}`
}
return handler({
path: uri,
method: "PUT",
body,
}, {
service: "EveningDetectiveServer",
method: "UpdateScenarioQuestion",
}) as Promise<UpdateScenarioQuestionRsp>;
},
DeleteScenarioQuestion(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.id) {
throw new Error("missing required field request.id");
}
if (!request.code) {
throw new Error("missing required field request.code");
}
const path = `api/scenarios/${request.id}/questions/${request.code}`; // eslint-disable-line quotes
const body = null;
const queryParams: string[] = [];
let uri = path;
if (queryParams.length > 0) {
uri += `?${queryParams.join("&")}`
}
return handler({
path: uri,
method: "DELETE",
body,
}, {
service: "EveningDetectiveServer",
method: "DeleteScenarioQuestion",
}) as Promise<DeleteScenarioQuestionRsp>;
},
UpdateScenarioIntro(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.id) {
throw new Error("missing required field request.id");
@@ -1253,6 +1430,26 @@ export function createEveningDetectiveServerClient(
method: "GetGame",
}) as Promise<GetGameRsp>;
},
GetGameAnswers(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.gameId) {
throw new Error("missing required field request.gameId");
}
const path = `api/games/${request.gameId}/answers`; // eslint-disable-line quotes
const body = null;
const queryParams: string[] = [];
let uri = path;
if (queryParams.length > 0) {
uri += `?${queryParams.join("&")}`
}
return handler({
path: uri,
method: "GET",
body,
}, {
service: "EveningDetectiveServer",
method: "GetGameAnswers",
}) as Promise<GetGameAnswersRsp>;
},
UpdateGame(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.id) {
throw new Error("missing required field request.id");
@@ -1533,6 +1730,72 @@ export function createEveningDetectiveServerClient(
method: "DeleteLastTeamAction",
}) as Promise<DeleteLastTeamActionRsp>;
},
GetTeamAnswers(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.id) {
throw new Error("missing required field request.id");
}
const path = `api/teams/${request.id}/answers`; // eslint-disable-line quotes
const body = null;
const queryParams: string[] = [];
if (request.password) {
queryParams.push(`password=${encodeURIComponent(request.password.toString())}`)
}
let uri = path;
if (queryParams.length > 0) {
uri += `?${queryParams.join("&")}`
}
return handler({
path: uri,
method: "GET",
body,
}, {
service: "EveningDetectiveServer",
method: "GetTeamAnswers",
}) as Promise<GetTeamAnswersRsp>;
},
SubmitTeamAnswers(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.id) {
throw new Error("missing required field request.id");
}
const path = `api/teams/${request.id}/answers`; // eslint-disable-line quotes
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
if (queryParams.length > 0) {
uri += `?${queryParams.join("&")}`
}
return handler({
path: uri,
method: "POST",
body,
}, {
service: "EveningDetectiveServer",
method: "SubmitTeamAnswers",
}) as Promise<SubmitTeamAnswersRsp>;
},
SetTeamAnswerScore(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
if (!request.id) {
throw new Error("missing required field request.id");
}
if (!request.questionCode) {
throw new Error("missing required field request.questionCode");
}
const path = `api/teams/${request.id}/answers/${request.questionCode}/score`; // eslint-disable-line quotes
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
if (queryParams.length > 0) {
uri += `?${queryParams.join("&")}`
}
return handler({
path: uri,
method: "PUT",
body,
}, {
service: "EveningDetectiveServer",
method: "SetTeamAnswerScore",
}) as Promise<SetTeamAnswerScoreRsp>;
},
};
}
// Message that represents an arbitrary HTTP body. It should only be used for