Skip to content

itmo-webdev/lab2_Edemskiy_D_E

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

News CRUD API

CRUD API на основе FastAPI для управления пользователями, новостями и комментариями.

Возможности:

  1. Управление пользователями с проверкой email
  2. Создание новостей только проверенными авторами
  3. Система комментариев к новостям
  4. База данных PostgreSQL
  5. Миграции Alembic

УСТАНОВКА И НАСТРОЙКА

Клонируйте репозиторий: git clone https://github.com/itmo-webdev/Edemskij_news_api.git cd Edemskij_news_api

Создайте виртуальное окружение: python -m venv venv, source venv/bin/activate # На Windows: venv\Scripts\activate

Установите зависимости: pip install -r requirements.txt

Настройте базу данных PostgreSQL и обновите строку подключения в app/database/session.py: SQLALCHEMY_DATABASE_URL = "postgresql://username:password@localhost/dbname"

Применение ВСЕХ миграций: alembic upgrade head

001_create_tables.py - создание таблиц 002_add_mock_data.py - добавление тестовых данных

Миграция для создания таблиц: alembic revision -m "Create tables" Миграция с тестовыми данными: alembic revision -m "Add mock data"

Запустите сервер: uvicorn app.main:app --reload


API Эндпоинты:

Пользователи POST /users/ - Создать пользователя GET /users/ - Получить всех пользователей GET /users/{id} - Получить пользователя по ID PUT /users/{id} - Обновить пользователя DELETE /users/{id} - Удалить пользователя

Новости POST /news/ - Создать новость (только для проверенных авторов) GET /news/ - Получить все новости GET /news/{id} - Получить новость по ID PUT /news/{id} - Обновить новость DELETE /news/{id} - Удалить новость (вместе с комментариями)

Комментарии POST /comments/ - Создать комментарий GET /comments/ - Получить все комментарии GET /comments/{id} - Получить комментарий по ID PUT /comments/{id} - Обновить комментарий DELETE /comments/{id} - Удалить комментарий

Примеры использования Создание пользователя

curl -X POST "http://localhost:8000/users/"
-H "Content-Type: application/json"
-d '{ "name": "Иван Иванов", "email": "ivan@example.com", "is_verified_author": true, "avatar": "https://example.com/avatar.jpg" }'

Создание новости (проверенный автор)

curl -X POST "http://localhost:8000/news/?author_id=1"
-H "Content-Type: application/json"
-d '{ "title": "Важная новость", "content": {"text": "Содержание новости", "images": []}, "cover_image": "https://example.com/cover.jpg" }'

Создание комментария

curl -X POST "http://localhost:8000/comments/"
-H "Content-Type: application/json"
-d '{ "text": "Отличная новость!", "news_id": 1, "author_id": 2 }'


СЦЕНАРИЙ ИСПОЛЬЗОВАНИЯ

Запустите сервис локально: uvicorn app.main:app --reload

Создайте пользователей:

Создадим автора

curl -X POST "http://localhost:8000/users/"
-H "Content-Type: application/json"
-d '{"name": "Автор Новостей", "email": "author@example.com", "is_verified_author": true}'

Создаем второго пользователя (комментатор)

curl -X POST "http://localhost:8000/users/"
-H "Content-Type: application/json"
-d '{"name": "Читатель", "email": "reader@example.com", "is_verified_author": false}'

Создайте новость от имени автора curl -X POST "http://localhost:8000/news/?author_id=1"
-H "Content-Type: application/json"
-d '{ "title": "Моя первая новость", "content": {"text": "Это содержание моей первой новости", "format": "markdown"}, "cover_image": "https://example.com/cover.jpg" }'

Создайте комментарий от другого пользователя curl -X POST "http://localhost:8000/comments/"
-H "Content-Type: application/json"
-d '{ "text": "Интересная новость, спасибо!", "news_id": 1, "author_id": 2 }'

Измените новость curl -X PUT "http://localhost:8000/news/1"
-H "Content-Type: application/json"
-d '{ "title": "Обновленная новость", "content": {"text": "Обновленное содержание новости", "format": "markdown"} }'

Измените комментарий curl -X PUT "http://localhost:8000/comments/1"
-H "Content-Type: application/json"
-d '{ "text": "Обновленный комментарий: Очень интересная новость!" }'

Удалите новость вместе с комментариями curl -X DELETE "http://localhost:8000/news/1"


СХЕМА БД:

-Пользователи (Users): ---id - идентификатор ---name - имя ---email - email (уникальный) ---registration_date - дата регистрации ---is_verified_author - верифицирован ли как автор ---avatar - аватарка

-Новости (News) ---id - идентификатор ---title - заголовок ---content - содержание (в формате JSON) ---publication_date - дата публикации ---author_id - ID автора (внешний ключ) ---cover_image - обложка

-Комментарии (Comments) ---id - идентификатор ---text - текст комментария ---publication_date - дата публикации ---news_id - ID новости (внешний ключ) ---author_id - ID автора комментария (внешний ключ)

-Архитектура ---MVC паттерн с использованием FastAPI ---SQLAlchemy ORM для операций с базой данных ---Pydantic для валидации данных ---Внедрение зависимостей для сессий базы данных ---Alembic для управления миграциями


ОСОБЕННОСТИ РЕАЛИЗАЦИИ

1.Проверка авторов Только пользователи с is_verified_author = true могут создавать новости. Это проверяется через dependency get_verified_author.

2.Каскадное удаление При удалении новости автоматически удаляются все связанные комментарии благодаря настройкам каскадного удаления в SQLAlchemy.

3.Поддержка JSON Поле content в новостях поддерживает JSON формат, что позволяет хранить структурированные данные.

4.Миграции Проект включает миграции Alembic для: -создания таблиц пользователей, новостей и комментариев -добавления моковых данных для тестирования -управления изменениями схемы базы данных

Для создания новой миграции: alembic revision --autogenerate -m "Описание изменений"

Для применения миграций: alembic upgrade head


Тестирование API можно тестировать с помощью:

curl (примеры выше)

Postman

Swagger UI (доступно по адресу http://localhost:8000/docs)

Redoc (доступно по адресу http://localhost:8000/redoc)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors