Возможности API
### Регистрация и авторизация пользователя
- регистрация пользователя
- авторизация пользователя
- авторизованный пользователь может создавать, изменять и удалять организации
- авторизованный пользователь может записываться на прием к врачу
- авторизованный пользователь может оставлять отзывы
- сброс и задание нового пароля пользователя
### Обработка сведений о медицинских учреждениях
- отдача списка медицинских учреждений
- отдача свойств конкретного учреждения
- сортировка списка учреждений по удаленности от переданных координат
широты и долготы
- фильтрация учреждений по следующим параметрам: специальности врачей,
работающих в организации; город и район расположения организации; является
ли организация государственной или коммерческой; является ли организация
круглосуточной или нет
- отдача специальностей врачей конкретной организации
- отдача расписания работы учреждения
- поиск учреждения по его наименованию
- пагинация списка учреждений
- создание организации
- изменение свойств организации
- удаление организации
### Обработка сведений о специальностях врачей
- отдача списка специальностей врачей в соответствии с Приказом Министерства
образования и науки РФ от 12 сентября 2013 г. N 1061
### Обработка сведений о городах и принадлежащим им административным районам
- отдача списка городов РФ, медицинские учреждения которых используется в
сервисе
- отдача конкретного города с имеющимся списком административных районов в нем
- отдача списка специальностей, имеющихся в конкретном городе
### Реализация записи к специальности врача в учреждение
- получение списка талонов для записи
- организация записи пользователя к специальности врача
### Отзывы к организациям
- получение списка отзывов
- создание нового отзыва
Особенности реализации сервиса
1. Техническим заданием установлено, что сервис работает в пределах города
Калуги - мы посмотрели дальше и добавили возможность работы в любом городе.
2. Скорость - самая главная характеристика сервиса - каждый SQL-запрос
профилирован.
3. Создана и настроена админка для гибкого управления сущностями сервиса.
4. Реализован гибкий процесс по осуществлению записи к врачу в организацию.
Сервис в фоновом режиме (Cron/Celery) управляет талонами на заданный период
времени.
Для записи к врачу достаточно получить список свободных талонов на
интересующие пользователя дату приема и специальность врача и записаться.
6. Заранее предугадана и решена проблема **race condition** при записи к
врачу - на уровне СУБД при записи блокируется соответствующая строка талона.
7. Особое внимание уделено подробной документации API.
8. Настроен CI/CD на проведение тестов, деплоя и уведомления разработчиков
на Discord-сервер.
Установка
Для локального развертывания необходимо создать файл с переменными
окружения `env`. Пример такого файла находится в репозитории под названием .
env.example.
Для запуска сервиса используются последовательно команды из директории
`infra` от пользователя с правами root
```shell
docker-compose -f docker-compose-local.yml up --build -d
docker exec infra-backend-1 python3 manage.py migrate
docker exec infra-backend-1 python3 manage.py collectstatic
```
Сервис будет доступен на http://localhost:28962.