Skip to content

Web application for online recording and administration of car wash operations

Notifications You must be signed in to change notification settings

SwedL/aquamarine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f5ac4bc · Apr 24, 2025
Apr 15, 2025
Apr 23, 2025
Apr 15, 2025
Apr 15, 2025
Apr 14, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 14, 2025

Repository files navigation

Main-logo

Python Version Django Version DRF

Web-приложение обеспечивающее возможность онлайн записи клиентов на услуги автомоечного комплекса и администрирования работы компании.

Рабочую версию сайта вы можете на https://aquamarine-pro.ru

Описание работы приложения

Сайт состоит из четырёх независимых интерфейсов.

  • Публичная часть
  • Интерфейс менеджера
  • Интерфейс администратора
  • API

Публичная часть:

Главная страница сайта, где можно узнать о работе компании и её преимуществах перед конкурентами, заказать звонок от компании.

head

Также можно ознакомиться с прайсом услуг компании.
Цены на услуги в прайс-листе, обновляются с изменениями цен администратором в админ-панели.

price

В нижней части находится интерактивная Яндекс карта с месторасположением автомоечного комплекса и футер с контактными данными.

footer

После авторизации пользователя, в зависимости от прав доступа, будет формироваться выпадающее меню

header

menu1 menu2 menu3

В "Профиле" пользователь может изменять свои данные, пароль, кроме логина и индивидуального прайса на автомобиль.
В "Мои записи" пользователь может посмотреть информацию о своих записях на автомойку и отменить их в случае необходимости.

profile user registrations

Предусмотрена возможность восстановления пароля пользователя через электронную почту.

login reset password

Вкладка "Доступное время" показывает свободные дни и время с учётом выбранных услуг, а также общее время работ и их стоимость.
Цены на услуги отображаются в зависимости от категории автомобиля клиента (седан/хетчбек, кроссовер или внедорожник).
Время, которое уже прошло, автоматически становится недоступным для записи.

page registrations

В случае успешной записи будет соответствующее уведомление.
Но если время, которое выбрал пользователь уже занято, пока он регистрировал запись, то появится уведомление с предложением выбрать другое время.

registrations done registrations error

У пользователей с правами менеджера или администратора, при записи на услуги, появляются поля для изменения марки и модели автомобиля, телефона и имени. Так как многие клиенты записываются по телефону указывая свои контактные данные. Также появляется вкладка "Менеджер" для быстрого перехода к интерфейсу менеджера для администрирования записей клиентов.

manager registration

Интерфейс менеджера:

Предназначен для менеджера или администратора. Здесь менеджер получает полную информация на выбранный день (какой автомобиль, какие выбраны услуги и контакты клиента). Записи выводятся на текущий день, а также на ближайшие 2 дня.
Страница автоматически обновляет данные при появлении новой записи или заявки на звонок. Обновление происходит с использованием протокола Websocket и signals.

manager interface

Также на странице отображена кнопка "Запросы звонка" которая начинает сигнализировать миганием, при поступлении запроса звонка от клиента. Кнопка перестаёт мигать, когда все телефонные звонки будут обработаны менеджером.

request call widget

Интерфейс администратора:

Вкладка "Админ - панель" в выпадающем меню пользователя. Сюда имеет доступ только администратор. Для обновления услуг и их цен, регистрации новых пользователей, для просмотра истории всех записей клиентов, в течение года.

В связи с пожеланием заказчика сайта, регистрация новых пользователей возможна только непосредственно администратором.

Запуск сервера:

Локально в Docker контейнере

  • Склонируйте репозиторий:
git clone https://github.com/SwedL/aquamarine.git
  • Перейдите в каталог проекта
cd aquamarine
  • Установите переменные окружения. Создайте файл .env и скопируйте содержимое из .env.dev.example, подставьте свои значения.
  • Запустите контейнеры.
docker compose up --build

Создайте модель суперпользователя

  • Войдите в терминал контейнера с помощью команды:
docker exec -it project bash
  • Создайте суперпользователя (login: эл.почта):
python3 manage.py createsuperuser

На удалённом сервере в Docker контейнере

  • Склонируйте репозиторий в директорию /home:
git clone https://github.com/SwedL/aquamarine.git
  • Перейдите в каталог проекта
cd aquamarine
  • Установите переменные окружения. Создайте файл .env и скопируйте содержимое из .env.prod.example, подставьте свои значения.
  • Создайте директории для certbot, выполнив:
mkdir -p certbot/conf
mkdir certbot/www
  • Измените в docker-compose.prod.yml в строке 76 ваш email и ваш домен, для получения SSL-сертификата от Let's Encrypt
  • Перейдите в директорию nginx/prod/default.conf и в строках 4, 17, 19, 20 установите значение вашего домена
  • Запустите контейнеры.
docker compose -f docker-compose.prod.yml up --build

Создайте модель суперпользователя

  • Войдите в терминал контейнера с помощью команды:
docker exec -it project bash
  • Создайте суперпользователя (login: эл.почта):
python3 manage.py createsuperuser

Структура проекта

Проект организован в соответствии с принципами слоистой архитектуры. Архитектура проекта:

aquamarine/
├── nginx/               # Директория конфигурационных файлов обратного прокси сервера           
│   └── ...   
└── project/             # Директория Django проекта
    ├── api/             # API endpoints
    │   └── carwash/   
    │       ├── services/  # Сервисы API - выполняют операции над данными    
    │       ├── use_cases/ # Юзкейсы API - бизнес-логика на уровне сценариев использования   
    │       └── ...   
    ├── aquamarine/      # Django проект aquamarine
    │   └── ... 
    ├── carwash/         # Приложение carwash
    │   ├── exceptions   # Исключения
    │   ├── fixtures/    # Начальные данные для заполнения БД
    │   ├── services/    # Сервисы - выполняют операции над данными
    │   ├── tests/       # Тесты шаблонов, форм, представлений
    │   ├── use_cases/   # Юзкейсы - бизнес-логика на уровне сценариев использования
    │   ├── consumers.py # Обработка асинхронных событий websocket соединений
    │   ├── models.py    # Модели приложения
    │   ├── routing.py   # Маршрутизация асинхронных событий websocket соединений
    │   ├── serializers.py # Сериализаторы моделей приложения и входных данных API
    │   └── ...
    ├── common/          # Общие классы, методы, объекты
    │   └── utils.py     
    ├── templates/       # Шаблоны для собственной настройки интерфейса администратора
    ├── users/           # Приложение users
    │   ├── permissions/ # Разрешения для пользователей
    │   ├── tests        # Тесты шаблонов, форм, представлений
    │   ├── models.py    # Модели приложения
    │   ├── serializers.py # Сериализаторы моделей приложения
    │   └── ...
    ├── Dockerfile    
    ├── manage.py    
    └── pyproject.toml   # Конфигурация Poetry    

Документация:

Документация API доступна по адресу: http://localhost:8000/swaggerui/

Тестирование

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

python manage.py test

При запуске в Docker контейнере предварительно войдите в терминал контейнера:

docker exec -it project bash

Автор проекта

  • Осминин Алексей - SwedL