feat(server): introduce user friendly server errors (#7111)

This commit is contained in:
liuyi
2024-06-17 11:30:58 +08:00
committed by GitHub
parent 5307a55f8a
commit 54fc1197ad
65 changed files with 3170 additions and 924 deletions

View File

@@ -1,13 +1,7 @@
import {
Controller,
ForbiddenException,
Get,
NotFoundException,
Param,
Res,
} from '@nestjs/common';
import { Controller, Get, Param, Res } from '@nestjs/common';
import type { Response } from 'express';
import { ActionForbidden, UserAvatarNotFound } from '../../fundamentals';
import { AvatarStorage } from '../storage';
@Controller('/api/avatars')
@@ -17,7 +11,7 @@ export class UserAvatarController {
@Get('/:id')
async getAvatar(@Res() res: Response, @Param('id') id: string) {
if (this.storage.provider.type !== 'fs') {
throw new ForbiddenException(
throw new ActionForbidden(
'Only available when avatar storage provider set to fs.'
);
}
@@ -25,7 +19,7 @@ export class UserAvatarController {
const { body, metadata } = await this.storage.get(id);
if (!body) {
throw new NotFoundException(`Avatar ${id} not found.`);
throw new UserAvatarNotFound();
}
// metadata should always exists if body is not null

View File

@@ -1,4 +1,3 @@
import { BadRequestException } from '@nestjs/common';
import {
Args,
Field,
@@ -18,6 +17,7 @@ import {
CryptoHelper,
type FileUpload,
Throttle,
UserNotFound,
} from '../../fundamentals';
import { CurrentUser } from '../auth/current-user';
import { Public } from '../auth/guard';
@@ -92,7 +92,7 @@ export class UserResolver {
avatar: FileUpload
) {
if (!user) {
throw new BadRequestException(`User not found`);
throw new UserNotFound();
}
const avatarUrl = await this.storage.put(
@@ -128,7 +128,7 @@ export class UserResolver {
})
async removeAvatar(@CurrentUser() user: CurrentUser) {
if (!user) {
throw new BadRequestException(`User not found`);
throw new UserNotFound();
}
await this.users.updateUser(user.id, { avatarUrl: null });
return { success: true };

View File

@@ -1,8 +1,9 @@
import { BadRequestException, Injectable, Logger } from '@nestjs/common';
import { Injectable, Logger } from '@nestjs/common';
import { Prisma, PrismaClient } from '@prisma/client';
import {
Config,
EmailAlreadyUsed,
EventEmitter,
type EventPayload,
OnEvent,
@@ -63,7 +64,7 @@ export class UserService {
const user = await this.findUserByEmail(email);
if (user) {
throw new BadRequestException('Email already exists');
throw new EmailAlreadyUsed();
}
return this.createUser({