Skip to content

azizjon-aliev/office-booking

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Office Booking CLI

Office Booking CLI — это небольшое консольное приложение на Python, которое позволяет бронировать офисные кабинеты, проверять их доступность и узнавать, кем и до какого времени они заняты.
Проект реализован без использования сторонних фреймворков (Django/Flask/FastAPI/Typer/SQLAlchemy и т.д.) — только на стандартной библиотеке Python (модули sqlite3, argparse, logging, smtplib и пр.).

Возможности

  1. Создание и инициализация базы данных.
  2. Проверка доступности кабинета на определённый промежуток времени.
  3. Бронирование кабинета (с сохранением данных о пользователе, времени и контактной информации).
  4. Получение информации о том, кем и до какого времени занят кабинет.
  5. Отправка уведомлений (Email и «SMS»-заглушка) о бронировании.
  6. Логирование всех важных действий в консоль и в лог-файл booking.log.

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

office-booking/
├── src/
│   ├── __init__.py
│   ├── database.py         # Класс Database для работы с SQLite
│   ├── booking.py          # Класс BookingManager (логика бронирования)
│   ├── notification.py     # Класс Notifier (отправка уведомлений)
│   └── app.py              # Класс BookingApp (CLI и взаимодействие)
├── main.py                 # Точка входа (запуск CLI)
├── .env.example            # Пример файла с переменными окружения
├── booking.log             # Файл логов (создаётся при запуске)
├── .gitignore
└── README.md               # Текущее описание проекта

Обратите внимание: файлы .env и базу данных office_booking.db обычно не коммитят в репозиторий.

Технологии

  • Python 3.12+
  • SQLite (модуль sqlite3)
  • argparse для создания CLI-интерфейса.
  • logging для записи логов.
  • smtplib + email.mime.text для отправки писем.
  • python-dotenv (при желании) для работы с переменными окружения.

Установка и настройка

  1. Клонируйте репозиторий:

    git clone https://github.com/azizjon-aliev/office-booking.git
    cd office-booking
  2. Создайте виртуальное окружение и активируйте его (опционально, но рекомендуется):

    python -m venv .venv
    source .venv/bin/activate  # Linux/Mac
    .venv\Scripts\activate     # Windows
  3. Установите зависимости (если есть requirements.txt или используете pip install по необходимости):

    pip install -r requirements.txt

    Если вы строго придерживаетесь «только стандартных библиотек», возможно, у вас нет requirements.txt. Тогда зависимости могут не понадобиться, кроме python-dotenv (если хотите грузить .env).

  4. Создайте файл .env на базе .env.example (или вручную). Заполните реальными SMTP-настройками (при необходимости) и не забудьте добавить .env в .gitignore:

    SMTP_SERVER="smtp.example.com"
    SMTP_PORT="587"
    SENDER_EMAIL="[email protected]"
    SENDER_PASSWORD="SUPER_SECRET"
  5. Инициализируйте базу данных:

    python main.py init

    В корне проекта появится файл office_booking.db (или в другом месте, если вы так указали).

Использование

Приложение работает через CLI. Основные команды:

  1. Инициализация БД:

    python main.py init

    Создаёт (или проверяет) таблицу bookings в файле office_booking.db.

  2. Проверка доступности:

    python main.py check <room_number> <start_time> <end_time>

    Пример:

    python main.py check 5 "2025-01-10 09:00" "2025-01-10 11:00"

    Сообщит, свободен ли кабинет №5 в указанный период.

  3. Бронирование:

    python main.py book <room_number> <occupant_name> <occupant_email> <occupant_phone> <start_time> <end_time>

    Пример:

    python main.py book 5 "Иванов Иван" "[email protected]" "+79990000000" "2025-01-10 09:00" "2025-01-10 11:00"

    Если кабинет свободен, создаётся запись о бронировании. Автоматически отправляется email (и «SMS»-заглушка).

  4. Информация о занятости:

    python main.py info <room_number> <start_time> <end_time>

    Пример:

    python main.py info 5 "2025-01-10 09:00" "2025-01-10 11:00"

    Показывает, кем и до скольки занят кабинет (если есть пересечение по времени).

  5. Справка (если вы добавили отдельную команду help):

    python main.py help

    Либо используйте встроенный флаг:

    python main.py --help

    Покажет общее описание и список команд.

Логирование

Приложение пишет логи:

  • В консоль (уровень INFO и выше).
  • В файл booking.log (уровень DEBUG и выше).

Вы можете изменить формат/уровень логирования в файле app.py (или где у вас инициализируется логгер).

Советы по развитию

  • Валидировать даты/время: сейчас используется простой текстовый формат YYYY-MM-DD HH:MM; можно добавить проверку формата через datetime.strptime.
  • Управление пользователями: реализовать аутентификацию, чтобы знать, кто именно бронирует кабинет.
  • Docker: упаковать проект в Docker для удобного деплоя.
  • CI/CD: подключить GitHub Actions или другой сервис для автоматического прогона тестов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages