Files
imk/backend/imk-backend/src/documents/documents.service.ts
T

170 lines
4.1 KiB
TypeScript

// import { Injectable } from '@nestjs/common';
// import { PrismaService } from '../prisma/prisma.service';
// //import { Document } from '@prisma/client';
// @Injectable()
// export class DocumentsService {
// downloadDocument(key: string, id: any) {
// throw new Error('Method not implemented.');
// }
// constructor(private readonly prisma: PrismaService) {}
// async getClientDocuments(clientId: number) {
// // return this.prisma.document.findMany({
// // where: {
// // sharedWithId: clientId,
// // },
// // include: {
// // sharedWith: {
// // select: {
// // id: true,
// // name: true,
// // email: true,
// // },
// // },
// // },
// // });
// return this.prisma.document.findMany({
// where: {
// sharedWithId: clientId,
// },
// orderBy: {
// createdAt: 'desc',
// },
// });
// }
// }
import { Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
import { S3Service } from '../s3/s3.service';
import { Document, User } from '@prisma/client';
@Injectable()
export class DocumentsService {
constructor(
private prisma: PrismaService,
private s3Service: S3Service,
) {}
async findAllByClient(userId: number): Promise<Document[]> {
const documents = await this.prisma.document.findMany({
where: {
sharedWithId: userId,
},
include: {
sharedWith: {
select: {
id: true,
name: true,
email: true,
},
},
},
orderBy: {
createdAt: 'desc',
},
});
return documents;
}
async getClientDocuments(clientId: number) {
// return this.prisma.document.findMany({
// where: {
// sharedWithId: clientId,
// },
// include: {
// sharedWith: {
// select: {
// id: true,
// name: true,
// email: true,
// },
// },
// },
// });
return this.prisma.document.findMany({
where: {
sharedWithId: clientId,
},
orderBy: {
createdAt: 'desc',
},
});
}
async downloadDocument(s3Key: string, userId: number): Promise<any> {
// Verify document exists and user has access
const document = await this.prisma.document.findFirst({
where: {
s3Key: s3Key,
sharedWithId: userId,
},
});
if (!document) {
throw new NotFoundException('Document not found or access denied');
}
try {
// Get document stream from S3
const fileStream = await this.s3Service.getObject(s3Key).createReadStream();
return fileStream;
} catch (error) {
console.error('Error downloading document:', error);
throw new NotFoundException('Document file not found in storage');
}
}
async getAllDocuments(): Promise<Document[]> {
return this.prisma.document.findMany({
include: {
sharedWith: {
select: {
id: true,
name: true,
email: true,
},
},
},
orderBy: {
createdAt: 'desc',
},
});
}
async shareDocument(documentId: number, userId: number): Promise<Document> {
const document = await this.prisma.document.update({
where: { id: documentId },
data: {
sharedWithId: userId,
},
include: {
sharedWith: {
select: {
id: true,
name: true,
email: true,
},
},
},
});
return document;
}
async updateStatus(documentId: number, status: string): Promise<Document> {
return this.prisma.document.update({
where: { id: documentId },
data: { status },
include: {
sharedWith: {
select: {
id: true,
name: true,
email: true,
},
},
},
});
}
}