| import { InstanceDto } from '@api/dto/instance.dto'; |
| import { MediaDto } from '@api/integrations/storage/s3/dto/media.dto'; |
| import { getObjectUrl } from '@api/integrations/storage/s3/libs/minio.server'; |
| import { PrismaRepository } from '@api/repository/repository.service'; |
| import { Logger } from '@config/logger.config'; |
| import { BadRequestException } from '@exceptions'; |
|
|
| export class S3Service { |
| constructor(private readonly prismaRepository: PrismaRepository) {} |
|
|
| private readonly logger = new Logger('S3Service'); |
|
|
| public async getMedia(instance: InstanceDto, query?: MediaDto) { |
| try { |
| const where: any = { |
| instanceId: instance.instanceId, |
| ...query, |
| }; |
|
|
| const media = await this.prismaRepository.media.findMany({ |
| where, |
| select: { |
| id: true, |
| fileName: true, |
| type: true, |
| mimetype: true, |
| createdAt: true, |
| Message: true, |
| }, |
| }); |
|
|
| if (!media || media.length === 0) { |
| throw 'Media not found'; |
| } |
|
|
| return media; |
| } catch (error) { |
| throw new BadRequestException(error); |
| } |
| } |
|
|
| public async getMediaUrl(instance: InstanceDto, data: MediaDto) { |
| const media = (await this.getMedia(instance, { id: data.id }))[0]; |
| const mediaUrl = await getObjectUrl(media.fileName, data.expiry); |
| return { |
| mediaUrl, |
| ...media, |
| }; |
| } |
| } |
|
|