Add per-user activity logs with storage backend tracking, gallery storage filter, and IP/token upload rate limiting. Fix storage delete modal flash, pin local backend in filter order, and link settings version to GitHub releases.
82 lines
1.5 KiB
TypeScript
82 lines
1.5 KiB
TypeScript
export type ErrorCode
|
|
= | 'UNAUTHORIZED'
|
|
| 'FORBIDDEN'
|
|
| 'CONFLICT'
|
|
| 'INVALID_REQUEST'
|
|
| 'TOO_MANY_FILES'
|
|
| 'FILE_TOO_LARGE'
|
|
| 'UNSUPPORTED_FILE_TYPE'
|
|
| 'INVALID_FILE_SIGNATURE'
|
|
| 'INVALID_IMAGE_KEY'
|
|
| 'IMAGE_NOT_FOUND'
|
|
| 'UPLOAD_FAILED'
|
|
| 'DELETE_FAILED'
|
|
|
|
export interface ApiError {
|
|
code: ErrorCode
|
|
message: string
|
|
}
|
|
|
|
export interface ApiErrorResponse {
|
|
success: false
|
|
error: ApiError
|
|
}
|
|
|
|
export interface ImageItem {
|
|
key: string
|
|
url: string
|
|
originalName: string
|
|
contentType: string
|
|
size: number
|
|
uploadedAt: string
|
|
markdown: string
|
|
html: string
|
|
/** 管理员列表可见:上传者信息 */
|
|
owner?: {
|
|
userId: number | null
|
|
username: string
|
|
}
|
|
/** 图片所在存储后端(统计/管理列表) */
|
|
storage?: {
|
|
id: string
|
|
name: string
|
|
type: 'local' | 's3'
|
|
}
|
|
}
|
|
|
|
export interface UploadErrorItem {
|
|
name: string
|
|
error: ApiError
|
|
}
|
|
|
|
export interface UploadResponse {
|
|
success: boolean
|
|
items: ImageItem[]
|
|
errors: UploadErrorItem[]
|
|
}
|
|
|
|
export interface ImageListResponse {
|
|
items: ImageItem[]
|
|
total: number
|
|
page: number
|
|
pageSize: number
|
|
totalPages: number
|
|
}
|
|
|
|
export interface DeleteResponse {
|
|
success: boolean
|
|
}
|
|
|
|
export interface BatchDeleteResponse {
|
|
success: boolean
|
|
deleted: string[]
|
|
failed: Array<{ key: string, error: ApiError }>
|
|
}
|
|
|
|
export interface UploadProgressItem {
|
|
name: string
|
|
status: 'pending' | 'uploading' | 'success' | 'error'
|
|
progress: number
|
|
error?: string
|
|
}
|