Inject
TSXinject
1import {
2 ContainerRegistryManager,
3 FileService,
4 Inject,
5 Service,
6} from "@quan-erp/shared-backend-core";
7
8@Service()
9export class MyPluginService {
10 @Inject(FileService, ContainerRegistryManager.BUILTIN_PLUGIN)
11 private fileService: FileService;
12}addFile(options)
Moves a temp upload into storage (local folder or S3) and inserts a FileEntity row. Returns the saved FileEntity (including generated filename).
- tempFilePath: string — path from multer / temp upload
- originalName: string — original client filename (used for extension)
- mimeType: string
- metadata: Record<string, any>
- creatorId: number — uploading user id
- type: FileStorageType — local or S3
- fileAccess: FileAccess — access policy
- accessRole: number[] — roles allowed when access is role-gated
- compression?: number — optional compression hint
TSXaddFile
1import {
2 ContainerRegistryManager,
3 FileAccess,
4 FileService,
5 FileStorageType,
6 Inject,
7 Service,
8} from "@quan-erp/shared-backend-core";
9
10@Service()
11export class AttachmentService {
12 @Inject(FileService, ContainerRegistryManager.BUILTIN_PLUGIN)
13 private fileService: FileService;
14
15 async storeUpload(tempPath: string, userId: number) {
16 return this.fileService.addFile({
17 tempFilePath: tempPath,
18 originalName: "invoice.pdf",
19 mimeType: "application/pdf",
20 metadata: { source: "invoice-upload" },
21 creatorId: userId,
22 type: FileStorageType.LOCAL,
23 fileAccess: FileAccess.PRIVATE,
24 accessRole: [],
25 });
26 }
27}Other methods
- findFile(filename: string): Promise<FileEntity | null> — metadata by stored filename
- getFiles(skip: number, limit: number) — paginated file list
- deleteFile(id: number) — remove storage object and DB row
- generatePreSignedUrl(file: string, expiresInSeconds: number, mimeType: string): Promise<string> — temporary download URL (S3 / signed access)
TSXdownload
1import {
2 ContainerRegistryManager,
3 FileService,
4 Inject,
5 Service,
6} from "@quan-erp/shared-backend-core";
7
8@Service()
9export class FileLinkService {
10 @Inject(FileService, ContainerRegistryManager.BUILTIN_PLUGIN)
11 private fileService: FileService;
12
13 async temporaryLink(filename: string, mimeType: string) {
14 return this.fileService.generatePreSignedUrl(
15 filename,
16 60 * 15,
17 mimeType
18 );
19 }
20}