An open API service indexing awesome lists of open source software.

https://github.com/maxbarsukov/myfilmlist

🍿🎬 MyFilmList is a social networking platform and catalog for movies and TV series, allowing you to share your thoughts and discover new favorites
https://github.com/maxbarsukov/myfilmlist

coursework information-systems itmo maxbarsukov my-film-list pmpknu spring

Last synced: 3 months ago
JSON representation

🍿🎬 MyFilmList is a social networking platform and catalog for movies and TV series, allowing you to share your thoughts and discover new favorites

Awesome Lists containing this project

README

        

MyFilmList logo

# MyFilmList

> TL;DR: *Еще одно приложение для отслеживания фильмов*

![GitHub Release](https://img.shields.io/github/v/release/maxbarsukov/MyFilmList)
![GitHub License](https://img.shields.io/github/license/maxbarsukov/MyFilmList)
![GitHub repo size](https://img.shields.io/github/repo-size/maxbarsukov/MyFilmList) \
[![Markdown](https://github.com/maxbarsukov/MyFilmList/actions/workflows/markdown.yml/badge.svg?branch=master)](https://github.com/maxbarsukov/MyFilmList/actions/workflows/markdown.yml)

## 🍿 Что такое MyFilmList?

**MyFilmList** — это приложение, предназначенное для отслеживания фильмов,
которое позволяет вести собственные списки просмотренного, запланированного к просмотру контента, оценивать фильмы,
оставлять отзывы и делиться рекомендациями, находить новые произведения для просмотра по рекомендациям, жанрам и рейтингам.

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

С помощью **MyFilmList** пользователи могут:

- **Создавать и управлять коллекциями фильмов**: Пользователи могут создавать персонализированные списки фильмов, которые они хотят посмотреть, а также отслеживать просмотренные фильмы.
- **Оставлять отзывы и оценки**: Каждому фильму можно оставить отзыв и оценку, что помогает другим пользователям принимать решения о просмотре.
- **Получать рекомендации**: Приложение предлагает персонализированные рекомендации на основе предпочтений пользователя и его истории просмотров.

### 🖥️ Приложение

Хотите увидеть **MyFilmList** в действии?

- 🔥 [**Попробуйте!**](https://mfl.maxbarsukov.ru/) 🔥

Не терпится узнать, как использовать API **MyFilmList**?

- 🗂️ [**MyFilmList OpenAPI 3.0**](https://mfl.maxbarsukov.ru/swagger-ui/index.html) 🗂️

---

## 📄 Курсовая работа

**MyFilmList** создан в рамках курсовой работы по предмету [«Информационные системы»](https://se.ifmo.ru/courses/is), целью которой является
получение навыков и знаний, необходимых для создания информационной системы в заданной предметной области

> [!WARNING]
> Добрый день. Тема отклонена по причине цензуры. Придумайте что-нибудь менее нарушающее нормы приличия. \
> — Алексей Егошин (отвечая на проект курсовой работы "ИС Репродуктивного центра «SPER»")

anime

> [!TIP]
> Если бы не цензура от лектора - ваш "банк спермы", звучит гораздо лучше как тема курсовой \
> — Алексей Егошин (позже)

---

### Команда

- **Группа:** `P3315`
- **Студенты:**
- [@maxbarsukov](https://github.com/maxbarsukov): Барсуков Максим Андреевич `367081`;
- [@pmpknu](https://github.com/pmpknu): Горляков Даниил Петрович `367165`.

### Задание

Текст задания на курсовую работу, а также описание всех этапов курсовой работы вы можете найти в [TASK.md](./TASK.md)

### Ход работы

| Этап | Артефакт |
|------|---------------------------------------------------------|
| `1` | **Отчёт:** [part1/report.pdf](./docs/part1/report.pdf) |
| `2` | **Отчёт:** [part2/report.pdf](./docs/part2/report.pdf) |
| `3` | **Отчёт:** [part3/report.pdf](./docs/part3/report.pdf) |
| `4` | **Отчёт:** [part4/report.pdf](./docs/part4/report.pdf) |

---

## Оглавление

1. [Обновления](#updates)
2. [Начало работы](#getting-started)
1. [Предварительные требования](#pre-reqs)
2. [Сборка и запуск](#run)
3. [Тестирование](#testing)
4. [Содействие](#contributing)
5. [Нормы поведения](#code-of-conduct)
6. [Свяжитесь с нами!](#get-in-touch)
7. [Безопасность](#security)
8. [Полезные ссылки](#useful-links)
9. [Лицензия](#license)

---

## Обновления

🎉 Вышла версия v0.1.0!

🔔 15 января 2025 (v0.1.0)

> - **Реализация рекомендаций**: введена новая конечная точка `/feed`, которая объединяет пользовательский контент, повышая вовлеченность пользователей с помощью персонализированных рекомендаций.
> - **Рекомендации по коллекциям фильмов**: в `FeedQuery` разработана система рекомендаций по коллекциям фильмов, позволяющая пользователям находить подходящий контент на основе их истории просмотров.
> - **Управление ролями пользователей**: реализован комплексный модуль управления ролями пользователей, включая новый `UserRoleService` для облегчения назначения ролей и разрешений.
> - **Объекты комментариев и рецензий**: добавлены объекты «Комментарий» и «Рецензия», дополненные службами для обработки операций CRUD и улучшения взаимодействия пользователя с контентом.
> - **Система сообщений**: введена функция «Пожаловаться» и связанные с ней службы, которые позволяют пользователям сообщать о неприемлемом контенте, обеспечивая более безопасное сообщество.
> - **Функциональность коллекций фильмов**: создан объект «Коллекция фильмов» с полными возможностями CRUD, позволяющий пользователям управлять своим любимым контентом.
> - **Восстановление пароля**: реализована функция восстановления пароля, которая позволяет пользователям безопасно сбрасывать свои пароли по электронной почте.
> - **Подтверждение электронной почты**: добавлена функция проверки электронной почты пользователя для обеспечения подлинности учетной записи и повышения безопасности во время регистрации пользователя.
> - **Улучшенные алгоритмы рекомендаций**: улучшена функция рекомендаций, позволяющая учитывать дополнительные факторы, такие как страна производства и средний рейтинг, предоставляя пользователям более релевантные предложения.

## 🚀 Начало работы

### Предварительные требования

Убедитесь, что у вас установлен [`git`](https://git-scm.com/).

Чтобы собрать и запустить это приложение локально, вам понадобится несколько вещей:

- Установите [`Java`](https://www.java.com/ru/download/) *(проверено на `OpenJDK 17.0.12`)*;
- Вам понадобится [`PostgreSQL`](https://www.postgresql.org/download/) *(проверено на `16.2`)*;
- ... а также [`Minio`](https://min.io/download) *(проверено на `RELEASE.2024-12-18T13-15-44Z`)*;
- Проверьте, что [`Node.js`](https://nodejs.org/en) установлен *(проверено на `v20.17.12`)*;
- Установите [`pnpm`](https://pnpm.io/installation) *(проверено на `pnpm 9`)*.

***или***

- Установите [Docker](https://docs.docker.com/) и [docker-compose](https://docs.docker.com/compose/install/).

Склонируйте этот репозиторий:

git clone [email protected]:maxbarsukov/MyFilmList.git
cd MyFilmList

### Сборка и запуск

Для начала скопируйте содержимое [`.env.example`](./.env.example) в файл `.env` и внимательно изучите его содержимое,
после чего отредактируйте его в соответствии с вашим окружением и требованиями (например, поменять адрес клиента).

При изменениях `.env` файла запускайте в окне консоли команду:

export $(cat .env | xargs)

> [!WARNING]
> Если архитектура вашей системы отличается от `x86-64`, вам, скорее всего,
> понадобится пересобрать [`vendor/libJMagick.so`](./vendor/libJMagick.so).
> \
> Если вы, как и я, счастливый обладатель `aarch64`, то,
> во имя избежания многочасовых страданий, вчитайтесь в [`jmagick/INSTALL#L112-L121`](https://github.com/techblue/jmagick/blob/master/INSTALL#L112-L121).

Для этого следуйте инструкциям по сборке [`JMagick`](https://github.com/techblue/jmagick/blob/master/INSTALL) (или повторите команды из [`jmagick_build.yml`](https://github.com/techblue/jmagick/blob/master/.github/workflows/jmagick_build.yml)).
Полученный `.so` файл переименуйте в `libJMagick.so` и поместите в директорию [`vendor`](./vendor).

#### Локально

- Убедитесь, что вы установили, настроили и запустили PostgreSQL и Minio;
- Введите `./gradlew bootRun` и проверьте http://localhost:8080.
- Чтобы запустить фронтенд, перейдите в директорию [`./frontend/`](./frontend/), запустите `pnpm run dev` и проверьте http://localhost:3000.

#### Docker

- Запустите `docker compose up` и подождите, пока PostgreSQL и Minio не станут доступны.
- Введите `./gradlew bootRun` и проверьте http://localhost:8080.
- Чтобы запустить фронтенд, перейдите в директорию [`./frontend/`](./frontend/), запустите `pnpm run dev` и проверьте http://localhost:3000.

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

Чтобы запустить тест-раннер, введите:

export $(cat .env | xargs)
./gradlew test

---

## 🤝 Содействие

Нужна помощь? Загляните в [`SUPPORT.md`](./SUPPORT.md)!

Привет! Мы рады, что вы думаете о том, чтобы внести свой вклад в **MyFilmList**! Не стесняйтесь выбирать проблему с пометкой `good first issue` и задавать любые вопросы, которые вам интересны. Некоторые моменты могут быть неясны, и мы готовы вам помочь!

Отчеты об ошибках и запросы на включение приветствуются на GitHub по адресу https://github.com/maxbarsukov/MyFilmList.

Прежде чем создавать свой PR, мы настоятельно рекомендуем вам прочитать соответствующий [`CONTRIBUTING.md`](https://github.com/maxbarsukov/MyFilmList/blob/master/.github/CONTRIBUTING.md) репозитория или раздел «Содействие» в [`README.md`](https://github.com/maxbarsukov/MyFilmList/blob/master/README.md#contributing).

## ⚖️ Нормы поведения

Этот проект призван стать безопасным и гостеприимным пространством для совместной работы, и ожидается, что все, кто взаимодействует с кодовыми базами проекта **MyFilmList**, системами отслеживания проблем, чатами и списками рассылки, будут соблюдать [кодекс поведения](https://github.com/maxbarsukov/MyFilmList/blob/master/.github/CODE_OF_CONDUCT.md).

## 📫 Свяжитесь с нами!

💌 Хотите внести предложение или оставить отзыв? Вот некоторые каналы, по которым вы можете связаться с нами:

- Нашли ошибку? [Откройте задачу](https://github.com/maxbarsukov/MyFilmList/issues) в репозитории!
- Хотите стать частью нашего сообщества Telegram? Мы приглашаем вас присоединиться к нашему [чату сообщества MyFilmList](https://t.me/MyFilmListApp), где вы можете найти поддержку со стороны нашей команды и сообщества, а также поделиться своими проектами или просто поговорить о случайных вещах с другими участниками сообщества **MyFilmList** 😁!

## 🛡️ Безопасность

**MyFilmList** серьезно относится к безопасности наших программных продуктов и услуг. Если вы считаете, что обнаружили уязвимость безопасности в каком-либо репозитории, принадлежащем MyFilmList, сообщите нам об этом, как описано в нашей [политике безопасности](https://github.com/maxbarsukov/MyFilmList/security/policy).

---

## 🌐 Полезные ссылки

| Ссылка | Описание |
|----------------------------------------------------------------------------------------------|--------------------------------------------|
| [github.com/maxbarsukov/MyFilmList](https://github.com/maxbarsukov/MyFilmList) | Репозиторий **MyFilmList** |
| [mfl.maxbarsukov.ru](https://mfl.maxbarsukov.ru/) | Веб-приложение **MyFilmList** |
| [mfl.maxbarsukov.ru/swagger-ui/index.html](https://mfl.maxbarsukov.ru/swagger-ui/index.html) | OpenAPI 3.0 документация для открытого API |

## 🪪 Лицензия

Проект доступен с открытым исходным кодом на условиях [Лицензии MIT](https://opensource.org/licenses/MIT). \
*Авторские права 2025 Max Barsukov & Daniil Gorlyakov*

**Поставьте звезду :star:, если вы нашли этот проект полезным.**

---

*

This project is published under [MIT](LICENSE).
A [maxbarsukov](https://github.com/maxbarsukov) & [pmpknu](https://github.com/pmpknu) project.
- :tada: -

*