import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Word } from '../entities/word.entity'; import { User } from 'src/users/entities/user.entity'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { WordCreateEvent, WordDeleteEvent, WordDisableEvent, WordEnableEvent, } from '../../../events/word.events'; @Injectable() export class WordService { sse_prefix = 'sse.word'; constructor( @InjectRepository(Word) private wordRepository: Repository, private eventEmitter: EventEmitter2, ) {} async getById(id: number) { return await this.wordRepository.findOneBy({ id }); } async delete(word: Word) { await this.wordRepository.remove(word); this.eventEmitter.emit(this.sse_prefix, new WordDeleteEvent(word.id)); } async create(value: string, owner: User) { const word = this.wordRepository.create(); word.owner = owner; word.value = value; await this.wordRepository.save(word); this.eventEmitter.emit(this.sse_prefix, new WordCreateEvent(word)); return word; } async listActive() { const words = await this.wordRepository.findBy({ enabled: true }); return words; } async list() { const words = await this.wordRepository.find(); return words; } async enable(word: Word) { word.enabled = true; await this.wordRepository.save(word); this.eventEmitter.emit(this.sse_prefix, new WordEnableEvent(word.id)); } async disable(word: Word) { word.enabled = false; await this.wordRepository.save(word); this.eventEmitter.emit(this.sse_prefix, new WordDisableEvent(word.id)); } }