## Overview

Filmorate is a Java Spring Boot application designed to manage a collection of films and users. It provides a RESTful API for creating, retrieving, updating, and deleting film and user data. Key features include managing film details (name, description, release date, duration, MPA rating, genres), user profiles (email, login, name, birthday), adding "likes" to films, and managing user friendships.

The application follows a layered architecture:

**Controllers:** Handle incoming HTTP requests, perform input validation, and delegate business logic to Services.

**Services:** Encapsulate the core business logic, orchestrating calls to Repositories.

**Repositories:** Manage data persistence, interacting directly with the H2 database using Spring JDBC (`NamedParameterJdbcOperations`).

**Models:** Represent the core data entities (Film, User, Genre, Mpa).

**Key Technologies:**

**Framework:** Spring Boot 3.x

**Language:** Java 21

**Build:** Apache Maven

**Database:** H2 (In-memory for default profile, file-based possible)

**Persistence:** Spring JDBC (`NamedParameterJdbcOperations`)

**API:** RESTful Web Services (Spring Web)

**Validation:** Jakarta Bean Validation (Hibernate Validator), Custom Validators

**Utilities:** Lombok (for reducing boilerplate code), Logbook (for HTTP request/response logging)

**Testing:** JUnit 5, Spring Boot Test, `@JdbcTest`
