Files
webapp-back/src/word/services/word.service.ts
T
2024-12-29 12:04:19 +01:00

62 lines
1.7 KiB
TypeScript

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<Word>,
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));
}
}