Skip to content

antbaranov/java-filmorate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

82 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ОписаниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠšΠΈΠ½ΠΎΡ€Π΅ΠΉΡ‚ΠΈΠ½Π³ (Filmorate): Π˜Π½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΈ командная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

БСрвис поиска ΠΈ ΠΎΡ†Π΅Π½ΠΊΠΈ Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² (Spring Boot, JDBC+API, H2 Database; групповая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°). ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя возмоТности вСдСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ², поиска ΠΏΠΎ Π½Π΅ΠΌΡƒ, проставлСния ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΈ Π»Π°ΠΉΠΊΠΎΠ², ΠΎΠ±ΠΌΠ΅Π½Π° ΠΌΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Ρ„ΠΈΠ»ΡŒΠΌΠ°ΠΌ, получСния автоматичСских Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ Ρ‚ΠΎΠΏ-Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΊ просмотру, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Π² Π΄Ρ€ΡƒΠ·ΡŒΡ.

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ рСТиссёров Π² Ρ„ΠΈΠ»ΡŒΠΌΡ‹ (Π²Π΅Ρ‚ΠΊΠ° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ add-director)

Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„ΠΈΠ»ΡŒΠΌΠ°Ρ… ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ имя рСТиссёра. ПослС этого появилась ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

  1. Π’Ρ‹Π²ΠΎΠ΄ всСх Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² рСТиссёра, отсортированных ΠΏΠΎ количСству Π»Π°ΠΉΠΊΠΎΠ².
  2. Π’Ρ‹Π²ΠΎΠ΄ всСх Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² рСТиссёра, отсортированных ΠΏΠΎ Π³ΠΎΠ΄Π°ΠΌ.

2. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β«ΠžΠ±Ρ‰ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΠΌΡ‹Β» (add-common-films)

ΠœΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Ρ‰ΠΈΡ… с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² с сортировкой ΠΏΠΎ ΠΈΡ… популярности.

3. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β«Π›Π΅Π½Ρ‚Π° событий» (add-feed)

Π”ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ просмотра послСдних событий Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ β€” Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ·ΡŒΡ, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Ρ€ΡƒΠ·Π΅ΠΉ, Π»Π°ΠΉΠΊΠΈ ΠΈ ΠΎΡ‚Π·Ρ‹Π²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ оставили Π΄Ρ€ΡƒΠ·ΡŒΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для этого создали Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ β€” Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π»Π°ΠΉΠΊΠ½ΡƒΠ», ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Π΄Ρ€ΡƒΠ·ΡŒΡ, написал Π»ΠΈ ΠΎΡ‚Π·Ρ‹Π².

4. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β«Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈΒ» (add-recommendations)

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ систСму для Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. Найти ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством пСрСсСчСния ΠΏΠΎ Π»Π°ΠΉΠΊΠ°ΠΌ.
  2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ»Π°ΠΉΠΊΠ°Π», Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅Ρ‚.
  3. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ поставил Π»Π°ΠΉΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ вкусами, Π° Ρ‚ΠΎΡ‚, для ΠΊΠΎΠ³ΠΎ составляСтся рСкомСндация, Π΅Ρ‰Ρ‘ Π½Π΅ поставил.

5. Π’Ρ‹Π²ΠΎΠ΄ самых популярных Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΏΠΎ ΠΆΠ°Π½Ρ€Ρƒ ΠΈ Π³ΠΎΠ΄Π°ΠΌ (add-most-populars)

Π”ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΏ-N Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΏΠΎ количСству Π»Π°ΠΉΠΊΠΎΠ². Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ сдСлали ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ:

  1. По ΠΆΠ°Π½Ρ€Ρƒ.
  2. Π—Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π³ΠΎΠ΄.

6. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ «Поиск» (add-search)

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ поиск ΠΏΠΎ названию Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΈ ΠΏΠΎ рСТиссёру.

Алгоритм ΡƒΠΌΠ΅Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ подстрокС. НапримСр, Π²Π²ΠΎΠ΄ΠΈΠΌ Β«ΠΊΡ€Π°Π΄Β», Π° Π² поискС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΠΌΡ‹: Β«ΠšΡ€Π°Π΄ΡƒΡ‰ΠΈΠΉΡΡ Ρ‚ΠΈΠ³Ρ€, Π·Π°Ρ‚Π°ΠΈΠ²ΡˆΠΈΠΉΡΡ Π΄Ρ€Π°ΠΊΠΎΠ½Β», Β«ΠšΡ€Π°Π΄ΡƒΡ‰ΠΈΠΉΡΡ Π² Π½ΠΎΡ‡ΠΈΒ» ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

7. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β«ΠžΡ‚Π·Ρ‹Π²Ρ‹Β» (add-reviews)

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ появились ΠΎΡ‚Π·Ρ‹Π²Ρ‹ Π½Π° Ρ„ΠΈΠ»ΡŒΠΌΡ‹. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚Π·Ρ‹Π²Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ ΠΈ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… характСристик.

Π₯арактСристики ΠΎΡ‚Π·Ρ‹Π²Π°.

  1. ΠžΡ†Π΅Π½ΠΊΠ° β€” ΠΏΠΎΠ»Π΅Π·Π½ΠΎ / бСсполСзно.
  2. Π’ΠΈΠΏ ΠΎΡ‚Π·Ρ‹Π²Π° β€” Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ / ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³ ΠΎΡ‚Π·Ρ‹Π²Π°.

Π£ ΠΎΡ‚Π·Ρ‹Π²Π° имССтся Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³. ΠŸΡ€ΠΈ создании ΠΎΡ‚Π·Ρ‹Π²Π° Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ†Π΅Π½ΠΈΠ» ΠΎΡ‚Π·Ρ‹Π² ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ, это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ Π½Π° 1. Если ΠΊΠ°ΠΊ бСсполСзный, Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π½Π° 1.

ΠžΡ‚Π·Ρ‹Π²Ρ‹ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³Ρƒ полСзности.

8. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (add-remove-endpoint)

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для удалСния Ρ„ΠΈΠ»ΡŒΠΌΠ° ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Alt text

🧩 Π‘Ρ‚Π΅ΠΊ-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ 🧩

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠ½ΠΎΠΉ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ стСк Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ:

  • БистСма сборки Maven, устройство ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ pom.xml Ρ„Π°ΠΉΠ»Π°

  • АрхитСктура REST

  • Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ логирования Logback (slf4j)

  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Lombok

  • Spring Boot Framework (прСимущСствСнно для построСния Web API)

    • spring-boot-maven-plugin
    • spring-boot-starter-test
    • spring-boot-starter-web
    • spring-boot-starter-logging
    • spring-boot-starter-validation
    • application.properties
  • Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ тСстирования Postman

  • ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования Builder

  • ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ pull-request Π² GitHub

  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Apache Commons Lang (StringUtils)

  • ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ проСктирования ООП "Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй" (Inversion of Control)

  • Spring Framework

    • Spring IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Application Context, Spring Beans, Dependency Injection
    • Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
  • REST API (HTTP: пСрСмСнная ΠΏΡƒΡ‚ΠΈ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° эндпоинтС, ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ сообщСния)

  • АрхитСктура прилоТСния (Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° слои)

  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Jackson (ObjectMapper)


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

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ прСдставлСн бэкСнд прилоТСния. Π Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ прилоТСния протСстирована ΠΏΠΎ WEB API с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Postman-тСстов, тСсты располоТСны Π² ΠΏΠ°ΠΏΠΊΠ΅ postman.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ:

  • установлСнный JDK вСрсии 11,
  • сборка с использованиСм Maven.