Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file added FILMO_RATE_DATABASE_MAP.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed QuickDBD-FILMO_RATE.png
Binary file not shown.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ The Filmorate project — это приложение для работы с б
- logback-classic
- logbook-spring-boot-starter
### Схема базы данных (Database map)
![DatabaseMap](QuickDBD-FILMO_RATE.png "Database map:")
![DatabaseMap](FILMO_RATE_DATABASE_MAP.png "Database map:")
### Примеры запросов к базе данных:
1. Get TOP-10 films:
```sql
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,9 @@ public void setLike(@PathVariable long filmId, @PathVariable long userId) {
public void deleteLike(@PathVariable long filmId, @PathVariable long userId) {
filmService.changeLike(LikeAction.REMOVE, filmId, userId);
}

@DeleteMapping("/{filmId}")
public void deleteFilm(@PathVariable long filmId) {
filmService.remove(filmId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,9 @@ public Collection<EventDto> getUserEvents(@PathVariable(name = "id") long userId
public Collection<FilmDto> getRecommendations(@PathVariable long id) {
return userService.getRecommendations(id);
}

@DeleteMapping("/{userId}")
public void deleteUser(@PathVariable long userId) {
userService.remove(userId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,7 @@ public interface FilmStorage {
Map<Long, Set<Long>> getAllLikes();

Collection<Film> getCommonLikedFilms(long userId, long friendId);

/// Удаление фильма по id
void removeFilm(long filmId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,7 @@ public interface UserStorage {

/// Получить список id друзей
Collection<Long> getFriendIds(long userId);

/// Удаление пользователя по id
void removeUser(long userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -213,4 +213,9 @@ public Map<Long, Set<Long>> getAllLikes() {
public Collection<Film> getCommonLikedFilms(long userId, long friendId) {
return findManyFilms(SQL_FILMS_FIND_COMMON_LIKED, userId, friendId);
}

@Override
public void removeFilm(long filmId) {
updateWithControl("DELETE FROM films WHERE id = ?", filmId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,11 @@ public Set<Long> getFriendIds(long userId) {
return findColumnByQuery(sql, Long.class, userId);
}

@Override
public void removeUser(long userId) {
updateWithControl("DELETE FROM users WHERE id = ?", userId);
}

@Override
public boolean checkUserIsNotPresent(Long userId) {
return checkIdIsNotPresentInTable(userId, "users");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,9 @@ public Map<Long, Set<Long>> getAllLikes() {
public Collection<Film> getCommonLikedFilms(long userId, long friendId) {
throw new MethodNotImplementedException();
}

@Override
public void removeFilm(long filmId) {
throw new MethodNotImplementedException();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,9 @@ public Collection<Long> getFriendIds(long userId) {
throw new MethodNotImplementedException();
}

@Override
public void removeUser(long userId) {
throw new MethodNotImplementedException();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,14 @@ public FilmDto update(FilmUpdateRequest request) {
return FilmMapper.mapToFilmDto(newFilm, mpa, filmGenres, filmDirectors);
}

public void remove(long filmId) {
log.info("Удаление фильма с id={}", filmId);
if (filmStorage.checkFilmIsNotPresent(filmId)) {
throw new NotFoundException("Фильм с id=" + filmId + " не найден.");
}
filmStorage.removeFilm(filmId);
}

private Mpa validateMpa(Film film) {
log.trace("Проверка рейтинга MPAA");
int mpaId = film.getMpaId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,14 @@ public UserDto update(UserUpdateRequest request) {
return UserMapper.mapToUserDto(newUser);
}

public void remove(long userId) {
log.info("Удаление пользователя с id={}.", userId);
if (userStorage.checkUserIsNotPresent(userId)) {
throw new NotFoundException("Пользователь с id=" + userId + " не найден.");
}
userStorage.removeUser(userId);
}

public UserDto findUserDtoById(long userId) {
log.info("Поиск пользователя с id={}.", userId);
return UserMapper.mapToUserDto(findUser(userId));
Expand Down
26 changes: 13 additions & 13 deletions src/main/resources/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ CREATE TABLE users (
user_name varchar(50),
login varchar(50) NOT NULL,
email varchar(50) NOT NULL,
birthday date NOT NULL
birthday date NOT NULL
);

CREATE TABLE friends (
Expand Down Expand Up @@ -82,31 +82,31 @@ CREATE TABLE events (
);

ALTER TABLE friends ADD CONSTRAINT fk_friends_user_id FOREIGN KEY(user_id)
REFERENCES users (id);
REFERENCES users (id) ON DELETE CASCADE;

ALTER TABLE friends ADD CONSTRAINT fk_friends_friend_id FOREIGN KEY(friend_id)
REFERENCES users (id);
REFERENCES users (id) ON DELETE CASCADE;

ALTER TABLE films ADD CONSTRAINT fk_films_mpa_id FOREIGN KEY(mpa_id)
REFERENCES mpa (id);
REFERENCES mpa (id) ON DELETE SET NULL;

ALTER TABLE genres_of_films ADD CONSTRAINT fk_genres_of_films_genre_id FOREIGN KEY(genre_id)
REFERENCES genres (id);
REFERENCES genres (id) ON DELETE CASCADE;

ALTER TABLE genres_of_films ADD CONSTRAINT fk_genres_of_films_film_id FOREIGN KEY(film_id)
REFERENCES films (id);
REFERENCES films (id) ON DELETE CASCADE;

ALTER TABLE likes ADD CONSTRAINT fk_likes_user_id FOREIGN KEY(user_id)
REFERENCES users (id);
REFERENCES users (id) ON DELETE CASCADE;

ALTER TABLE likes ADD CONSTRAINT fk_likes_film_id FOREIGN KEY(film_id)
REFERENCES films (id);
REFERENCES films (id) ON DELETE CASCADE;

ALTER TABLE DIRECTORS_OF_FILMS ADD CONSTRAINT fk_directors_of_films_director_id FOREIGN KEY(director_id)
REFERENCES directors (id);
REFERENCES directors (id) ON DELETE CASCADE;

ALTER TABLE DIRECTORS_OF_FILMS ADD CONSTRAINT fk_directors_of_films_film_id FOREIGN KEY(film_id)
REFERENCES films (id);
REFERENCES films (id) ON DELETE CASCADE;

ALTER TABLE reviews ADD CONSTRAINT fk_reviews_user_id FOREIGN KEY (user_id)
REFERENCES users (id) ON DELETE CASCADE;
Expand All @@ -115,13 +115,13 @@ ALTER TABLE reviews ADD CONSTRAINT fk_reviews_film_id FOREIGN KEY (film_id)
REFERENCES films (id) ON DELETE CASCADE;

ALTER TABLE review_likes ADD CONSTRAINT fk_review_likes_review_id FOREIGN KEY (review_id)
REFERENCES reviews (id);
REFERENCES reviews (id) ON DELETE CASCADE;

ALTER TABLE review_likes ADD CONSTRAINT fk_review_likes_user_id FOREIGN KEY (user_id)
REFERENCES users (id);
REFERENCES users (id) ON DELETE CASCADE;

ALTER TABLE events ADD CONSTRAINT fk_events_user_id FOREIGN KEY(user_id)
REFERENCES users (id);
REFERENCES users (id) ON DELETE CASCADE;

CREATE INDEX IF NOT EXISTS idx_users_user_name ON users (user_name);
CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users (email);
Expand Down
Loading