Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
22dd861
add recommendations
1Boolean1 Apr 22, 2025
d3e9cd2
Реализован функционал добавления-исправления режиссёра, получения спи…
Plastinin-Igor Apr 22, 2025
d87683c
Добавлен функционал возвращения списка фильмов режиссера отсортирован…
Plastinin-Igor Apr 22, 2025
5e79791
Исправить ошибки Checkstyle
Plastinin-Igor Apr 22, 2025
32d32a2
Отладка тестов Postman: переименовать поле director в directors; внес…
Plastinin-Igor Apr 22, 2025
d280de1
Переименовать метод deleteFilms в deleteFilmDirectors в классе FilmRe…
Plastinin-Igor Apr 23, 2025
e07b41f
Add remove endpoint for films and users (#14)
b1mgd Apr 24, 2025
bab42a5
Добавлена функциональность «Популярные фильмы» (#13)
Nesailormun Apr 24, 2025
7930dd3
add getCommonFilms for user and friend (#10)
1Boolean1 Apr 24, 2025
dc711ce
Add remove endpoint for films and users (#14)
b1mgd Apr 24, 2025
4642f4c
Добавлена функциональность «Популярные фильмы» (#13)
Nesailormun Apr 24, 2025
02c4821
add getCommonFilms for user and friend (#10)
1Boolean1 Apr 24, 2025
f9a3cb5
add getCommonFilms for user and friend
1Boolean1 Apr 21, 2025
3be4e22
Merge branch 'add-director' into develop
1Boolean1 Apr 24, 2025
f1337d4
Merge branch 'develop' into new-develop
1Boolean1 Apr 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ target/
!**/src/main/**/target/
!**/src/test/**/target/

### macOS ###
.DS_Store

### STS ###
.apt_generated
.classpath
Expand Down
2 changes: 2 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<optional>true</optional>
</dependency>
<dependency>
Expand Down Expand Up @@ -81,6 +82,7 @@
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</path>
</annotationProcessorPaths>
</configuration>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package ru.yandex.practicum.filmorate.controller;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.dto.DirectorDto;
import ru.yandex.practicum.filmorate.model.Director;
import ru.yandex.practicum.filmorate.service.director.DirectorService;

import java.util.Collection;

@Slf4j
@RestController
@RequestMapping("/directors")
@RequiredArgsConstructor
@Validated
public class DirectorController {

private final DirectorService directorService;

@GetMapping
public Collection<DirectorDto> getDirectors() {
log.info("Received GET /directors request");
return directorService.getDirectors();
}

@GetMapping("/{directorId}")
public DirectorDto getDirectorById(@PathVariable long directorId) {
log.info("Received GET /directors/{} request", directorId);
return directorService.getDirectorById(directorId);
}

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public DirectorDto addDirector(@RequestBody Director director) {
log.info("Received POST /directors request with body: {}", director);
return directorService.addDirector(director);
}

@PutMapping
public DirectorDto updateDirector(@RequestBody Director director) {
log.info("Received PUT /directors request with body: {}", director);
return directorService.updateDirector(director);
}

@DeleteMapping("/{directorId}")
public void deleteDirector(@PathVariable long directorId) {
log.info("Received DELETE /directors/{} request", directorId);
directorService.deleteDirector(directorId);

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,11 @@ public ErrorResponse handleConstraintViolation(final ConstraintViolationExceptio
log.warn("constraint violation");
return new ErrorResponse(e.getMessage());
}

@ExceptionHandler(InternalServerException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ErrorResponse handleException(Exception e) {
log.error("Ошибка сервера: {}", e.getMessage());
return new ErrorResponse("Внутренняя ошибка сервера: " + e.getMessage());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,48 @@ public void deleteLikeToFilm(@PathVariable long filmId, @PathVariable long userI
}

@GetMapping("/popular")
public List<FilmDto> getTopFilms(@RequestParam(defaultValue = "10") @Positive(message = "Count must be positive") int count) {
log.info("Received GET /films/popular?count={} request", count);
return filmService.getTopFilms(count);
public List<FilmDto> getTopFilms(@RequestParam(defaultValue = "10") @Positive(message = "Count must be positive") int count,
@RequestParam(defaultValue = "-1") int genreId,
@RequestParam(defaultValue = "-1") int year) {
log.info("Received GET /films/popular?count={}&genreId={}&year={} request", count, genreId, year);
return filmService.getTopFilms(count, genreId, year);
}

@DeleteMapping("/{filmId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteFilm(@PathVariable long filmId) {
log.info("Received DELETE /films/{} request", filmId);
filmService.deleteFilm(filmId);
}

@GetMapping("/common")
public List<FilmDto> getCommonFilms(
@RequestParam long userId,
@RequestParam long friendId) {
log.info("GET common films for userId={} and friendId={}", userId, friendId);
return filmService.getCommonFilms(userId, friendId);
}

@DeleteMapping("/{filmId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteFilm(@PathVariable long filmId) {
log.info("Received DELETE /films/{} request", filmId);
filmService.deleteFilm(filmId);
}

@GetMapping("/common")
public List<FilmDto> getCommonFilms(
@RequestParam long userId,
@RequestParam long friendId) {
log.info("GET common films for userId={} and friendId={}", userId, friendId);
return filmService.getCommonFilms(userId, friendId);
}

@GetMapping("/director/{directorId}")
public List<FilmDto> findByDirector(@PathVariable long directorId,
@RequestParam(name = "sortBy") String sortMode) {
log.info("Received GET /films/director/{}?sortBy={} request", directorId, sortMode);
return filmService.findByDirector(directorId, sortMode);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.dto.FilmDto;
import ru.yandex.practicum.filmorate.dto.UserDto;
import ru.yandex.practicum.filmorate.model.User;
import ru.yandex.practicum.filmorate.service.film.FilmService;
import ru.yandex.practicum.filmorate.service.user.UserService;
import ru.yandex.practicum.filmorate.storage.user.UserDbStorage;

Expand All @@ -17,10 +19,12 @@
@RequestMapping("/users")
public class UserController {
private final UserService userService;
private final FilmService filmService;

@Autowired
public UserController(UserDbStorage userDbStorage) {
public UserController(UserDbStorage userDbStorage, FilmService filmService) {
userService = new UserService(userDbStorage);
this.filmService = filmService;
}

@GetMapping
Expand Down Expand Up @@ -72,5 +76,18 @@ public Collection<UserDto> getFriends(@PathVariable int id) {
log.info("getFriends");
return userService.getFriends(id);
}

@DeleteMapping("/{userId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteUser(@PathVariable int userId) {
log.info("Recieved DELETE /users/{} request", userId);
userService.deleteUser(userId);
}

@GetMapping("/{id}/recommendations")
public Collection<FilmDto> getRecommendations(@PathVariable long id) {
log.info("get recommendations");
return filmService.getRecommendations(id);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package ru.yandex.practicum.filmorate.dal;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import ru.yandex.practicum.filmorate.model.Director;

import java.util.List;
import java.util.Optional;

@Repository
public class DirectorRepository extends BaseRepository<Director> {

private static final String FIND_ALL_QUERY = "SELECT * FROM DIRECTORS d";
private static final String FIND_BY_ID_QUERY = "SELECT * FROM DIRECTORS d WHERE d.director_id = ?";
private static final String INSERT_QUERY = "INSERT INTO DIRECTORS (NAME) VALUES(?)";
private static final String UPDATE_QUERY = "UPDATE DIRECTORS SET NAME = ? WHERE DIRECTOR_ID = ?";
private static final String DELETE_QUERY = "DELETE FROM DIRECTORS WHERE DIRECTOR_ID = ?";

public DirectorRepository(JdbcTemplate jdbc,
RowMapper<Director> mapper) {
super(jdbc, mapper);
}

public List<Director> findAll() {
return findMany(FIND_ALL_QUERY);
}

public Optional<Director> findById(long id) {
return findOne(FIND_BY_ID_QUERY, id);
}

public Director save(Director director) {
Long id = (Long) insert(INSERT_QUERY, director.getName());
director.setId(id);
return director;
}

public Director update(Director director) {
update(UPDATE_QUERY, director.getName(), director.getId());
return director;
}

public void delete(long id) {
update(DELETE_QUERY, id);
}

}
Loading
Loading