feat: implement game listing API and integrate into frontend for display and selection.

This commit is contained in:
2025-12-03 19:01:38 +01:00
parent e192829fdd
commit 0c3c9e61b6
5 changed files with 204 additions and 8 deletions
+124
View File
@@ -66,6 +66,10 @@ export interface PersonList {
person: Person[];
}
export interface GameList {
games: Game[];
}
/** Authentication messages */
export interface LoginRequest {
username: string;
@@ -101,6 +105,9 @@ export interface GameRequest {
title: string;
}
export interface GetGamesRequest {
}
export interface AddOpinionRequest {
gameTitle: string;
wouldPlay: boolean;
@@ -474,6 +481,64 @@ export const PersonList: MessageFns<PersonList> = {
},
};
function createBaseGameList(): GameList {
return { games: [] };
}
export const GameList: MessageFns<GameList> = {
encode(message: GameList, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
for (const v of message.games) {
Game.encode(v!, writer.uint32(10).fork()).join();
}
return writer;
},
decode(input: BinaryReader | Uint8Array, length?: number): GameList {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseGameList();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.games.push(Game.decode(reader, reader.uint32()));
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object: any): GameList {
return { games: globalThis.Array.isArray(object?.games) ? object.games.map((e: any) => Game.fromJSON(e)) : [] };
},
toJSON(message: GameList): unknown {
const obj: any = {};
if (message.games?.length) {
obj.games = message.games.map((e) => Game.toJSON(e));
}
return obj;
},
create<I extends Exact<DeepPartial<GameList>, I>>(base?: I): GameList {
return GameList.fromPartial(base ?? ({} as any));
},
fromPartial<I extends Exact<DeepPartial<GameList>, I>>(object: I): GameList {
const message = createBaseGameList();
message.games = object.games?.map((e) => Game.fromPartial(e)) || [];
return message;
},
};
function createBaseLoginRequest(): LoginRequest {
return { username: "", password: "" };
}
@@ -984,6 +1049,49 @@ export const GameRequest: MessageFns<GameRequest> = {
},
};
function createBaseGetGamesRequest(): GetGamesRequest {
return {};
}
export const GetGamesRequest: MessageFns<GetGamesRequest> = {
encode(_: GetGamesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
return writer;
},
decode(input: BinaryReader | Uint8Array, length?: number): GetGamesRequest {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseGetGamesRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(_: any): GetGamesRequest {
return {};
},
toJSON(_: GetGamesRequest): unknown {
const obj: any = {};
return obj;
},
create<I extends Exact<DeepPartial<GetGamesRequest>, I>>(base?: I): GetGamesRequest {
return GetGamesRequest.fromPartial(base ?? ({} as any));
},
fromPartial<I extends Exact<DeepPartial<GetGamesRequest>, I>>(_: I): GetGamesRequest {
const message = createBaseGetGamesRequest();
return message;
},
};
function createBaseAddOpinionRequest(): AddOpinionRequest {
return { gameTitle: "", wouldPlay: false };
}
@@ -1099,6 +1207,8 @@ export class AuthServiceClientImpl implements AuthService {
export interface MainService {
GetGame(request: GameRequest): Promise<Game>;
GetGames(request: GetGamesRequest): Promise<GameList>;
AddGame(request: Game): Promise<Game>;
AddOpinion(request: AddOpinionRequest): Promise<Person>;
}
@@ -1110,6 +1220,8 @@ export class MainServiceClientImpl implements MainService {
this.service = opts?.service || MainServiceServiceName;
this.rpc = rpc;
this.GetGame = this.GetGame.bind(this);
this.GetGames = this.GetGames.bind(this);
this.AddGame = this.AddGame.bind(this);
this.AddOpinion = this.AddOpinion.bind(this);
}
GetGame(request: GameRequest): Promise<Game> {
@@ -1118,6 +1230,18 @@ export class MainServiceClientImpl implements MainService {
return promise.then((data) => Game.decode(new BinaryReader(data)));
}
GetGames(request: GetGamesRequest): Promise<GameList> {
const data = GetGamesRequest.encode(request).finish();
const promise = this.rpc.request(this.service, "GetGames", data);
return promise.then((data) => GameList.decode(new BinaryReader(data)));
}
AddGame(request: Game): Promise<Game> {
const data = Game.encode(request).finish();
const promise = this.rpc.request(this.service, "AddGame", data);
return promise.then((data) => Game.decode(new BinaryReader(data)));
}
AddOpinion(request: AddOpinionRequest): Promise<Person> {
const data = AddOpinionRequest.encode(request).finish();
const promise = this.rpc.request(this.service, "AddOpinion", data);