feat: add GeneralTurn and NationTurn models with CRUD operations

- Introduced GeneralTurn and NationTurn models in Prisma schema.
- Implemented reserved turns management in the game API, including loading, setting, and shifting turns for generals and nations.
- Created unit tests for reserved turns functionality to ensure correctness.
- Developed reserved turn handler to process actions based on reserved turns.
- Established in-memory storage for reserved turns with persistence to the database.
This commit is contained in:
2025-12-30 04:45:07 +00:00
parent e4c57e2467
commit 6fe6d54432
13 changed files with 1949 additions and 15 deletions
+50
View File
@@ -48,6 +48,23 @@ export interface GeneralRow {
meta: unknown;
}
export interface GeneralTurnRow {
id: number;
generalId: number;
turnIdx: number;
actionCode: string;
arg: unknown;
}
export interface NationTurnRow {
id: number;
nationId: number;
officerLevel: number;
turnIdx: number;
actionCode: string;
arg: unknown;
}
export interface CityRow {
id: number;
name: string;
@@ -95,6 +112,39 @@ export interface DatabaseClient {
nation: {
findUnique(args: { where: { id: number } }): Promise<NationRow | null>;
};
generalTurn: {
findMany(args: {
where: { generalId: number };
orderBy?: { turnIdx: 'asc' | 'desc' }[];
}): Promise<GeneralTurnRow[]>;
deleteMany(args: { where: { generalId: number } }): Promise<unknown>;
createMany(args: {
data: Array<{
generalId: number;
turnIdx: number;
actionCode: string;
arg: unknown;
}>;
}): Promise<unknown>;
};
nationTurn: {
findMany(args: {
where: { nationId: number; officerLevel: number };
orderBy?: { turnIdx: 'asc' | 'desc' }[];
}): Promise<NationTurnRow[]>;
deleteMany(args: {
where: { nationId: number; officerLevel: number };
}): Promise<unknown>;
createMany(args: {
data: Array<{
nationId: number;
officerLevel: number;
turnIdx: number;
actionCode: string;
arg: unknown;
}>;
}): Promise<unknown>;
};
}
export interface GameApiContext {