GithubHelp home page GithubHelp logo

kefir-test's Introduction

Тестовое задание на позицию Python Junior Backend разработчик


Установка:


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
  Описание: возникает при добавлении пользователю несуществующего города

kefir-test's People

Contributors

n3rfy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.