diff --git a/src/game/coordinate.entity.ts b/src/game/coordinate.entity.ts new file mode 100644 index 0000000000000000000000000000000000000000..65ad6545eb030813a796cb4fef836030bf247154 --- /dev/null +++ b/src/game/coordinate.entity.ts @@ -0,0 +1,30 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + OneToMany, + ManyToOne, + PrimaryColumn, + Timestamp, + } from 'typeorm'; + import { + Game_PersonEntity, + ObjectivePointEntity, + GameEntity, + } from './game.entity'; + import { FactionEntity } from './faction.entity'; + + @Entity('MapDrawing') + export class MapDrawingEntity { + @PrimaryGeneratedColumn('uuid') mapDrawingId: string; + @Column({ type: 'bool' }) drawingIsActive: boolean; + @Column({ type: 'time' }) drawingValidTill: string; + + @Column({ type: 'json', nullable: true }) data: JSON; + + @ManyToOne(type => FactionEntity, faction => faction.mapDrawings) + faction: FactionEntity; + @ManyToOne(type => GameEntity, gameEntity => gameEntity.id) + gameId: GameEntity; + } + \ No newline at end of file diff --git a/src/game/faction.entity.ts b/src/game/faction.entity.ts new file mode 100644 index 0000000000000000000000000000000000000000..891421d3a41315549a9e589ef87ce1f22a9abc84 --- /dev/null +++ b/src/game/faction.entity.ts @@ -0,0 +1,95 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + OneToMany, + ManyToOne, + Timestamp, + } from 'typeorm'; + import { GameEntity } from './game.entity'; + import { Game_PersonEntity } from './game.entity'; + import { MapDrawingEntity } from './coordinate.entity'; + + //Faction, PowerUp, Faction_powerUp, FP_History, Score, Task + + @Entity('Faction') + export class FactionEntity { + @PrimaryGeneratedColumn('uuid') factionId: string; + @Column({ type: 'text', unique: true }) factionName: string; + @Column({ type: 'text' }) factionPassword: string; + @Column({ type: 'float' }) multiplier: number; + + @OneToMany(type => MapDrawingEntity, mapDrawings => mapDrawings.faction) + mapDrawings: MapDrawingEntity[]; + @OneToMany(type => ScoreEntity, scores => scores.faction) + scores: ScoreEntity[]; + @OneToMany(type => PowerUpEntity, powerUps => powerUps.factions) + powerUps: Faction_PowerUpEntity[]; + @OneToMany(type => TaskEntity, tasks => tasks.faction) + tasks: TaskEntity[]; + @OneToMany(type => Game_PersonEntity, game_persons => game_persons.faction) + game_persons: Game_PersonEntity[]; + @ManyToOne(type => GameEntity, game => game.factions) + game: GameEntity; + } + + @Entity('PowerUp') + export class PowerUpEntity { + @PrimaryGeneratedColumn('uuid') powerUpId: string; + @Column({ type: 'text' }) powerUpName: string; + @Column({ type: 'text' }) powerUpDescription: string; + @Column({ type: 'int' }) amount: number; + @Column({ type: 'time' }) cooldown: string; + + @OneToMany(type => FactionEntity, factions => factions.powerUps) + factions: Faction_PowerUpEntity[]; + } + + @Entity('Faction_PowerUp') + export class Faction_PowerUpEntity { + @PrimaryGeneratedColumn('uuid') faction_powerUpId: string; + + @ManyToOne(type => FactionEntity, faction => faction.powerUps) + faction: FactionEntity; + @ManyToOne(type => PowerUpEntity, powerUp => powerUp.factions) + powerUp: PowerUpEntity; + @OneToMany(type => FP_HistoryEntity, histories => histories.faction_PowerUp) + histories: FP_HistoryEntity[]; + } + + @Entity('FP_History') + export class FP_HistoryEntity { + @PrimaryGeneratedColumn('uuid') historyId: string; + @Column({ type: 'timestamp' }) historyTimeStamp: Timestamp; + + @ManyToOne( + type => Faction_PowerUpEntity, + faction_PowerUp => faction_PowerUp.histories, + ) + faction_PowerUp: Faction_PowerUpEntity; + } + + @Entity('Score') + export class ScoreEntity { + @PrimaryGeneratedColumn('uuid') scoreId: string; + @Column({ type: 'float' }) score: number; + @Column({ type: 'timestamp' }) scoreTimeStamp: Timestamp; + + @ManyToOne(type => FactionEntity, factionName => factionName.scores) + faction: FactionEntity; + } + + @Entity('Task') + export class TaskEntity { + @PrimaryGeneratedColumn('uuid') taskId: string; + @Column({ type: 'text' }) taskName: string; + @Column({ type: 'text' }) taskDescription: string; + @Column({ type: 'text' }) taskWinner: string; + @Column({ type: 'bool' }) taskIsActive: boolean; + + @ManyToOne(type => FactionEntity, faction => faction.tasks) + faction: FactionEntity; +/* @ManyToOne(type => PersonEntity, person => person.tasks) + person: PersonEntity; */ + } + \ No newline at end of file diff --git a/src/game/game.entity.ts b/src/game/game.entity.ts index 08c46a6c95a6b52d778b4cf5a5b729591ad3c181..33b0a3acb8961a30dfad185fe42ca7903f2b2a47 100644 --- a/src/game/game.entity.ts +++ b/src/game/game.entity.ts @@ -6,10 +6,13 @@ import { OneToMany, Timestamp, OneToOne, + JoinColumn, } from 'typeorm'; import { PersonEntity } from '../user/user.entity'; import { GameGroupEntity } from './group.entity'; +import { FactionEntity } from './faction.entity'; +import { MapDrawingEntity } from './coordinate.entity'; // table that stores all created games @Entity('Game') @@ -27,6 +30,12 @@ export class GameEntity { game_persons: Game_PersonEntity[]; @OneToMany(type => GameGroupEntity, group => group.game) groups: GameGroupEntity[]; + @OneToMany( + type => ObjectivePointEntity, + objective_points => objective_points.game, + ) + objective_points: ObjectivePointEntity[]; + gameObject() { const { id, name } = this; @@ -34,20 +43,6 @@ export class GameEntity { } } -// table that stores all factions created for games -@Entity('Faction') -export class FactionEntity { - @PrimaryGeneratedColumn('uuid') id: string; - @Column('text') name: string; - @Column('text') password: string; - @ManyToOne(type => GameEntity, game => game.factions) - game: GameEntity; - @OneToMany(type => Game_PersonEntity, game_persons => game_persons.faction, { - onUpdate: 'CASCADE', - }) - game_persons: Game_PersonEntity[]; -} - // table that stores players associated with particular game @Entity('Game_Person') export class Game_PersonEntity { @@ -59,14 +54,44 @@ export class Game_PersonEntity { game: GameEntity; @ManyToOne(type => PersonEntity, person => person.game_persons) person: PersonEntity; - @OneToOne(type => GameGroupEntity, group => group.leader) + @OneToOne(type => GameGroupEntity, group => group.leader, { + onDelete: 'CASCADE' + }) + @JoinColumn({name: 'leaderGroup'}) leaderGroup: GameGroupEntity; - @ManyToOne(type => GameGroupEntity, group => group.players) + @ManyToOne(type => GameGroupEntity, group => group.players, { + onDelete: 'CASCADE' + }) + @JoinColumn({name: 'group'}) group: GameGroupEntity; - /* - @ManyToOne(type => PersonRoleEntity, person_role => person_role.game_persons) - person_role: PersonRoleEntity; - @ManyToMany(type => CoordinateEntity, game_person_coordinates => game_person_coordinates.game_persons) - game_person_coordinates: CoordinateEntity[]; */ } +@Entity('ObjectivePoint') +export class ObjectivePointEntity { + @PrimaryGeneratedColumn('uuid') objectivePointId: string; + @Column({ type: 'text' }) objectivePointDescription: string; + @Column({ type: 'float' }) objectivePointMultiplier: number; + + @ManyToOne(type => MapDrawingEntity, coordinate => coordinate.data) + coordinate: MapDrawingEntity; + @ManyToOne(type => GameEntity, game => game.objective_points) + game: GameEntity; + @OneToMany( + type => ObjectivePoint_HistoryEntity, + op_history => op_history.objective_point, + ) + op_history: Game_PersonEntity[]; +} + +@Entity('ObjectivePoint_History') +export class ObjectivePoint_HistoryEntity { + @PrimaryGeneratedColumn('uuid') oP_HistoryId: string; + @Column({ type: 'timestamp' }) oP_HistoryTimestamp: Timestamp; + @Column({}) oP_HistoryStatus: number; + + @ManyToOne( + type => ObjectivePointEntity, + objective_point => objective_point.op_history, + ) + objective_point: ObjectivePointEntity; +} diff --git a/src/game/game.module.ts b/src/game/game.module.ts index 6851ea3d9d3ac299f44c91451e1cb960f053cff7..4b56620b4ba0d4fa3c90b8579b067e8418d5cf60 100644 --- a/src/game/game.module.ts +++ b/src/game/game.module.ts @@ -3,9 +3,10 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { GameController } from './game.controller'; import { GameService } from './game.service'; -import { GameEntity, FactionEntity, Game_PersonEntity } from './game.entity'; +import { GameEntity, Game_PersonEntity } from './game.entity'; import { PersonEntity } from '../user/user.entity'; import { GameGroupEntity } from './group.entity'; +import { FactionEntity } from './faction.entity'; @Module({ imports: [TypeOrmModule.forFeature([GameEntity, FactionEntity, Game_PersonEntity, PersonEntity, GameGroupEntity])], diff --git a/src/game/group.entity.ts b/src/game/group.entity.ts index 66d2a85ddb75717d1b5b925ea4d42cf70f51abb8..0b9f00ed621b41b8515a77126f9564c14a02d74b 100644 --- a/src/game/group.entity.ts +++ b/src/game/group.entity.ts @@ -14,10 +14,14 @@ import { Game_PersonEntity, GameEntity } from './game.entity'; export class GameGroupEntity { @PrimaryGeneratedColumn('uuid') id: string; @Column('text') name: string; - @OneToOne(type => Game_PersonEntity, person => person.leaderGroup) - @JoinColumn({name:'leader'}) + @OneToOne(type => Game_PersonEntity, person => person.leaderGroup, { + onDelete: 'CASCADE' + }) + //@JoinColumn({name:'leader'}) leader: Game_PersonEntity; - @OneToMany(type => Game_PersonEntity, person => person.group) + @OneToMany(type => Game_PersonEntity, person => person.group, { + onDelete: 'CASCADE' + }) players: Game_PersonEntity[]; @ManyToOne(type => GameEntity, game => game.groups) game: GameEntity; diff --git a/src/mapmarkers/mapmarker.entity.ts b/src/mapmarkers/mapmarker.entity.ts index dd2caae1a766c60d4627e969eac2a37518b13dca..b83b1d9ad56c6de51563aa0e1a5fe024e5cf9665 100644 --- a/src/mapmarkers/mapmarker.entity.ts +++ b/src/mapmarkers/mapmarker.entity.ts @@ -1,21 +1,26 @@ -import { Entity, Column, PrimaryGeneratedColumn, Timestamp, ManyToOne } from 'typeorm'; - -import { PersonEntity } from '../user/user.entity' -import { FactionEntity } from '../game/game.entity'; - -/* -Entity: MapMarker -- represents data that database contains on mapmarker -*/ - -@Entity('MapMarker') -export class MapMarkerEntity { +import { + Entity, + Column, + PrimaryGeneratedColumn, + Timestamp, + ManyToOne, + } from 'typeorm'; + + import { PersonEntity } from '../user/user.entity'; + + /* + Entity: MapMarker + - represents data that database contains on mapmarker + */ + + @Entity('MapMarker') + export class MapMarkerEntity { @PrimaryGeneratedColumn('uuid') id: string; - @Column({type: 'text'}) latitude: string; - @Column({type: 'text'}) longitude: string; - @Column({type: 'timestamp'}) timestamp: Timestamp; - @Column({type: 'json', nullable: true}) features: JSON; + @Column({ type: 'text', nullable: true }) latitude: string; + @Column({ type: 'text', nullable: true }) longitude: string; + @Column({ type: 'timestamp' }) timestamp: Timestamp; + @Column({ type: 'json', nullable: true }) features: JSON; @ManyToOne(type => PersonEntity, player => player.markers) - player?: PersonEntity; - //@ManyToOne(type => FactionEntity) -} \ No newline at end of file + player: PersonEntity; + } + \ No newline at end of file