mizzkey/packages/backend/src/server/api/GetterService.ts
noonworks ea92254b73
refactor: 型エラー修正 / Fix type errors backend (#9983)
* refactor: fix type errors in backend

* revert some changes

* なるべくJS挙動を変えない方法に修正

* Update packages/backend/src/server/api/ApiCallService.ts

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* コンフリクトするファイルを削除

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-02-20 08:13:37 +09:00

80 lines
1.9 KiB
TypeScript

import { Inject, Injectable } from '@nestjs/common';
import { DI } from '@/di-symbols.js';
import type { NotesRepository, UsersRepository } from '@/models/index.js';
import { IdentifiableError } from '@/misc/identifiable-error.js';
import type { LocalUser, RemoteUser, User } from '@/models/entities/User.js';
import type { Note } from '@/models/entities/Note.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { bindThis } from '@/decorators.js';
@Injectable()
export class GetterService {
constructor(
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
private userEntityService: UserEntityService,
) {
}
/**
* Get note for API processing
*/
@bindThis
public async getNote(noteId: Note['id']) {
const note = await this.notesRepository.findOneBy({ id: noteId });
if (note == null) {
throw new IdentifiableError('9725d0ce-ba28-4dde-95a7-2cbb2c15de24', 'No such note.');
}
return note;
}
/**
* Get user for API processing
*/
@bindThis
public async getUser(userId: User['id']) {
const user = await this.usersRepository.findOneBy({ id: userId });
if (user == null) {
throw new IdentifiableError('15348ddd-432d-49c2-8a5a-8069753becff', 'No such user.');
}
return user as LocalUser | RemoteUser;
}
/**
* Get remote user for API processing
*/
@bindThis
public async getRemoteUser(userId: User['id']) {
const user = await this.getUser(userId);
if (!this.userEntityService.isRemoteUser(user)) {
throw new Error('user is not a remote user');
}
return user;
}
/**
* Get local user for API processing
*/
@bindThis
public async getLocalUser(userId: User['id']) {
const user = await this.getUser(userId);
if (!this.userEntityService.isLocalUser(user)) {
throw new Error('user is not a local user');
}
return user;
}
}