Skip to content

Commit

Permalink
Merge pull request #248 from yusuftomilola/powerup-infrastructure
Browse files Browse the repository at this point in the history
Powerup infrastructure setup
  • Loading branch information
Xaxxoo authored Feb 23, 2025
2 parents 8b3e78e + 0694d73 commit b9f2c41
Show file tree
Hide file tree
Showing 13 changed files with 517 additions and 4 deletions.
7 changes: 3 additions & 4 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,12 @@ import { GlobalInterceptor } from './interceptors/global.interceptor';
import { SongsModule } from './songs/songs.module';
import { ScoringModule } from './scoring/scoring.module';
import { ChatRoomModule } from './chat-room/chat-room.module';
import { PowerUpModule } from './power-ups/power-up.module';
import { TournamentService } from './tournament/tournament.service';
import { TournamentModule } from './tournament/tournament.module';
import { GameGateway,} from './websocket-game comms/providers/gamegateway';
import { GameGateway } from './websocket-game comms/providers/gamegateway';
import { GameModule } from './websocket-game comms/game.module';



@Module({
imports: [
AuthModule,
Expand All @@ -46,8 +45,8 @@ import { GameModule } from './websocket-game comms/game.module';
SongsModule,
ChatRoomModule,
ScoringModule,
PowerUpModule,
TournamentModule,

],
controllers: [AppController],
providers: [
Expand Down
17 changes: 17 additions & 0 deletions backend/src/power-ups/dtos/create-power-up.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { IsString, IsNumber, IsPositive } from 'class-validator';

export class CreatePowerUpDto {
@IsString()
name: string;

@IsString()
description: string;

@IsNumber()
@IsPositive()
duration: number;

@IsNumber()
@IsPositive()
price: number;
}
7 changes: 7 additions & 0 deletions backend/src/power-ups/dtos/purchase-power-up.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { IsNumber, IsPositive } from 'class-validator';

export class PurchasePowerUpDto {
@IsNumber()
@IsPositive()
powerUpId: number;
}
21 changes: 21 additions & 0 deletions backend/src/power-ups/dtos/update-power-up.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { IsString, IsNumber, IsPositive, IsOptional } from 'class-validator';

export class UpdatePowerUpDto {
@IsOptional()
@IsString()
name?: string;

@IsOptional()
@IsString()
description?: string;

@IsOptional()
@IsNumber()
@IsPositive()
duration?: number;

@IsOptional()
@IsNumber()
@IsPositive()
price?: number;
}
24 changes: 24 additions & 0 deletions backend/src/power-ups/entities/power-up-purchase.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm';
import { PowerUp } from './power-up.entity';
import { User } from 'src/user/user.entity';

@Entity()
export class PowerUpPurchase {
@PrimaryGeneratedColumn()
id: number;

@ManyToOne(() => PowerUp)
powerUp: PowerUp;

@ManyToOne(() => User)
user: User;

@Column()
purchaseDate: Date;

@Column()
expirationDate: Date;

@Column({ default: false })
isUsed: boolean;
}
19 changes: 19 additions & 0 deletions backend/src/power-ups/entities/power-up.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class PowerUp {
@PrimaryGeneratedColumn()
id: number;

@Column()
name: string;

@Column()
description: string;

@Column()
duration: number;

@Column()
price: number;
}
18 changes: 18 additions & 0 deletions backend/src/power-ups/power-up-validation.middleware.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Injectable, type NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
import { PowerUpService } from './power-up.service';

@Injectable()
export class PowerUpValidationMiddleware implements NestMiddleware {
constructor(private readonly powerUpService: PowerUpService) {}

async use(req: Request, res: Response, next: NextFunction) {
const user = req['user'];
const activePowerUps = await this.powerUpService.getActivePowerUps(user);

// Add active power-ups to the request object for use in controllers
req['activePowerUps'] = activePowerUps;

next();
}
}
30 changes: 30 additions & 0 deletions backend/src/power-ups/power-up.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Controller, Post, Body, Get, UseGuards } from '@nestjs/common';
import { PowerUpService } from './power-up.service';
import { CreatePowerUpDto } from './dtos/create-power-up.dto';
import { PurchasePowerUpDto } from './dtos/purchase-power-up.dto';

@Controller('power-ups')
export class PowerUpController {
constructor(private readonly powerUpService: PowerUpService) {}

@Post()
async createPowerUp(@Body() createPowerUpDto: CreatePowerUpDto) {
return this.powerUpService.createPowerUp(createPowerUpDto);
}

@Post('purchase')
async purchasePowerUp(user, @Body() purchaseDto: PurchasePowerUpDto) {
return this.powerUpService.purchasePowerUp(user, purchaseDto);
}

@Get('active')
async getActivePowerUps(user) {
return this.powerUpService.getActivePowerUps(user);
}

@Post('use')
async usePowerUp(user, @Body('powerUpId') powerUpId: number) {
await this.powerUpService.usePowerUp(user, powerUpId);
return { message: 'Power-up used successfully' };
}
}
15 changes: 15 additions & 0 deletions backend/src/power-ups/power-up.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PowerUpService } from './power-up.service';
import { PowerUpController } from './power-up.controller';
import { PowerUp } from './entities/power-up.entity';
import { PowerUpPurchase } from './entities/power-up-purchase.entity';
import { PowerUpValidationMiddleware } from './power-up-validation.middleware';

@Module({
imports: [TypeOrmModule.forFeature([PowerUp, PowerUpPurchase])],
providers: [PowerUpService, PowerUpValidationMiddleware],
controllers: [PowerUpController],
exports: [PowerUpService, PowerUpValidationMiddleware],
})
export class PowerUpModule {}
Loading

0 comments on commit b9f2c41

Please sign in to comment.