feat: dedup wave 3 — constant + streamToTemp utility
Deploy FileDrop / deploy (push) Successful in 44s

- ♻️ randomUUID() → nanoid() di s3-object.ts (eliminasi node:crypto)
- ✨ DEFAULT_FILE_TYPE constant, ganti 8× hardcoded 'document'
- ✨ streamToTemp() shared utility (src/shared/utils/temp-stream.ts)
- ♻️ 3× streaming-to-temp pattern di s3-controller, upload-controller,
  web-api-controller → pake streamToTemp()
- Lint ✅ Build ✅
This commit is contained in:
Claude
2026-07-29 16:10:49 +07:00
parent 3501d547c0
commit fab91ad69c
7 changed files with 190 additions and 182 deletions
+9 -5
View File
@@ -1,4 +1,3 @@
import { randomUUID } from 'node:crypto';
import { gzipSync } from 'node:zlib';
import { nanoid } from 'nanoid';
import type { File } from '../../domain/entities/file';
@@ -10,7 +9,12 @@ import type { IFilePartRepository } from '../../domain/ports/file-part-repositor
import type { IFileRepository, S3FileRecord } from '../../domain/ports/file-repository';
import type { IMultipartRepository } from '../../domain/ports/multipart-repository';
import type { ITelegramService, TelegramFileInfo } from '../../domain/ports/telegram-service';
import { computeHash, ensureExtension, formatCreatedAt } from '../../shared/utils/file';
import {
computeHash,
DEFAULT_FILE_TYPE,
ensureExtension,
formatCreatedAt,
} from '../../shared/utils/file';
// ─── Types ──────────────────────────────────────────────────────────
@@ -480,7 +484,7 @@ export function createPutObjectUseCase(deps: S3ObjectDeps) {
throw new Error('Chunked upload produced no parts');
}
const fileId = randomUUID();
const fileId = nanoid();
const publicId = nanoid();
await deps.fileRepo.create(
@@ -493,7 +497,7 @@ export function createPutObjectUseCase(deps: S3ObjectDeps) {
fileName: finalFileName,
mimeType,
sizeBytes: chunkResult.totalSizeBytes,
fileType: 'document',
fileType: DEFAULT_FILE_TYPE,
fileHash: chunkResult.fileHash,
bucketId: bucket.id,
s3Key: key,
@@ -539,7 +543,7 @@ export function createPutObjectUseCase(deps: S3ObjectDeps) {
fileName: finalFileName,
mimeType,
sizeBytes: body.byteLength,
fileType: 'document',
fileType: DEFAULT_FILE_TYPE,
fileHash: hash,
bucketId: bucket.id,
s3Key: key,