feat: create application DTOs

Add data-transfer-object interfaces for the application layer:
upload, file, bucket, S3, and auth domains.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude
2026-07-28 17:56:49 +07:00
parent ee3167fbfb
commit 5e29589f1a
5 changed files with 294 additions and 0 deletions
+87
View File
@@ -0,0 +1,87 @@
/**
* A single S3 object as it appears in listing results.
*/
export interface S3ObjectResponse {
/** The object key (full path within the bucket) */
key: string;
/** Stored file name (basename of the key) */
fileName: string;
/** MIME type of the stored object */
mimeType: string;
/** Object size in bytes */
sizeBytes: number;
/** High-level file category */
fileType: string;
/** SHA-256 hex digest of the object content */
etag: string | null;
/** ISO-8601 timestamp of last modification */
lastModified: string;
/** Public download URL */
downloadUrl: string;
}
/**
* Response payload for S3 ListObjectsV1 / ListObjectsV2.
*/
export interface S3ListObjectsResponse {
/** Array of object summaries */
objects: S3ObjectResponse[];
/** Common prefixes when a delimiter was used (e.g. "folder/" entries) */
prefixes: string[];
/** Whether more results are available */
isTruncated: boolean;
/** Token to pass as continuation-token to retrieve the next page */
nextContinuationToken: string | null;
}
/**
* Input for the copy-object operation (Web API v1).
*/
export interface S3CopyObjectInput {
/** Source object key within the same or source bucket */
sourceKey: string;
/** Destination bucket name; defaults to the source bucket when omitted */
destBucket?: string;
/** Destination object key */
destKey: string;
}
/**
* Response payload for the copy-object operation.
*/
export interface S3CopyObjectResponse {
/** Source object key that was copied */
sourceKey: string;
/** Destination object key */
destKey: string;
/** Destination bucket name */
destBucket: string;
}
/**
* Summary of a multipart upload in listing results.
*/
export interface S3MultipartUploadResponse {
/** The object key being uploaded */
key: string;
/** Upload identifier (nanoid) */
uploadId: string;
/** ISO-8601 timestamp when the upload was initiated */
initiatedAt: Date;
/** Identifier string of the upload initiator */
initiatedBy: string;
}
/**
* Summary of a single part within a multipart upload.
*/
export interface S3MultipartPartResponse {
/** 1-indexed part number */
partNumber: number;
/** ETag of the part content */
etag: string;
/** Part size in bytes */
sizeBytes: number;
/** ISO-8601 timestamp when the part was stored */
createdAt: Date;
}