1)Склонировать репозиторий
2)Отредактировать файл docker-compose.yml
-Изменить переменные:
1)Если нужно, то поменять все, что связано с бд DATABASE_URL, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB
2)Если нужно, то поменять JWT_SECRET, который шифрует токен куки
-Если нужно, то поменять порты
-Ecли нужно, то поменять или добавить пароль стартового юзера (подробее в п5)
3)Cоздать и запустить образ docker image командой: docker-compose up --build
4)После старта всех контейнеров можно переходить на localhost
5)При создании проекта для удобства сразу будет доступен пользователь,
email - [email protected] и password - задается в файле src/core/settings.py или же в переменной окружения (Поумолчанию admin)
6)Так как я писал api на fastapi, то он сразу предоставляет документацию по адресу http://localhost:8000/docs
Сначала хочу рассказать, в чем отличие моего api от нужного тестого:
-Убрал login, и заменил аунтефикацию на email (Немного пожалел, потому что после изменения данных приходиться релогиниться)
-Добавил создание и удаление сity, потому что никак нельзя было расширять или редактировать города
-Убрал pk в запросе patch /user/, потому что смысла в нем нет, тк user может менять лишь свои данные, следовательно pk - бесполезен
1)auth
-login:
-Делал, как было в тестовом задании, логин через cookies, хотя можно было бы через JWT.
По факту, я в куки и клал JWT, дальше каждый запрос расшифровывал его
-Отличие от тестого задания, аунтефикация по email и password
-logout:
-Просто удаляет cookies и возвращает пользователя
2)user
"Имеет доступ на уровне пользователя"
Перед каждым запросом проверяет на аунтефицированного пользователя
-users/current:
-Возвращает информацию о текущем пользователе, берет email из куки и уже в бд ищет всю информацию о пользователе
-users (get):
-Получает краткую информацию о всех пользователях (в отличии от admin, тут не возвращаются city)
-page - неотрицательный, size - от 1 и до 10
-users (patch):
-Отличие от тестого задания в том, что я не использую pk, тк у пользователя есть куки, и в них храниться информация о самом пользователе, тот pk - не нужен
-Так как, email хранится в cookies, и его могут поменять, то приходиться удалять куки, чтобы не было ошибок
3)admin
"Имеет максимальную привелегию и доступ"
Перед каждым запросом проверяет на is_admin
-private/users/ (get):
-Возвращает краткую информацию о всех пользователях (в отличии от user, возвращает city)
-page - только положительный, size - от 1 и до 10
-private/users/ (create):
-Если хотите привязать к user город, то сначала нужно создать данный город
-Добавление пользователя, проверки на города и на повторение email
-private/user/{pk} (get):
-Получает полную информацию о текущем пользователе, в том числе и city, и additional_info
-private/users/{pk} (delete):
-Удаляет выбранного пользователя, если нет, то 404 error
-private/users/{pk} (patch):
-Обновление информации выбранного пользователя
-private/city/{pk} (post):
-Добавление нового города, если город уже создан, то 400 error
-private/city/{pk} (delete):
-Удаление выбранного города, если город привязан к какому-то пользователю, то удаление не произойдет
code: 1
message: email alredy taken
Описание: ошибка возникает при регистрации пользователя, если email уже существует в бд
code: 2
message: city alredy have
Описание: ошибка возникает при добавление ногового города, если уже он создан
code: 3
message: You can't delete a city! There is a user who is join with it
Описание: Нельзя удалять город, если он привязан к какому-то пользователю
code: 4
message: city not found
Описание: возникает при добавлении пользователю несуществующего города