Files
think/packages/server/src/controllers/document.controller.ts
T

256 lines
7.3 KiB
TypeScript

import { OperateUserAuthDto } from '@dtos/auth.dto';
import { CreateDocumentDto } from '@dtos/create-document.dto';
import { ShareDocumentDto } from '@dtos/share-document.dto';
import { UpdateDocumentDto } from '@dtos/update-document.dto';
import { CheckDocumentStatus, DocumentStatusGuard } from '@guard/document-status.guard';
import { JwtGuard } from '@guard/jwt.guard';
import {
Body,
ClassSerializerInterceptor,
Controller,
Delete,
Get,
HttpCode,
HttpStatus,
Param,
Patch,
Post,
Query,
Request,
UseGuards,
UseInterceptors,
} from '@nestjs/common';
import { DocumentService } from '@services/document.service';
import { DocumentApiDefinition, DocumentStatus, IPagination } from '@think/domains';
@Controller('document')
@UseGuards(DocumentStatusGuard)
export class DocumentController {
constructor(private readonly documentService: DocumentService) {}
/**
* 搜索文档
* @param req
* @param keyword
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Get(DocumentApiDefinition.search.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async search(@Request() req, @Param('organizationId') organizationId, @Query('keyword') keyword) {
return await this.documentService.search(req.user, organizationId, keyword);
}
/**
* 获取用户最近访问的文档
* @param req
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Get(DocumentApiDefinition.recent.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async getWorkspaceDocuments(@Request() req, @Param('organizationId') organizationId) {
return await this.documentService.getRecentDocuments(req.user, organizationId);
}
/**
* 新建文档
*/
@UseInterceptors(ClassSerializerInterceptor)
@Post(DocumentApiDefinition.create.server)
@HttpCode(HttpStatus.CREATED)
@UseGuards(JwtGuard)
async createDocument(@Request() req, @Body() dto: CreateDocumentDto) {
return await this.documentService.createDocument(req.user, dto);
}
/**
* 获取文档详情
* @param req
* @param documentId
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Get(DocumentApiDefinition.getDetailById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async getDocumentDetail(@Request() req, @Param('id') documentId) {
return await this.documentService.getDocumentDetail(req.user, documentId);
}
/**
* 更新文档
* @param req
* @param documentId
* @param dto
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Patch(DocumentApiDefinition.updateById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async updateDocument(@Request() req, @Param('id') documentId, @Body() dto: UpdateDocumentDto) {
return await this.documentService.updateDocument(req.user, documentId, dto);
}
/**
* 获取文档版本记录
* @param req
* @param documentId
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Get(DocumentApiDefinition.getVersionById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async getDocumentVersion(@Request() req, @Param('id') documentId) {
return await this.documentService.getDocumentVersion(req.user, documentId);
}
/**
* 导出文档
* @param req
* @param documentId
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Post(DocumentApiDefinition.exportDocx.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async exportDocx(@Body('content') content) {
return await this.documentService.exportDocx(content);
}
/**
* 获取文档成员
* @param req
* @param documentId
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Get(DocumentApiDefinition.getMemberById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async getDocUsers(@Request() req, @Param('id') documentId, @Query() pagination: IPagination) {
return await this.documentService.getDocUsers(req.user, documentId, pagination);
}
/**
* 添加文档成员
* 只有文档创建着才可操作
* @param req
* @param dto
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Post(DocumentApiDefinition.addMemberById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async addDocUser(@Request() req, @Param('id') documentId, @Body() dto: OperateUserAuthDto) {
return await this.documentService.addDocUser(req.user, documentId, dto);
}
/**
* 修改文档成员(一般是权限操作)
* 只有文档创建着才可操作
* @param req
* @param dto
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Patch(DocumentApiDefinition.updateMemberById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async updateDocUser(@Request() req, @Param('id') documentId, @Body() dto: OperateUserAuthDto) {
return await this.documentService.updateDocUser(req.user, documentId, dto);
}
/**
* 删除文档成员
* 只有文档创建着才可操作
* @param req
* @param dto
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Post(DocumentApiDefinition.deleteMemberById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async deleteDocUser(@Request() req, @Param('id') documentId, @Body() dto: OperateUserAuthDto) {
return await this.documentService.deleteDocUser(req.user, documentId, dto);
}
/**
* 获取文档下的子文档
* @param req
* @param data
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Post(DocumentApiDefinition.getChildren.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async getChildrenDocuments(@Request() req, @Body() data) {
return await this.documentService.getChildrenDocuments(req.user, data);
}
/**
* 删除文档
* @param req
* @param documentId
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Delete(DocumentApiDefinition.deleteById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async deleteDocument(@Request() req, @Param('id') documentId) {
return await this.documentService.deleteDocument(req.user, documentId);
}
/**
* 分享(或关闭分享)文档
* @param req
* @param documentId
* @param dto
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Post(DocumentApiDefinition.shareById.server)
@HttpCode(HttpStatus.OK)
@UseGuards(JwtGuard)
async shareDocument(@Request() req, @Param('id') documentId, @Body() dto: ShareDocumentDto) {
return await this.documentService.shareDocument(req.user, documentId, dto);
}
/**
* 获取公开文档详情
* @param req
* @param documentId
* @param dto
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Post(DocumentApiDefinition.getPublicDetailById.server)
@CheckDocumentStatus(DocumentStatus.public)
@HttpCode(HttpStatus.OK)
async getShareDocumentDetail(@Request() req, @Param('id') documentId, @Body() dto: ShareDocumentDto) {
return await this.documentService.getPublicDocumentDetail(documentId, dto);
}
/**
* 获取公开文档的子文档
* @param data
* @returns
*/
@UseInterceptors(ClassSerializerInterceptor)
@Post(DocumentApiDefinition.getPublicChildren.server)
@CheckDocumentStatus(DocumentStatus.public)
@HttpCode(HttpStatus.OK)
async getShareChildrenDocuments(@Body() data) {
return await this.documentService.getShareChildrenDocuments(data);
}
}