Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎬 The Movie Archive

Веб-приложение для поиска и фильтрации фильмов с аналитикой пользовательских запросов.


Двухбазовая архитектура

  • MySQL: - хранение структурированных данных о фильмах, категориях, метаданных
  • MongoDB: - хранение аналитики поисковых запросов в коллекции final_project_010825-ptm_Serhii_Lanovenkyi

📋 Описание проекта

The Movie Archive - это веб-приложение на FastAPI, которое предоставляет функционал для поиска фильмов по названию, фильтрации по жанрам и годам, а также собирает аналитику поисковых запросов.

🎯 Основные функции

  • Поиск фильмов по названию с частичным совпадением
  • Фильтрация фильмов по жанрам и диапазонам лет
  • Отображение новых фильмов на главной странице
  • Сбор и отображение аналитики поисковых запросов
  • Пагинация результатов (10 фильмов на страницу)
  • Поиск фильмов по названию - с частичным совпадением
  • Фильтрация по жанрам и годам выпуска - гибкая фильтрация с кнопкой "Фильтровать"
  • Аналитика поисковых запросов - история и популярные запросы в MongoDB
  • Пагинация результатов - 10 фильмов на страницу с навигацией
  • Адаптивный интерфейс - современный дизайн

Модульная структура

  • routers/ - обработка HTTP маршрутов
  • databases/ - абстракция работы с базами данных
  • utils/ - переиспользуемые функции (валидаторы, хелперы)
  • core/ - базовые компоненты (логирование, шаблоны, исключения)

🛡️ Безопасность и валидация

  • Валидация всех входных данных (годы, страницы, поисковые запросы)
  • Ограничение длины поисковых запросов
  • Обработка исключений с централизованными обработчиками ошибок

🚀 Производительность

  • Оптимизированные SQL‑запросы
  • Асинхронная обработка HTTP‑запросов через FastAPI
  • Структурированное логирование ошибок
  • Эффективная пагинация с OFFSET/LIMIT

🛠️ Технологический стек

Компонент Технология
Backend FastAPI + Uvicorn
Frontend Jinja2 + CSS
База данных MySQL (основная) + MongoDB (аналитика)
Python Python (рекомендуется)
NoSQL PyMongo

📋 Системные требования

  • Python 3.11+ (рекомендуется 3.12)
  • **MySQL ** или MariaDB 10.2+
  • **MongoDB ** для аналитики

🚀 Быстрый старт

1️⃣ Клонирование и установка зависимостей

git clone https://github.com/your-username/final_project_front.git
cd final_project_front
python -m venv venv
# Windows
venv\Scripts\activate

2️⃣ Настройка окружения

Создайте файл .env в корне проекта на основе .env.example:

# MySQL настройки
MYSQL_HOST=localhost
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DB=film_database

# MongoDB настройки
MONGODB_URL=mongodb://localhost:27017
MONGODB_DB=film_analytics

4️⃣ Запуск приложения

python main.py

Приложение будет доступно по адресу: http://127.0.0.1:8000

🌐 Эндпоинты API

Основные страницы

  • GET / - главная страница с новыми фильмами
  • GET /genre/{genre_name} - фильмы по жанру с пагинацией
  • GET /analytics - страница аналитики
  • GET /analytics/data - JSON данные аналитики

Поиск и фильтрация

  • GET|POST /search_title - поиск по названию фильма
  • GET|POST /search_filter - фильтр по жанру и годам

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

final_project_front/  
├── main.py                      # Точка входа FastAPI приложения
├── requirements.txt             # Зависимости Python
├── README.md                    # Документация
├── app/  
│   ├── core/                    # Ядро Логирования
│   │   ├── exceptions.py        # Кастомные исключения
│   │   ├── logging.py           # Настройка логирования
│   │   └── templates.py         # Настройка Jinja2
│   ├── databases/               # Работа с базами данных
│   │   ├── db_mysql.py          # MySQL операции
│   │   └── db_mongo.py          # MongoDB аналитика
│   ├── exceptions/              # Обработчики исключений
│   │   └── handlers.py          # HTTP обработчики ошибок
│   ├── routers/                 # Маршруты FastAPI
│   │   ├── home.py              # Главная страница
│   │   ├── search.py            # Поиск и фильтрация
│   │   ├── analytics.py         # Аналитика
│   │   └── static.py            # Статические файлы
│   ├── static/                  # Статические ресурсы
│   │   ├── style.css            # Стили приложения
│   │   └── favicon.ico          # Иконка сайта
│   ├── templates/               # HTML шаблоны Jinja2
│   │   ├── base.html            # Базовый шаблон
│   │   ├── index.html           # Главная страница
│   │   ├── results.html         # Результаты поиска
│   │   └── analytics.html       # Страница аналитики
│   └── utils/                   # Вспомогательные утилиты
│       ├── helpers.py           # Общие данные для шаблонов
│       └── validators.py        # Валидация входных данных

🎨 Особенности интерфейса

Главная страница

  • Карточки жанров с количеством фильмов и диапазоном лет
  • Сетка новых фильмов с пагинацией
  • Поисковая строка и фильтры в хедере

Результаты поиска

  • Детальная информация о фильмах (название, жанр, год, рейтинг, длительность, описание)
  • Умная пагинация с сохранением параметров поиска
  • Кнопка возврата на главную

Фильтрация

  • Выпадающий список жанров
  • Поля для ввода диапазона лет
  • Кнопка "Фильтровать" для запуска поиска

Аналитика

  • Популярные 5 поисковые запросы с их количеством
  • История последних уникальных запросов

🏗️ Архитектура приложения

Двухбазовая архитектура

  • MySQL: хранение структурированных данных о фильмах, категориях, метаданных
  • MongoDB: хранение аналитики поисковых запросов в коллекции final_project_010825-ptm_Serhii_Lanovenkyi

Поток обработки запроса

  1. HTTP запрос → CORS middleware → Router
  2. Валидация входных параметров
  3. Поиск данных в MySQL
  4. Сохранение поискового запроса в MongoDB
  5. Рендеринг HTML шаблона через Jinja2

Модульная структура

  • routers/ - обработка HTTP маршрутов
  • databases/ - абстракция работы с базами данных
  • utils/ - переиспользуемые функции (валидаторы, хелперы)
  • core/ - базовые компоненты (логирование, шаблоны, исключения)

🧾 Логирование

Централизованное логирование через app.core.logging:

from app.core.logging import get_logger
logger = get_logger(__name__)

# Пример использования
logger.info("Приложение запущено")
logger.error("Ошибка подключения к базе данных", exc_info=True)

🐛 Решение проблем

Проверка подключения к базам данных

MySQL:

mysql -u username -p -h localhost -e "SELECT VERSION();"

MongoDB:

mongosh --eval "db.version()"

Частые проблемы

  1. Ошибка импорта модулей

    • Убедитесь что вы в виртуальном окружении
    • Проверьте установку всех зависимостей из requirements.txt
  2. Проблемы с базой данных

    • Проверьте наличие файла .env с правильными учетными данными
    • Убедитесь что базы данных созданы и доступны
  3. Ошибки валидации

    • Все входные данные проходят валидацию
    • Проверьте корректность формата годов (1900-2100)
    • Поисковые запросы не должны быть пустыми


⭐ Если проект был полезен — поставьте звезду репозиторию

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages