81 lines
3.2 KiB
TypeScript
81 lines
3.2 KiB
TypeScript
import { Module } from "@nestjs/common";
|
|
import * as multerS3 from 'multer-s3';
|
|
import { S3_CLIENT, S3Module } from "../S3/S3.module";
|
|
import { DeleteAttachment } from "./DeleteAttachment";
|
|
import { GetAttachment } from "./GetAttachment";
|
|
import { getAttachmentPresignedUrl } from "./GetAttachmentPresignedUrl";
|
|
import { LinkAttachment } from "./LinkAttachment";
|
|
import { UnlinkAttachment } from "./UnlinkAttachment";
|
|
import { ValidateAttachments } from "./ValidateAttachments";
|
|
import { AttachmentsOnBillPayments } from "./events/AttachmentsOnPaymentsMade";
|
|
import { AttachmentsOnBills } from "./events/AttachmentsOnBills";
|
|
import { AttachmentsOnCreditNote } from "./events/AttachmentsOnCreditNote";
|
|
import { AttachmentsOnExpenses } from "./events/AttachmentsOnExpenses";
|
|
import { AttachmentsOnPaymentsReceived } from "./events/AttachmentsOnPaymentsReceived";
|
|
import { AttachmentsOnManualJournals } from "./events/AttachmentsOnManualJournals";
|
|
import { AttachmentsOnVendorCredits } from "./events/AttachmentsOnVendorCredits";
|
|
import { AttachmentsOnSaleInvoiceCreated } from "./events/AttachmentsOnSaleInvoice";
|
|
import { AttachmentsController } from "./Attachments.controller";
|
|
import { RegisterTenancyModel } from "../Tenancy/TenancyModels/Tenancy.module";
|
|
import { DocumentModel } from "./models/Document.model";
|
|
import { DocumentLinkModel } from "./models/DocumentLink.model";
|
|
import { AttachmentsApplication } from "./AttachmentsApplication";
|
|
import { UploadDocument } from "./UploadDocument";
|
|
import { AttachmentUploadPipeline } from "./S3UploadPipeline";
|
|
import { MULTER_MODULE_OPTIONS } from "@/common/constants/files.constants";
|
|
import { ConfigService } from "@nestjs/config";
|
|
import { S3Client } from "@aws-sdk/client-s3";
|
|
|
|
const models = [
|
|
RegisterTenancyModel(DocumentModel),
|
|
RegisterTenancyModel(DocumentLinkModel),
|
|
];
|
|
|
|
@Module({
|
|
imports: [S3Module, ...models],
|
|
exports: [...models],
|
|
controllers: [AttachmentsController],
|
|
providers: [
|
|
DeleteAttachment,
|
|
GetAttachment,
|
|
getAttachmentPresignedUrl,
|
|
LinkAttachment,
|
|
UnlinkAttachment,
|
|
ValidateAttachments,
|
|
AttachmentsOnBillPayments,
|
|
AttachmentsOnBills,
|
|
AttachmentsOnCreditNote,
|
|
AttachmentsOnExpenses,
|
|
AttachmentsOnPaymentsReceived,
|
|
AttachmentsOnManualJournals,
|
|
AttachmentsOnVendorCredits,
|
|
AttachmentsOnSaleInvoiceCreated,
|
|
AttachmentsApplication,
|
|
UploadDocument,
|
|
AttachmentUploadPipeline,
|
|
{
|
|
provide: MULTER_MODULE_OPTIONS,
|
|
inject: [ConfigService, S3_CLIENT],
|
|
useFactory: (configService: ConfigService, s3: S3Client) => ({
|
|
storage: multerS3({
|
|
s3,
|
|
bucket: configService.get('s3.bucket'),
|
|
contentType: multerS3.AUTO_CONTENT_TYPE,
|
|
metadata: function (req, file, cb) {
|
|
cb(null, { fieldName: file.fieldname });
|
|
},
|
|
key: function (req, file, cb) {
|
|
cb(null, Date.now().toString());
|
|
},
|
|
acl: function(req, file, cb) {
|
|
// Conditionally set file to public or private based on isPublic flag
|
|
const aclValue = true ? 'public-read' : 'private';
|
|
// Set ACL based on the isPublic flag
|
|
cb(null, aclValue);
|
|
}
|
|
}),
|
|
})
|
|
}
|
|
]
|
|
})
|
|
export class AttachmentsModule {} |