{"openapi":"3.0.0","paths":{"/":{"get":{"operationId":"AppController_getHello","parameters":[],"responses":{"200":{"description":""}},"tags":["App"]}},"/profile":{"get":{"operationId":"AppController_getProfile","parameters":[],"responses":{"200":{"description":""}},"tags":["App"]}},"/auth/register":{"post":{"description":"Создаёт нового пользователя и возвращает JWT токен","operationId":"AuthController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDto"}}}},"responses":{"201":{"description":"Пользователь успешно зарегистрирован","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponseDto"}}}},"400":{"description":"Некорректные данные или пользователь уже существует"}},"summary":"Регистрация нового пользователя","tags":["Аутентификация"]}},"/auth/login":{"post":{"description":"Аутентифицирует пользователя и возвращает JWT токен","operationId":"AuthController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"200":{"description":"Пользователь успешно авторизован","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponseDto"}}}},"401":{"description":"Неверный email или пароль"}},"summary":"Авторизация пользователя","tags":["Аутентификация"]}},"/auth/me":{"get":{"description":"Возвращает информацию о текущем авторизованном пользователе","operationId":"AuthController_getProfile","parameters":[],"responses":{"200":{"description":"Информация о пользователе","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponseDto"}}}},"401":{"description":"Не авторизован"}},"security":[{"JWT-auth":[]}],"summary":"Получение профиля текущего пользователя","tags":["Аутентификация"]}},"/projects":{"post":{"description":"Создаёт новый проект для текущего пользователя","operationId":"ProjectController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectDto"}}}},"responses":{"201":{"description":"Проект успешно создан","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponseDto"}}}},"400":{"description":"Некорректные данные"},"401":{"description":"Не авторизован"}},"security":[{"JWT-auth":[]}],"summary":"Создать новый проект","tags":["Проекты"]},"get":{"description":"Возвращает все проекты текущего пользователя","operationId":"ProjectController_findAll","parameters":[],"responses":{"200":{"description":"Список проектов","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectResponseDto"}}}}},"401":{"description":"Не авторизован"}},"security":[{"JWT-auth":[]}],"summary":"Получить все проекты","tags":["Проекты"]}},"/projects/{id}":{"get":{"description":"Возвращает информацию о конкретном проекте","operationId":"ProjectController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID проекта","schema":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}}],"responses":{"200":{"description":"Информация о проекте","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponseDto"}}}},"401":{"description":"Не авторизован"},"404":{"description":"Проект не найден"}},"security":[{"JWT-auth":[]}],"summary":"Получить проект по ID","tags":["Проекты"]},"patch":{"description":"Обновляет информацию о проекте","operationId":"ProjectController_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID проекта","schema":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectDto"}}}},"responses":{"200":{"description":"Проект успешно обновлён","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponseDto"}}}},"400":{"description":"Некорректные данные"},"401":{"description":"Не авторизован"},"404":{"description":"Проект не найден"}},"security":[{"JWT-auth":[]}],"summary":"Обновить проект","tags":["Проекты"]},"delete":{"description":"Удаляет проект и все связанные данные","operationId":"ProjectController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID проекта","schema":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}}],"responses":{"204":{"description":"Проект успешно удалён"},"401":{"description":"Не авторизован"},"404":{"description":"Проект не найден"}},"security":[{"JWT-auth":[]}],"summary":"Удалить проект","tags":["Проекты"]}}},"info":{"title":"CDN API","description":"API документация для CDN сервиса","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"JWT-auth":{"scheme":"bearer","bearerFormat":"JWT","type":"http","name":"JWT","description":"Введите JWT токен","in":"header"}},"schemas":{"RegisterDto":{"type":"object","properties":{"email":{"type":"string","description":"Email пользователя","example":"user@example.com"},"password":{"type":"string","description":"Пароль пользователя (минимум 8 символов)","example":"SecurePassword123","minLength":8},"firstName":{"type":"string","description":"Имя пользователя","example":"Иван"},"lastName":{"type":"string","description":"Фамилия пользователя","example":"Иванов"}},"required":["email","password"]},"UserData":{"type":"object","properties":{"id":{"type":"string","description":"ID пользователя","example":"123e4567-e89b-12d3-a456-426614174000"},"email":{"type":"string","description":"Email пользователя","example":"user@example.com"},"firstName":{"type":"string","description":"Имя пользователя","example":"Иван"},"lastName":{"type":"string","description":"Фамилия пользователя","example":"Иванов"},"isEmailVerified":{"type":"boolean","description":"Подтверждён ли email","example":false},"createdAt":{"format":"date-time","type":"string","description":"Дата создания аккаунта","example":"2025-10-19T10:00:00.000Z"}},"required":["id","email","isEmailVerified","createdAt"]},"AuthResponseDto":{"type":"object","properties":{"access_token":{"type":"string","description":"JWT токен для авторизации","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"user":{"description":"Данные пользователя","allOf":[{"$ref":"#/components/schemas/UserData"}]}},"required":["access_token","user"]},"LoginDto":{"type":"object","properties":{"email":{"type":"string","description":"Email пользователя","example":"user@example.com"},"password":{"type":"string","description":"Пароль пользователя","example":"SecurePassword123"}},"required":["email","password"]},"UserResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"ID пользователя","example":"123e4567-e89b-12d3-a456-426614174000"},"email":{"type":"string","description":"Email пользователя","example":"user@example.com"},"firstName":{"type":"string","description":"Имя пользователя","example":"Иван"},"lastName":{"type":"string","description":"Фамилия пользователя","example":"Иванов"},"isEmailVerified":{"type":"boolean","description":"Подтверждён ли email","example":false},"createdAt":{"format":"date-time","type":"string","description":"Дата создания аккаунта","example":"2025-10-19T10:00:00.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"Дата последнего обновления","example":"2025-10-19T10:00:00.000Z"}},"required":["id","email","isEmailVerified","createdAt","updatedAt"]},"CreateProjectDto":{"type":"object","properties":{"name":{"type":"string","description":"Название проекта","example":"Мой CDN проект","maxLength":255},"slug":{"type":"string","description":"Уникальный slug проекта (только латиница, цифры и дефис). Если не указан, генерируется автоматически","example":"my-cdn-project","maxLength":255},"description":{"type":"string","description":"Описание проекта","example":"Проект для хранения статических файлов"},"s3Endpoint":{"type":"string","description":"S3 endpoint URL","example":"https://s3.amazonaws.com"},"s3Bucket":{"type":"string","description":"Название S3 bucket","example":"my-cdn-bucket"},"s3Region":{"type":"string","description":"Регион S3","example":"us-east-1"},"s3AccessKey":{"type":"string","description":"S3 Access Key","example":"AKIAIOSFODNN7EXAMPLE"},"s3SecretKey":{"type":"string","description":"S3 Secret Key","example":"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}},"required":["name"]},"ProjectResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"ID проекта","example":"123e4567-e89b-12d3-a456-426614174000"},"name":{"type":"string","description":"Название проекта","example":"Мой CDN проект"},"slug":{"type":"string","description":"Уникальный slug проекта","example":"my-cdn-project"},"description":{"type":"string","description":"Описание проекта","example":"Проект для хранения файлов"},"userId":{"type":"string","description":"ID владельца проекта","example":"123e4567-e89b-12d3-a456-426614174000"},"s3Endpoint":{"type":"string","description":"S3 endpoint URL","example":"https://s3.amazonaws.com"},"s3Bucket":{"type":"string","description":"Название S3 bucket","example":"my-cdn-bucket"},"s3Region":{"type":"string","description":"Регион S3","example":"us-east-1"},"s3AccessKey":{"type":"string","description":"S3 Access Key","example":"AKIAIOSFODNN7EXAMPLE"},"s3SecretKey":{"type":"string","description":"S3 Secret Key (чувствительные данные)","example":"***hidden***"},"isActive":{"type":"boolean","description":"Активен ли проект","example":true},"createdAt":{"format":"date-time","type":"string","description":"Дата создания","example":"2025-10-19T10:00:00.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"Дата последнего обновления","example":"2025-10-19T10:00:00.000Z"}},"required":["id","name","slug","userId","isActive","createdAt","updatedAt"]},"UpdateProjectDto":{"type":"object","properties":{"name":{"type":"string","description":"Название проекта","example":"Обновленное название","maxLength":255},"description":{"type":"string","description":"Описание проекта","example":"Обновленное описание"},"s3Endpoint":{"type":"string","description":"S3 endpoint URL","example":"https://s3.amazonaws.com"},"s3Bucket":{"type":"string","description":"Название S3 bucket","example":"my-cdn-bucket"},"s3Region":{"type":"string","description":"Регион S3","example":"us-east-1"},"s3AccessKey":{"type":"string","description":"S3 Access Key","example":"AKIAIOSFODNN7EXAMPLE"},"s3SecretKey":{"type":"string","description":"S3 Secret Key","example":"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"},"isActive":{"type":"boolean","description":"Активен ли проект","example":true}}}}}}