Сервис объявлений на FastAPI.
REST API для размещения объявлений о купле/продаже с аутентификацией и разграничением прав доступа.
Реализованно в соответствии с заданием.
-
Объявления - CRUD операции с объявлениями (заголовок, описание, цена, автор, дата)
-
Пользователи - регистрация и управление профилями
-
Безопасность - JWT-аутентификация с ролевой моделью (user/admin)
Роль | Доступ |
---|---|
Неавторизованные | Просмотр объявлений, регистрация |
Пользователи | Управление своими объявлениями и профилем |
Администраторы | Полный доступ ко всем операциям |
- run database
docker-compose --env-file .env up db
- run migrations
docker-compose --env-file .env up migrate
- run api
docker-compose --env-file .env up app
- run tests
docker-compose --env-file .env up tests
Документация API: http://localhost:8000/docs
Вам нужно написать на fastapi и докеризировать сервис объявлений купли/продажи.
У объявлений должны быть следующие поля:
- заголовок
- описание
- цена
- автор
- дата создания
Должны быть реализованы следующе методы:
- Создание:
POST /advertisement
- Обновление:
PATCH /advertisement/{advertisement_id}
- Удаление:
DELETE /advertisement/{advertisement_id}
- Получение по id:
GET /advertisement/{advertisement_id}
- Поиск по полям:
GET /advertisement?{query_string}
-
Добавить роут
POST /login
. В теле запроса должен передаваться JSON с именем пользователя и паролем. Роут возвращает токен. В дальнейшем токен будет использоваться для авторизации. Срок действия токена - 48 часов. Если клиент предоставил неверный логин пароль сервис должен выдать ошибку 401. -
Добавить роуты для управления пользователями:
-
GET /user/{user_id?}
-
POST /user
-
PATCH /user/{user_id}
-
DELETE /user/{user_id}
Пользователи должны принадлежать одной из следующих групп: user, admin
- Права неавторизованного пользователя (клиент может токен не передавать):
- Создание пользователя
POST /user
- Получение пользователя по id
GET /user/{user_id}
- Получение объявления по id
GET /advertisement/{advertisement_id}
- Поиск объявления по полям
GET /advertisement?{query_string}
- Права авторизованного пользователя с группой user:
- все права неавторизованного пользователя
- обновление своих данных
PATCH /user/{user_id}
- удаление себя
DELETE /user/{user_id}
- создание объявления
POST /advertisement
- обновление своего объявления
PATCH /advertisement/{advertisement_id}
- удаление своего объявления
DELETE /advertisement/{advertisement_id}
- Права авторизованного пользователя с группой admin:
- любые действия с любыми сущностям
Если у пользователя недостаточно прав для выполнения операции, то возвращается ошибка 403