134 lines
3.6 KiB
TypeScript
134 lines
3.6 KiB
TypeScript
|
|
import {
|
|
Controller,
|
|
Get,
|
|
Post,
|
|
Body,
|
|
Param,
|
|
Put,
|
|
UseInterceptors,
|
|
UploadedFile,
|
|
ParseIntPipe,
|
|
UseGuards,
|
|
BadRequestException,
|
|
} from '@nestjs/common';
|
|
import { FileInterceptor } from '@nestjs/platform-express';
|
|
import { AdminService } from './admin.service';
|
|
import { UpdateDocumentDto } from '../dto/update-document.dto';
|
|
import { AdminGuard } from '../auth/admin.guard';
|
|
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
|
|
import { CreateUserDto } from '../dto/create-user.dto';
|
|
import { S3Service } from 'src/s3/s3.service';
|
|
import { PrismaService } from 'src/prisma/prisma.service';
|
|
|
|
@Controller('admin')
|
|
@UseGuards(JwtAuthGuard, AdminGuard)
|
|
export class AdminController {
|
|
constructor(
|
|
private readonly adminService: AdminService,
|
|
private readonly s3Service: S3Service,
|
|
private readonly prisma: PrismaService,
|
|
) {}
|
|
|
|
@Get('documents')
|
|
getAllDocuments() {
|
|
return this.adminService.getAllDocuments();
|
|
}
|
|
|
|
@Put('documents/:id')
|
|
@UseInterceptors(FileInterceptor('file'))
|
|
updateDocument(
|
|
@Param('id', ParseIntPipe) id: number,
|
|
@Body() updateDocumentDto: UpdateDocumentDto,
|
|
@UploadedFile() file?: Express.Multer.File,
|
|
) {
|
|
return this.adminService.updateDocument(id, updateDocumentDto, file);
|
|
}
|
|
|
|
@Post('documents')
|
|
@UseInterceptors(FileInterceptor('file'))
|
|
async uploadDocument(
|
|
@UploadedFile() file: Express.Multer.File,
|
|
@Body('title') title: string,
|
|
@Body('sharedWithId') sharedWithId: string, // Accept as string first
|
|
@Body('uploadedById') uploadedById: string // Accept as string first
|
|
) {
|
|
if (!sharedWithId || !uploadedById) {
|
|
throw new BadRequestException('sharedWithId and uploadedById are required');
|
|
}
|
|
|
|
// Parse the string values to numbers
|
|
const parsedSharedWithId = parseInt(sharedWithId, 10);
|
|
const parsedUploadedById = parseInt(uploadedById, 10);
|
|
|
|
// Validate that the parsing was successful
|
|
if (isNaN(parsedSharedWithId) || isNaN(parsedUploadedById)) {
|
|
throw new BadRequestException('sharedWithId and uploadedById must be valid numbers');
|
|
}
|
|
|
|
const document = await this.adminService.uploadDocument(
|
|
file,
|
|
title,
|
|
parsedSharedWithId,
|
|
parsedUploadedById
|
|
);
|
|
return document;
|
|
}
|
|
|
|
@Get('users')
|
|
getAllUsers() {
|
|
return this.adminService.getAllUsers();
|
|
}
|
|
|
|
// @Post('test-document')
|
|
// async testDocumentCreation() {
|
|
// try {
|
|
// const document = await this.prisma.document.create({
|
|
// data: {
|
|
// title: 'Test Document',
|
|
// s3Key: 'test-key',
|
|
// status: 'completed',
|
|
// sharedWith: {
|
|
// connect: { id: 2 } // ID of 'pero' user
|
|
// }
|
|
// },
|
|
// });
|
|
// return document;
|
|
// } catch (error) {
|
|
// console.error('Test document creation error:', error);
|
|
// throw error;
|
|
// }
|
|
// }
|
|
|
|
@Post('users')
|
|
async createUser(@Body() createUserDto: CreateUserDto) {
|
|
return this.adminService.createUser(createUserDto);
|
|
}
|
|
|
|
@Post('documents/:id/share')
|
|
async shareDocument(
|
|
@Param('id') id: string,
|
|
@Body() { userId }: { userId: number },
|
|
) {
|
|
return this.adminService.shareDocument(+id, userId);
|
|
}
|
|
|
|
@Put('documents/:id/status')
|
|
async updateDocumentStatus(
|
|
@Param('id') id: string,
|
|
@Body() { status }: { status: string },
|
|
) {
|
|
return this.adminService.updateDocumentStatus(+id, status);
|
|
}
|
|
|
|
|
|
// @Get('test-s3-connection')
|
|
// async testS3Connection() {
|
|
// const isConnected = await this.s3Service.testConnection();
|
|
// if (isConnected) {
|
|
// return { message: 'Successfully connected to S3' };
|
|
// } else {
|
|
// return { message: 'Failed to connect to S3' };
|
|
// }
|
|
// }
|
|
} |