84 lines
2.4 KiB
TypeScript
84 lines
2.4 KiB
TypeScript
import { Body, Controller, Logger, Post } from '@nestjs/common';
|
|
import {
|
|
ImageDeleteRequest,
|
|
ImageDeleteResponse,
|
|
ImageListRequest,
|
|
ImageListResponse,
|
|
ImageUploadResponse
|
|
} from 'picsur-shared/dist/dto/api/image-manage.dto';
|
|
import { Permission } from 'picsur-shared/dist/dto/permissions.enum';
|
|
import { ThrowIfFailed } from 'picsur-shared/dist/types';
|
|
import { MultiPart } from '../../decorators/multipart/multipart.decorator';
|
|
import {
|
|
HasPermission,
|
|
RequiredPermissions
|
|
} from '../../decorators/permissions.decorator';
|
|
import { ReqUserID } from '../../decorators/request-user.decorator';
|
|
import { Returns } from '../../decorators/returns.decorator';
|
|
import { ImageManagerService } from '../../managers/image/image.service';
|
|
import { ImageUploadDto } from '../../models/dto/image-upload.dto';
|
|
|
|
@Controller('api/image')
|
|
@RequiredPermissions(Permission.ImageUpload)
|
|
export class ImageManageController {
|
|
private readonly logger = new Logger(ImageManageController.name);
|
|
|
|
constructor(private readonly imagesService: ImageManagerService) {}
|
|
|
|
@Post('upload')
|
|
@Returns(ImageUploadResponse)
|
|
async uploadImage(
|
|
@MultiPart() multipart: ImageUploadDto,
|
|
@ReqUserID() userid: string,
|
|
): Promise<ImageUploadResponse> {
|
|
const image = ThrowIfFailed(
|
|
await this.imagesService.upload(
|
|
userid,
|
|
multipart.image.filename,
|
|
multipart.image.buffer,
|
|
),
|
|
);
|
|
|
|
return image;
|
|
}
|
|
|
|
@Post('list')
|
|
@RequiredPermissions(Permission.ImageManage)
|
|
@Returns(ImageListResponse)
|
|
async listMyImagesPaged(
|
|
@Body() body: ImageListRequest,
|
|
@ReqUserID() userid: string,
|
|
@HasPermission(Permission.ImageAdmin) isImageAdmin: boolean,
|
|
): Promise<ImageListResponse> {
|
|
if (!isImageAdmin) {
|
|
body.user_id = userid;
|
|
}
|
|
|
|
const found = ThrowIfFailed(
|
|
await this.imagesService.findMany(body.count, body.page, body.user_id),
|
|
);
|
|
|
|
return found;
|
|
}
|
|
|
|
@Post('delete')
|
|
@RequiredPermissions(Permission.ImageManage)
|
|
@Returns(ImageDeleteResponse)
|
|
async deleteImage(
|
|
@Body() body: ImageDeleteRequest,
|
|
@ReqUserID() userid: string,
|
|
@HasPermission(Permission.ImageAdmin) isImageAdmin: boolean,
|
|
): Promise<ImageDeleteResponse> {
|
|
const deletedImages = ThrowIfFailed(
|
|
await this.imagesService.deleteMany(
|
|
body.ids,
|
|
isImageAdmin ? undefined : userid,
|
|
),
|
|
);
|
|
|
|
return {
|
|
images: deletedImages,
|
|
};
|
|
}
|
|
}
|