Compare commits
	
		
			2 Commits
		
	
	
		
			65576fc5b1
			...
			b93b8b4c04
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b93b8b4c04 | |||
| 0d96b78c33 | 
| @@ -7,11 +7,19 @@ CREATE TABLE "Player" ( | ||||
|     "name" TEXT NOT NULL, | ||||
|     "password" TEXT NOT NULL, | ||||
|     "money" INTEGER NOT NULL DEFAULT 0, | ||||
|     "currentRunner" BOOLEAN NOT NULL DEFAULT false, | ||||
| 
 | ||||
|     CONSTRAINT "Player_pkey" PRIMARY KEY ("id") | ||||
| ); | ||||
| 
 | ||||
| -- CreateTable | ||||
| CREATE TABLE "Game" ( | ||||
|     "id" SERIAL NOT NULL, | ||||
|     "started" BOOLEAN NOT NULL DEFAULT false, | ||||
|     "currentRunnerId" INTEGER, | ||||
| 
 | ||||
|     CONSTRAINT "Game_pkey" PRIMARY KEY ("id") | ||||
| ); | ||||
| 
 | ||||
| -- CreateTable | ||||
| CREATE TABLE "Geolocation" ( | ||||
|     "id" SERIAL NOT NULL, | ||||
| @@ -82,6 +90,9 @@ CREATE TABLE "MoneyUpdate" ( | ||||
| -- CreateIndex | ||||
| CREATE UNIQUE INDEX "Player_name_key" ON "Player"("name"); | ||||
| 
 | ||||
| -- CreateIndex | ||||
| CREATE UNIQUE INDEX "Game_currentRunnerId_key" ON "Game"("currentRunnerId"); | ||||
| 
 | ||||
| -- CreateIndex | ||||
| CREATE UNIQUE INDEX "Challenge_title_key" ON "Challenge"("title"); | ||||
| 
 | ||||
| @@ -94,6 +105,9 @@ CREATE UNIQUE INDEX "MoneyUpdate_actionId_key" ON "MoneyUpdate"("actionId"); | ||||
| -- CreateIndex | ||||
| CREATE UNIQUE INDEX "MoneyUpdate_tripId_key" ON "MoneyUpdate"("tripId"); | ||||
| 
 | ||||
| -- AddForeignKey | ||||
| ALTER TABLE "Game" ADD CONSTRAINT "Game_currentRunnerId_fkey" FOREIGN KEY ("currentRunnerId") REFERENCES "Player"("id") ON DELETE SET NULL ON UPDATE CASCADE; | ||||
| 
 | ||||
| -- AddForeignKey | ||||
| ALTER TABLE "Geolocation" ADD CONSTRAINT "Geolocation_playerId_fkey" FOREIGN KEY ("playerId") REFERENCES "Player"("id") ON DELETE RESTRICT ON UPDATE CASCADE; | ||||
| 
 | ||||
| @@ -12,11 +12,18 @@ model Player { | ||||
|   name          String            @unique | ||||
|   password      String | ||||
|   money         Int               @default(0) | ||||
|   currentRunner Boolean           @default(false) | ||||
|   actions       ChallengeAction[] | ||||
|   geolocations  Geolocation[] | ||||
|   moneyUpdates  MoneyUpdate[] | ||||
|   trips         TrainTrip[] | ||||
|   runningGame   Game? | ||||
| } | ||||
|  | ||||
| model Game { | ||||
|   id              Int     @id @default(autoincrement()) | ||||
|   started         Boolean @default(false) | ||||
|   currentRunner   Player? @relation(fields: [currentRunnerId], references: [id]) | ||||
|   currentRunnerId Int?    @unique | ||||
| } | ||||
|  | ||||
| model Geolocation { | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import * as bcrypt from 'bcrypt' | ||||
| const prisma = new PrismaClient() | ||||
|  | ||||
| async function main() { | ||||
|   const game = await prisma.game.create({ data: {} }) | ||||
|   const emmyPassword = await bcrypt.hash("Emmy", 10) | ||||
|   const emmy = await prisma.player.upsert({ | ||||
|     where: { id: 1 }, | ||||
| @@ -17,7 +18,7 @@ async function main() { | ||||
|     update: { name: 'Tamina' }, | ||||
|     create: { name: 'Tamina', password: taminaPassword }, | ||||
|   }) | ||||
|   console.log({ emmy, tamina }) | ||||
|   console.log({ game, emmy, tamina }) | ||||
| } | ||||
|  | ||||
| main() | ||||
|   | ||||
| @@ -8,9 +8,10 @@ import { ChallengesModule } from './challenges/challenges.module' | ||||
| import { ChallengeActionsModule } from './challenge-actions/challenge-actions.module' | ||||
| import { TrainsModule } from './trains/trains.module' | ||||
| import { MoneyUpdatesModule } from './money-updates/money-updates.module' | ||||
| import { GameModule } from './game/game.module' | ||||
|  | ||||
| @Module({ | ||||
|   imports: [PrismaModule, PlayersModule, AuthModule, GeolocationsModule, ChallengesModule, ChallengeActionsModule, TrainsModule, MoneyUpdatesModule], | ||||
|   imports: [PrismaModule, AuthModule, PlayersModule, GameModule, GeolocationsModule, ChallengesModule, ChallengeActionsModule, TrainsModule, MoneyUpdatesModule], | ||||
|   providers: [PrismaService], | ||||
| }) | ||||
| export class AppModule {} | ||||
|   | ||||
| @@ -4,8 +4,8 @@ import { ApiOkResponse, ApiTags } from '@nestjs/swagger' | ||||
| import { AuthEntity } from './entity/auth.entity' | ||||
| import { LoginDto } from './dto/login.dto' | ||||
|  | ||||
| @Controller('auth') | ||||
| @ApiTags('auth') | ||||
| @Controller('auth') | ||||
| export class AuthController { | ||||
|   constructor(private readonly authService: AuthService) {} | ||||
|  | ||||
|   | ||||
| @@ -15,7 +15,6 @@ export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') { | ||||
|   } | ||||
|  | ||||
|   async validate(payload: { playerId: number }): Promise<Player> { | ||||
|     console.log(payload) | ||||
|     const player = await this.playersService.findOne(payload.playerId) | ||||
|     if (!player) { | ||||
|       throw new UnauthorizedException() | ||||
|   | ||||
| @@ -19,7 +19,6 @@ export class ChallengeActionsService { | ||||
|   } | ||||
|  | ||||
|   async findAll(queryPagination: QueryPaginationDto, filterChallengeActions: FilterChallengeActionsDto): Promise<[ChallengeAction[], number]> { | ||||
|     console.log(filterChallengeActions) | ||||
|     return [ | ||||
|       await this.prisma.challengeAction.findMany({ | ||||
|         ...paginate(queryPagination), | ||||
| @@ -36,7 +35,6 @@ export class ChallengeActionsService { | ||||
|   } | ||||
|  | ||||
|   async update(id: number, updateChallengeActionDto: UpdateChallengeActionDto): Promise<ChallengeAction> { | ||||
|     console.log(updateChallengeActionDto) | ||||
|     return await this.prisma.challengeAction.update({ | ||||
|       where: { id }, | ||||
|       data: updateChallengeActionDto, | ||||
|   | ||||
							
								
								
									
										17
									
								
								server/src/game/entities/game.entity.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								server/src/game/entities/game.entity.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| import { ApiProperty } from "@nestjs/swagger" | ||||
| import { Game } from "@prisma/client" | ||||
|  | ||||
| export class GameEntity implements Game { | ||||
|   constructor(partial: Partial<GameEntity>) { | ||||
|     Object.assign(this, partial) | ||||
|   } | ||||
|  | ||||
|   @ApiProperty({ description: "Identifiant unique du jeu" }) | ||||
|   id: number | ||||
|  | ||||
|   @ApiProperty({ description: "Est-ce que la partie est en cours" }) | ||||
|   started: boolean | ||||
|  | ||||
|   @ApiProperty({ description: "Identifiant de læ joueur⋅se en course" }) | ||||
|   currentRunnerId: number | ||||
| } | ||||
							
								
								
									
										20
									
								
								server/src/game/game.controller.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								server/src/game/game.controller.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| import { Test, TestingModule } from '@nestjs/testing' | ||||
| import { GameController } from './game.controller' | ||||
| import { GameService } from './game.service' | ||||
|  | ||||
| describe('GameController', () => { | ||||
|   let controller: GameController | ||||
|  | ||||
|   beforeEach(async () => { | ||||
|     const module: TestingModule = await Test.createTestingModule({ | ||||
|       controllers: [GameController], | ||||
|       providers: [GameService], | ||||
|     }).compile() | ||||
|  | ||||
|     controller = module.get<GameController>(GameController) | ||||
|   }) | ||||
|  | ||||
|   it('should be defined', () => { | ||||
|     expect(controller).toBeDefined() | ||||
|   }) | ||||
| }) | ||||
							
								
								
									
										19
									
								
								server/src/game/game.controller.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								server/src/game/game.controller.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| import { Controller, Get, UseGuards } from '@nestjs/common' | ||||
| import { GameService } from './game.service' | ||||
| import { JwtAuthGuard } from 'src/auth/jwt-auth.guard' | ||||
| import { ApiBearerAuth, ApiOkResponse, ApiUnauthorizedResponse } from '@nestjs/swagger' | ||||
| import { GameEntity } from './entities/game.entity' | ||||
|  | ||||
| @Controller('game') | ||||
| export class GameController { | ||||
|   constructor(private readonly gameService: GameService) {} | ||||
|  | ||||
|   @Get() | ||||
|   @UseGuards(JwtAuthGuard) | ||||
|   @ApiBearerAuth() | ||||
|   @ApiOkResponse({ type: GameEntity }) | ||||
|   @ApiUnauthorizedResponse({ description: "Non authentifié⋅e" }) | ||||
|   async find() { | ||||
|     return new GameEntity(await this.gameService.find()) | ||||
|   } | ||||
| } | ||||
							
								
								
									
										11
									
								
								server/src/game/game.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								server/src/game/game.module.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| import { Module } from '@nestjs/common' | ||||
| import { GameService } from './game.service' | ||||
| import { GameController } from './game.controller' | ||||
| import { PrismaModule } from 'src/prisma/prisma.module' | ||||
|  | ||||
| @Module({ | ||||
|   controllers: [GameController], | ||||
|   providers: [GameService], | ||||
|   imports: [PrismaModule], | ||||
| }) | ||||
| export class GameModule {} | ||||
							
								
								
									
										18
									
								
								server/src/game/game.service.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								server/src/game/game.service.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| import { Test, TestingModule } from '@nestjs/testing' | ||||
| import { GameService } from './game.service' | ||||
|  | ||||
| describe('GameService', () => { | ||||
|   let service: GameService | ||||
|  | ||||
|   beforeEach(async () => { | ||||
|     const module: TestingModule = await Test.createTestingModule({ | ||||
|       providers: [GameService], | ||||
|     }).compile() | ||||
|  | ||||
|     service = module.get<GameService>(GameService) | ||||
|   }) | ||||
|  | ||||
|   it('should be defined', () => { | ||||
|     expect(service).toBeDefined() | ||||
|   }) | ||||
| }) | ||||
							
								
								
									
										11
									
								
								server/src/game/game.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								server/src/game/game.service.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| import { Injectable } from '@nestjs/common' | ||||
| import { PrismaService } from 'src/prisma/prisma.service' | ||||
|  | ||||
| @Injectable() | ||||
| export class GameService { | ||||
|   constructor (private prisma: PrismaService) {} | ||||
|  | ||||
|   async find() { | ||||
|     return await this.prisma.game.findUnique({ where: { id: 1 } }) | ||||
|   } | ||||
| } | ||||
| @@ -18,7 +18,4 @@ export class PlayerEntity implements Player { | ||||
|  | ||||
|   @ApiProperty({description: "Nombre de jetons dont dispose actuellement læ joueur⋅se"}) | ||||
|   money: number | ||||
|  | ||||
|   @ApiProperty({description: "Est-ce que cet⋅te joueur⋅se est cellui actuellement en course"}) | ||||
|   currentRunner: boolean | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user