Merge remote-tracking branch 'origin/main'

This commit is contained in:
2025-09-22 11:26:43 +02:00
789 changed files with 14011 additions and 16477 deletions
@@ -31,7 +31,13 @@ export enum ConsequenceType {
MOVE_BACKWARD = 1,
LOSE_TURN = 2,
EXTRA_TURN = 3,
<<<<<<< HEAD
GO_TO_START = 5
=======
SWAP_POSITION = 4,
GO_TO_START = 5,
TURN_AGAIN = 6
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
}
export interface Consequence {
@@ -1,5 +1,9 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
<<<<<<< HEAD
import { Consequence, CardType } from '../Deck/DeckAggregate';
=======
import { Consequence } from '../Deck/DeckAggregate';
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
export enum GameState {
WAITING = 0,
@@ -23,8 +27,12 @@ export enum DeckType {
export interface GameCard {
cardid: string;
question?: string;
<<<<<<< HEAD
answer?: any; // Support complex answer structures (string, object, array)
type?: CardType; // Card type for validation logic
=======
answer?: string;
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
consequence?: Consequence | null;
played?: boolean;
playerid?: string;
@@ -50,6 +58,7 @@ export class GameAggregate {
@Column({ type: 'int', default: LoginType.PUBLIC })
logintype!: LoginType;
<<<<<<< HEAD
@Column({ type: 'int', default: 50 })
boardsize!: number;
@@ -63,6 +72,18 @@ export class GameAggregate {
gamedecks!: GameDeck[];
@Column({ type: 'uuid', array: true, default: () => "'{}'", name: 'playerids' })
=======
@Column({ type: 'varchar', length: 255, nullable: true })
createdby!: string | null;
@Column({ type: 'varchar', length: 255, nullable: true })
orgid!: string | null;
@Column({ type: 'json' })
gamedecks!: GameDeck[];
@Column({ type: 'json', default: () => "'[]'" })
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
players!: string[];
@Column({ type: 'boolean', default: false })
@@ -71,22 +92,37 @@ export class GameAggregate {
@Column({ type: 'boolean', default: false })
finished!: boolean;
<<<<<<< HEAD
@Column({ type: 'uuid', nullable: true, name: 'winnerid' })
=======
@Column({ type: 'varchar', length: 255, nullable: true })
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
winner!: string | null;
@Column({ type: 'int', default: GameState.WAITING })
state!: GameState;
<<<<<<< HEAD
@CreateDateColumn({ name: 'createDate' })
=======
@CreateDateColumn({ name: 'create_date' })
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
createdate!: Date;
@Column({ type: 'timestamp', nullable: true, name: 'start_date' })
startdate!: Date | null;
<<<<<<< HEAD
@Column({ type: 'timestamp', nullable: true, name: 'finishDate' })
enddate!: Date | null;
@UpdateDateColumn({ name: 'updateDate' })
=======
@Column({ type: 'timestamp', nullable: true, name: 'end_date' })
enddate!: Date | null;
@UpdateDateColumn({ name: 'update_date' })
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
updatedate!: Date;
}
@@ -100,6 +136,12 @@ export interface GameField {
export interface BoardData {
gameId?: string;
fields: GameField[];
<<<<<<< HEAD
=======
border: number[];
validationResults: { [fieldIndex: number]: number[] };
totalErrorRate: number;
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
generationComplete?: boolean;
generatedAt?: Date;
error?: string;
@@ -1,9 +1,27 @@
import { GameAggregate } from '../Game/GameAggregate';
<<<<<<< HEAD
import { IPaginatedRepository } from './IBaseRepository';
export interface IGameRepository extends IPaginatedRepository<GameAggregate, { games: GameAggregate[], totalCount: number }> {
// Game-specific methods
findByGameCode(gamecode: string): Promise<GameAggregate | null>;
=======
export interface IGameRepository {
create(game: Partial<GameAggregate>): Promise<GameAggregate>;
findByPage(from: number, to: number): Promise<{ games: GameAggregate[], totalCount: number }>;
findByPageIncludingDeleted(from: number, to: number): Promise<{ games: GameAggregate[], totalCount: number }>;
findById(id: string): Promise<GameAggregate | null>;
findByIdIncludingDeleted(id: string): Promise<GameAggregate | null>;
findByGameCode(gamecode: string): Promise<GameAggregate | null>;
search(query: string, limit?: number, offset?: number): Promise<{ games: GameAggregate[], totalCount: number }>;
searchIncludingDeleted(query: string, limit?: number, offset?: number): Promise<{ games: GameAggregate[], totalCount: number }>;
update(id: string, update: Partial<GameAggregate>): Promise<GameAggregate | null>;
delete(id: string): Promise<any>;
softDelete(id: string): Promise<GameAggregate | null>;
// Game-specific methods
>>>>>>> 83fad59878db015ec8d86bdec1ecbbca0baddfd2
findActiveGames(): Promise<GameAggregate[]>;
findGamesByPlayer(playerId: string): Promise<GameAggregate[]>;
findWaitingGames(): Promise<GameAggregate[]>;