Skip to content

Commit

Permalink
Merge pull request #241 from yusuftomilola/main
Browse files Browse the repository at this point in the history
Feat:Badges System
  • Loading branch information
PeterOche authored Feb 22, 2025
2 parents 9b2ba31 + db988a8 commit 3c6a7e3
Show file tree
Hide file tree
Showing 13 changed files with 523 additions and 1 deletion.
3 changes: 2 additions & 1 deletion backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ 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';

@Module({
imports: [
Expand All @@ -39,7 +40,7 @@ import { ChatRoomModule } from './chat-room/chat-room.module';
SongsModule,
ChatRoomModule,
ScoringModule,

PowerUpModule,
],
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 '../users/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();
}
}
36 changes: 36 additions & 0 deletions backend/src/power-ups/power-up.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { Controller, Post, Body, Get, UseGuards } from '@nestjs/common';
import { PowerUpService } from './power-up.service';
import { CreatePowerUpDto } from './dto/create-power-up.dto';
import { PurchasePowerUpDto } from './dto/purchase-power-up.dto';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { User } from '../users/user.decorator';

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

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

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

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

@Post('use')
@UseGuards(JwtAuthGuard)
async usePowerUp(@User() 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 3c6a7e3

Please sign in to comment.