feat: Docker部署与CI/CD集成, 搜索栏修复, 上传目录改为data
This commit is contained in:
79
README_DTO.md
Normal file
79
README_DTO.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Data Transfer Objects (DTO)
|
||||
|
||||
## Overview
|
||||
These definitions represent the strict contract between the Frontend (React) and Backend (Next.js API). They mirror the TypeScript interfaces found in `types.ts`.
|
||||
|
||||
## Core Entities
|
||||
|
||||
### 1. User DTO
|
||||
**Type:** `UserDTO`
|
||||
Used in authentication responses and author details.
|
||||
|
||||
| Field | Type | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `id` | `string` (UUID) | Unique identifier |
|
||||
| `username` | `string` | Display name |
|
||||
| `avatarUrl` | `string` | URL to profile image |
|
||||
| `role` | `'USER' \| 'ADMIN' \| 'CREATOR'` | Permission level |
|
||||
| `status` | `'ACTIVE' \| 'BANNED'` | Account standing |
|
||||
|
||||
### 2. Material DTO
|
||||
**Type:** `MaterialDTO`
|
||||
The main resource object.
|
||||
|
||||
| Field | Type | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `id` | `string` (UUID) | Unique identifier |
|
||||
| `title` | `string` | Resource title |
|
||||
| `description` | `string` | Short summary |
|
||||
| `type` | `'CODE' \| 'ASSET_ZIP' \| 'VIDEO'` | Content category |
|
||||
| `contentUrl` | `string?` | S3/CDN Link (Video/Zip) |
|
||||
| `codeSnippet` | `string?` | Raw code string (Code only) |
|
||||
| `language` | `string?` | e.g. 'typescript', 'python' |
|
||||
| `author` | `UserDTO` | Nested author object |
|
||||
| `stats` | `Object` | `{ views: number, downloads: number, favorites: number }` |
|
||||
|
||||
## Request Payloads
|
||||
|
||||
### Create Material Request
|
||||
**POST** `/api/materials`
|
||||
|
||||
```typescript
|
||||
interface CreateMaterialRequest {
|
||||
title: string;
|
||||
description: string;
|
||||
type: 'CODE' | 'ASSET_ZIP' | 'VIDEO';
|
||||
codeSnippet?: string; // Required if type is CODE
|
||||
contentUrl?: string; // Required if type is VIDEO/ASSET
|
||||
tags: string[];
|
||||
}
|
||||
```
|
||||
|
||||
### Update User Profile Request
|
||||
**PATCH** `/api/users/me`
|
||||
|
||||
```typescript
|
||||
interface UpdateProfileRequest {
|
||||
username?: string;
|
||||
avatarUrl?: string;
|
||||
currentPassword?: string; // For security checks
|
||||
newPassword?: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Response Wrappers
|
||||
|
||||
**Generic API Response**
|
||||
All API endpoints return data wrapped in this structure for consistent error handling.
|
||||
|
||||
```typescript
|
||||
interface ApiResponse<T> {
|
||||
success: boolean;
|
||||
data?: T; // Present on success
|
||||
error?: { // Present on failure
|
||||
code: string; // e.g., 'AUTH_FAILED'
|
||||
message: string; // Human readable
|
||||
};
|
||||
timestamp: string; // ISO Date
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user