Template
refactor : add concept module
This commit is contained in:
+1
-1
Submodule events updated: fc3f0e1677...1473c5c132
+1
-1
@@ -9,12 +9,12 @@ import { Game } from './games/entities/game.entity';
|
|||||||
import { Topic } from './word/entities/topic.entity';
|
import { Topic } from './word/entities/topic.entity';
|
||||||
import { Word } from './word/entities/word.entity';
|
import { Word } from './word/entities/word.entity';
|
||||||
import { Player } from './games/entities/player.entity';
|
import { Player } from './games/entities/player.entity';
|
||||||
import { Concept } from './games/entities/concept.entity';
|
|
||||||
import { ConceptInTurn } from './games/entities/concept_in_turn.entity';
|
import { ConceptInTurn } from './games/entities/concept_in_turn.entity';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { WordModule } from './word/words.module';
|
import { WordModule } from './word/words.module';
|
||||||
import { Message } from './games/entities/message.entity';
|
import { Message } from './games/entities/message.entity';
|
||||||
import { LobbyModule } from './lobby/lobby.module';
|
import { LobbyModule } from './lobby/lobby.module';
|
||||||
|
import { Concept } from './concept/entities/concept.entity';
|
||||||
|
|
||||||
const configService = new ConfigService();
|
const configService = new ConfigService();
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
import { UsersModule } from 'src/users/users.module';
|
||||||
|
import { Concept } from './entities/concept.entity';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [UsersModule, TypeOrmModule.forFeature([Concept])],
|
||||||
|
})
|
||||||
|
export class ConceptModule {}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
||||||
|
import { Concept } from './entities/concept.entity';
|
||||||
|
import {
|
||||||
|
ConceptDeleteEvent,
|
||||||
|
ConceptCreateEvent,
|
||||||
|
ConceptEnableEvent,
|
||||||
|
ConceptDisableEvent,
|
||||||
|
} from 'events/concept.events';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class WordService {
|
||||||
|
sse_prefix = 'sse.concept';
|
||||||
|
constructor(
|
||||||
|
@InjectRepository(Concept) private conceptRepository: Repository<Concept>,
|
||||||
|
private eventEmitter: EventEmitter2,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
async getById(id: number) {
|
||||||
|
return await this.conceptRepository.findOneBy({ id });
|
||||||
|
}
|
||||||
|
|
||||||
|
async delete(concept: Concept) {
|
||||||
|
const conceptId = concept.id;
|
||||||
|
await this.conceptRepository.remove(concept);
|
||||||
|
this.eventEmitter.emit(this.sse_prefix, new ConceptDeleteEvent(conceptId));
|
||||||
|
}
|
||||||
|
|
||||||
|
async create(value: string, image: string) {
|
||||||
|
const concept = this.conceptRepository.create();
|
||||||
|
concept.value = value;
|
||||||
|
try {
|
||||||
|
await this.conceptRepository.save(concept);
|
||||||
|
this.eventEmitter.emit(this.sse_prefix, new ConceptCreateEvent(concept));
|
||||||
|
return concept;
|
||||||
|
} catch {
|
||||||
|
throw new HttpException('Concept already exists', HttpStatus.CONFLICT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async listActive() {
|
||||||
|
const words = await this.conceptRepository.findBy({ enabled: true });
|
||||||
|
return words;
|
||||||
|
}
|
||||||
|
|
||||||
|
async list() {
|
||||||
|
const words = await this.conceptRepository.find();
|
||||||
|
return words;
|
||||||
|
}
|
||||||
|
|
||||||
|
async enable(concept: Concept) {
|
||||||
|
concept.enabled = true;
|
||||||
|
await this.conceptRepository.save(concept);
|
||||||
|
this.eventEmitter.emit(this.sse_prefix, new ConceptEnableEvent(concept.id));
|
||||||
|
}
|
||||||
|
|
||||||
|
async disable(concept: Concept) {
|
||||||
|
concept.enabled = false;
|
||||||
|
await this.conceptRepository.save(concept);
|
||||||
|
this.eventEmitter.emit(
|
||||||
|
this.sse_prefix,
|
||||||
|
new ConceptDisableEvent(concept.id),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import { Column, Entity, PrimaryGeneratedColumn, Unique } from 'typeorm';
|
||||||
|
|
||||||
|
@Entity()
|
||||||
|
@Unique(['value'])
|
||||||
|
export class Concept {
|
||||||
|
@PrimaryGeneratedColumn()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
value: string;
|
||||||
|
|
||||||
|
@Column({ default: false })
|
||||||
|
enabled: boolean;
|
||||||
|
}
|
||||||
@@ -20,9 +20,10 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
|
|||||||
import { GameService } from '../services/games.service';
|
import { GameService } from '../services/games.service';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { SessionData } from 'express-session';
|
import { SessionData } from 'express-session';
|
||||||
import { WordResponseDTO } from 'events/dto/wordresponse.dto';
|
// import { WordResponseDTO } from 'events/dto/wordresponse.dto';
|
||||||
import { WordRecieveDTO } from 'src/word/dto/wordrecieve.dto';
|
import { WordRecieveDTO } from 'src/word/dto/wordrecieve.dto';
|
||||||
import { LobbyService } from 'src/lobby/lobby.service';
|
import { LobbyService } from 'src/lobby/lobby.service';
|
||||||
|
import { WordResponseDTO } from 'events/dto/wordresponse.dto';
|
||||||
|
|
||||||
@ApiTags('game')
|
@ApiTags('game')
|
||||||
@Controller('games/:id')
|
@Controller('games/:id')
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
import {
|
|
||||||
Column,
|
|
||||||
Entity,
|
|
||||||
JoinTable,
|
|
||||||
ManyToOne,
|
|
||||||
OneToMany,
|
|
||||||
OneToOne,
|
|
||||||
PrimaryGeneratedColumn,
|
|
||||||
Unique,
|
|
||||||
} from 'typeorm';
|
|
||||||
import { Player } from './player.entity';
|
|
||||||
|
|
||||||
@Entity()
|
|
||||||
@Unique(['value'])
|
|
||||||
export class Concept {
|
|
||||||
@PrimaryGeneratedColumn()
|
|
||||||
id: number;
|
|
||||||
|
|
||||||
@Column()
|
|
||||||
value: string;
|
|
||||||
}
|
|
||||||
@@ -1,15 +1,6 @@
|
|||||||
import {
|
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
Column,
|
|
||||||
Entity,
|
|
||||||
JoinTable,
|
|
||||||
ManyToOne,
|
|
||||||
OneToMany,
|
|
||||||
OneToOne,
|
|
||||||
PrimaryGeneratedColumn,
|
|
||||||
Unique,
|
|
||||||
} from 'typeorm';
|
|
||||||
import { Concept } from './concept.entity';
|
|
||||||
import { Game } from './game.entity';
|
import { Game } from './game.entity';
|
||||||
|
import { Concept } from 'src/concept/entities/concept.entity';
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class ConceptInTurn {
|
export class ConceptInTurn {
|
||||||
|
|||||||
@@ -3,9 +3,7 @@ import {
|
|||||||
Entity,
|
Entity,
|
||||||
JoinColumn,
|
JoinColumn,
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
OneToMany,
|
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
Unique,
|
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
import { Player } from './player.entity';
|
import { Player } from './player.entity';
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,8 @@ import {
|
|||||||
Column,
|
Column,
|
||||||
Entity,
|
Entity,
|
||||||
JoinColumn,
|
JoinColumn,
|
||||||
JoinTable,
|
|
||||||
ManyToMany,
|
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
OneToMany,
|
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
Unique,
|
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
import { Game } from './game.entity';
|
import { Game } from './game.entity';
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
|
|||||||
import { Player } from '../entities/player.entity';
|
import { Player } from '../entities/player.entity';
|
||||||
import { User } from 'src/users/entities/user.entity';
|
import { User } from 'src/users/entities/user.entity';
|
||||||
|
|
||||||
import { WordService } from 'src/word/services/word.service';
|
|
||||||
import {
|
import {
|
||||||
GameEndTurnEvent,
|
GameEndTurnEvent,
|
||||||
GameMessageDeleteEvent,
|
GameMessageDeleteEvent,
|
||||||
@@ -21,6 +20,7 @@ import {
|
|||||||
} from 'events/game.events';
|
} from 'events/game.events';
|
||||||
import random from 'random';
|
import random from 'random';
|
||||||
import { Message } from '../entities/message.entity';
|
import { Message } from '../entities/message.entity';
|
||||||
|
import { WordService } from 'src/word/word.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class GameService {
|
export class GameService {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import {
|
|||||||
Param,
|
Param,
|
||||||
Delete,
|
Delete,
|
||||||
UseGuards,
|
UseGuards,
|
||||||
Session,
|
|
||||||
HttpException,
|
HttpException,
|
||||||
HttpStatus,
|
HttpStatus,
|
||||||
Sse,
|
Sse,
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { Module, forwardRef } from '@nestjs/common';
|
import { Module, forwardRef } from '@nestjs/common';
|
||||||
import { UsersModule } from 'src/users/users.module';
|
import { UsersModule } from 'src/users/users.module';
|
||||||
import { WordModule } from 'src/word/words.module';
|
|
||||||
import { LobbyController } from './lobby.controller';
|
import { LobbyController } from './lobby.controller';
|
||||||
import { LobbyService } from './lobby.service';
|
import { LobbyService } from './lobby.service';
|
||||||
import { GamesModule } from 'src/games/games.module';
|
import { GamesModule } from 'src/games/games.module';
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ import { LobbyService } from './lobby.service';
|
|||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
import { EventEmitterModule } from '@nestjs/event-emitter';
|
import { EventEmitterModule } from '@nestjs/event-emitter';
|
||||||
import { User } from 'src/users/entities/user.entity';
|
import { User } from 'src/users/entities/user.entity';
|
||||||
import { Concept } from '../games/entities/concept.entity';
|
|
||||||
import { ConceptInTurn } from '../games/entities/concept_in_turn.entity';
|
import { ConceptInTurn } from '../games/entities/concept_in_turn.entity';
|
||||||
import { Game } from '../games/entities/game.entity';
|
import { Game } from '../games/entities/game.entity';
|
||||||
import { Player } from '../games/entities/player.entity';
|
import { Player } from '../games/entities/player.entity';
|
||||||
import { GameService } from '../games/services/games.service';
|
import { GameService } from '../games/services/games.service';
|
||||||
|
import { Concept } from 'src/concept/entities/concept.entity';
|
||||||
|
|
||||||
describe('LobbyService', () => {
|
describe('LobbyService', () => {
|
||||||
let service: LobbyService;
|
let service: LobbyService;
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import {
|
|||||||
HttpStatus,
|
HttpStatus,
|
||||||
Redirect,
|
Redirect,
|
||||||
Param,
|
Param,
|
||||||
ParseIntPipe,
|
|
||||||
UseGuards,
|
UseGuards,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { UsersService } from './users.service';
|
import { UsersService } from './users.service';
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
Injectable,
|
Injectable,
|
||||||
PipeTransform,
|
PipeTransform,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { WordService } from '../services/word.service';
|
import { WordService } from '../word.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class WordPipe implements PipeTransform {
|
export class WordPipe implements PipeTransform {
|
||||||
|
|||||||
@@ -13,17 +13,17 @@ import {
|
|||||||
UseGuards,
|
UseGuards,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
|
|
||||||
import { WordService } from '../services/word.service';
|
|
||||||
import { ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger';
|
import { ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||||
import { AuthGuard } from 'src/users/guards/auth.guard';
|
import { AuthGuard } from 'src/users/guards/auth.guard';
|
||||||
import { WordResponseDTO } from '../../../events/dto/wordresponse.dto';
|
import { WordRecieveDTO } from './dto/wordrecieve.dto';
|
||||||
import { WordRecieveDTO } from '../dto/wordrecieve.dto';
|
import { WordPipe } from './pipe/word.pipe';
|
||||||
import { WordPipe } from '../pipe/word.pipe';
|
import { Word } from './entities/word.entity';
|
||||||
import { Word } from '../entities/word.entity';
|
|
||||||
import { GetUser } from 'src/users/user.pipe';
|
import { GetUser } from 'src/users/user.pipe';
|
||||||
import { User } from 'src/users/entities/user.entity';
|
import { User } from 'src/users/entities/user.entity';
|
||||||
import { fromEvent, map, Observable } from 'rxjs';
|
import { fromEvent, map, Observable } from 'rxjs';
|
||||||
import { EventEmitter2 } from '@nestjs/event-emitter';
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
||||||
|
import { WordService } from './word.service';
|
||||||
|
import { WordResponseDTO } from 'events/dto/wordresponse.dto';
|
||||||
|
|
||||||
@ApiTags('words')
|
@ApiTags('words')
|
||||||
@Controller('words')
|
@Controller('words')
|
||||||
@@ -1,21 +1,16 @@
|
|||||||
import {
|
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
||||||
HttpCode,
|
|
||||||
HttpException,
|
|
||||||
HttpStatus,
|
|
||||||
Injectable,
|
|
||||||
} from '@nestjs/common';
|
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import { Word } from '../entities/word.entity';
|
|
||||||
import { User } from 'src/users/entities/user.entity';
|
import { User } from 'src/users/entities/user.entity';
|
||||||
import { EventEmitter2 } from '@nestjs/event-emitter';
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
||||||
|
import { Word } from './entities/word.entity';
|
||||||
import {
|
import {
|
||||||
WordCreateEvent,
|
|
||||||
WordDeleteEvent,
|
WordDeleteEvent,
|
||||||
WordDisableEvent,
|
WordCreateEvent,
|
||||||
WordEnableEvent,
|
WordEnableEvent,
|
||||||
} from '../../../events/word.events';
|
WordDisableEvent,
|
||||||
import { HttpErrorByCode } from '@nestjs/common/utils/http-error-by-code.util';
|
} from 'events/word.events';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class WordService {
|
export class WordService {
|
||||||
@@ -2,9 +2,9 @@ import { Module } from '@nestjs/common';
|
|||||||
|
|
||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
import { Word } from './entities/word.entity';
|
import { Word } from './entities/word.entity';
|
||||||
import { WordController } from './controllers/word.controller';
|
import { WordController } from './word.controller';
|
||||||
import { WordService } from './services/word.service';
|
|
||||||
import { UsersModule } from 'src/users/users.module';
|
import { UsersModule } from 'src/users/users.module';
|
||||||
|
import { WordService } from './word.service';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [UsersModule, TypeOrmModule.forFeature([Word])],
|
imports: [UsersModule, TypeOrmModule.forFeature([Word])],
|
||||||
|
|||||||
Reference in New Issue
Block a user