Template
62 lines
1.7 KiB
TypeScript
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));
|
|
}
|
|
}
|