Skip to content

Commit 81d0d5a

Browse files
authored
Merge pull request #3 from LevshaKS/add-database
ТЗ 12
2 parents a35ae52 + 7a59e85 commit 81d0d5a

46 files changed

Lines changed: 1574 additions & 217 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,103 @@
1-
# java-filmorate
2-
Template repository for Filmorate project.
1+
# Filmorate
2+
Это проект кинотеки, в который можно добавлять комментарии, оценивать фильмы находить самые популярные а так добавлять
3+
в друзья пользователей кинотеки.
4+
5+
# Схема БД
6+
<img alt="Схема БД" src="filmorate.png">
7+
8+
# Примеры запросов
9+
10+
### Для пользователей
11+
12+
* Создание пользователя
13+
```SQL
14+
INSERT INTO users(email,
15+
login,
16+
name,
17+
birthday)
18+
VALUES (?,?,?,?);
19+
```
20+
21+
* Обновление пользователя
22+
```SQL
23+
UPDATE users
24+
SET email=?,
25+
login=?,
26+
name=?,
27+
birthday=?
28+
WHERE id=?;
29+
```
30+
* Получение пользоывтеля по ID
31+
```SQL
32+
SELECT * FROM users WHERE id=?;
33+
```
34+
* Получение всех пользователей
35+
```SQL
36+
SELECT * FROM users;
37+
```
38+
* Удаление пользователя
39+
```SQL
40+
DELETE FROM users WHERE id=?;
41+
```
42+
* Добавление в список друзей
43+
```SQL
44+
INSERT INTO friends (user_id, to_user_id) VALUES (?,?);
45+
```
46+
* Получение списка друзей
47+
```SQL
48+
"SELECT to_user_id FROM friends WHERE user_id=?;
49+
```
50+
* Обновление списка друзей
51+
```SQL
52+
DELETE FROM users WHERE id=?;
53+
```
54+
### Для фильмов
55+
56+
* Добавление фильма
57+
```SQL
58+
INSERT INTO films(name,
59+
description,
60+
release_date,
61+
duration,
62+
mpa_rating_id)
63+
VALUES(?,?,?,?,?);
64+
```
65+
* Обновление фильма
66+
```SQL
67+
UPDATE films SET name=?,
68+
description=?,
69+
release_date=?,
70+
duration=?,
71+
mpa_rating_id=?
72+
WHERE id=?;
73+
```
74+
* Удаление фильма
75+
```SQL
76+
DELETE FROM films WHERE id=?;
77+
```
78+
* Получение фильма по ID
79+
```SQL
80+
SELECT * FROM films WHERE id=?;
81+
```
82+
* Получение всех фильмов
83+
```SQL
84+
SELECT * FROM films;
85+
```
86+
* Получение списка лайков фильма
87+
```SQL
88+
SELECT user_id FROM film_likes WHERE film_id=?;
89+
```
90+
* Добавление лайка фильма
91+
```SQL
92+
INSERT INTO film_likes(film_id, user_id) VALUES (?,?);
93+
```
94+
* Удвление лайка фильма
95+
```SQL
96+
DELETE FROM film_likes WHERE film_id=? AND user_id=?;
97+
```
98+
* Получение списка жанров фильма
99+
```SQL
100+
SELECT g.genre_id AS id, gs.name AS name
101+
FROM genre AS g LEFT OUTER JOIN genres AS gs ON g.genre_id = gs.id
102+
WHERE g.film_id =? ORDER BY id";
103+
```

filmorate.png

31.5 KB
Loading

pom.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,24 @@
7171
<artifactId>logbook-spring-boot-starter</artifactId>
7272
<version>3.7.2</version>
7373
</dependency>
74+
<dependency>
75+
<groupId>org.springframework.boot</groupId>
76+
<artifactId>spring-boot-starter-jdbc</artifactId>
77+
</dependency>
78+
<dependency>
79+
<groupId>org.springframework.boot</groupId>
80+
<artifactId>spring-boot-starter-test</artifactId>
81+
</dependency>
82+
83+
<dependency>
84+
<groupId>org.springframework.boot</groupId>
85+
<artifactId>spring-boot-starter-data-jpa</artifactId>
86+
</dependency>
87+
<dependency>
88+
<groupId>com.h2database</groupId>
89+
<artifactId>h2</artifactId>
90+
<scope>runtime</scope>
91+
</dependency>
7492
</dependencies>
7593

7694
<build>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package ru.yandex.practicum.filmorate.controller;
2+
3+
import jakarta.validation.constraints.Positive;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.http.HttpStatus;
8+
import org.springframework.validation.annotation.Validated;
9+
10+
import org.springframework.web.bind.annotation.*;
11+
import ru.yandex.practicum.filmorate.model.Genre;
12+
import ru.yandex.practicum.filmorate.service.GenreService;
13+
14+
import java.util.Collection;
15+
16+
@Validated
17+
@RestController
18+
@RequestMapping("/genres")
19+
public class GenreController {
20+
21+
private final GenreService genreService;
22+
private final Logger logger = LoggerFactory.getLogger(GenreService.class);
23+
24+
@Autowired
25+
public GenreController(GenreService genreService) {
26+
this.genreService = genreService;
27+
}
28+
29+
@GetMapping({"/{id}"})
30+
@ResponseStatus(HttpStatus.OK)
31+
public Genre getGenreId(@Positive(message = "неверное значение") @PathVariable long id) {
32+
logger.info("возращаем жанр по id: " + id);
33+
return genreService.getGenreId(id);
34+
}
35+
36+
@GetMapping
37+
@ResponseStatus(HttpStatus.OK)
38+
public Collection<Genre> getGenreAll() {
39+
logger.info("возращаем список жанров");
40+
return genreService.getGenreAll();
41+
}
42+
43+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package ru.yandex.practicum.filmorate.controller;
2+
3+
4+
import jakarta.validation.constraints.Positive;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.http.HttpStatus;
9+
import org.springframework.validation.annotation.Validated;
10+
import org.springframework.web.bind.annotation.*;
11+
import ru.yandex.practicum.filmorate.model.Mpa;
12+
import ru.yandex.practicum.filmorate.service.MpaService;
13+
14+
import java.util.Collection;
15+
16+
@Validated
17+
@RestController
18+
@RequestMapping("/mpa")
19+
public class MpaController {
20+
private final Logger logger = LoggerFactory.getLogger(MpaController.class);
21+
22+
private final MpaService mpaService;
23+
24+
@Autowired
25+
public MpaController(MpaService mpaService) {
26+
this.mpaService = mpaService;
27+
}
28+
29+
30+
@GetMapping({"/{id}"})
31+
@ResponseStatus(HttpStatus.OK)
32+
public Mpa getMpaId(@Positive(message = "неверное значение") @PathVariable long id) {
33+
logger.info("возращаем жанр по id: " + id);
34+
return mpaService.getMpaId(id);
35+
}
36+
37+
@GetMapping
38+
@ResponseStatus(HttpStatus.OK)
39+
public Collection<Mpa> getMpaAll() {
40+
logger.info("возращаем список жанров");
41+
return mpaService.getMpaAll();
42+
}
43+
}

src/main/java/ru/yandex/practicum/filmorate/controller/UserController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public Collection<User> friendsGetList(@Positive(message = "неверное з
9090
@ResponseStatus(HttpStatus.OK)
9191
public Collection<User> friendsGetCommonList(@Positive(message = "неверное значение") @PathVariable long id,
9292
@Positive(message = "неверное значение") @PathVariable long otherId) {
93-
logger.info("показывает список друзей");
93+
logger.info("показывает обший список друзей");
9494
return userService.friendsGetCommonList(id, otherId);
9595
}
9696
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package ru.yandex.practicum.filmorate.exception;
2+
3+
public class NotFoundException extends RuntimeException {
4+
public NotFoundException(String message) {
5+
super(message);
6+
}
7+
}

src/main/java/ru/yandex/practicum/filmorate/model/Film.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,11 @@
55
import lombok.*;
66

77
import java.time.LocalDate;
8+
import java.util.HashSet;
89
import java.util.Set;
910

10-
/**
11-
* Film.
12-
*/
13-
@Getter
14-
@Setter
15-
@ToString
16-
@AllArgsConstructor
11+
@Data
12+
@NoArgsConstructor
1713
public class Film extends DataModel implements Comparable<Film> {
1814

1915
private Long id;
@@ -34,7 +30,12 @@ public class Film extends DataModel implements Comparable<Film> {
3430
@Min(1)
3531
private int duration;
3632

37-
private Set<Long> likesId;
33+
private Set<Long> likesId = new HashSet<>();
34+
35+
private Set<Genre> genres = new HashSet<>();
36+
37+
// @NotNull (message ="рейтинг не может быть пустым")
38+
private Mpa mpa;
3839

3940
@Override
4041
public int compareTo(Film o) {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ru.yandex.practicum.filmorate.model;
2+
3+
import lombok.Data;
4+
import lombok.NoArgsConstructor;
5+
import lombok.NonNull;
6+
7+
@Data
8+
@NoArgsConstructor
9+
public class Friends {
10+
11+
@NonNull
12+
private long userId;
13+
14+
@NonNull
15+
private long toUserId;
16+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package ru.yandex.practicum.filmorate.model;
2+
3+
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
import lombok.NonNull;
7+
8+
@Data
9+
@NoArgsConstructor
10+
public class Genre extends DataModel {
11+
12+
@NonNull
13+
private Long id;
14+
15+
@NonNull
16+
private String name;
17+
18+
}

0 commit comments

Comments
 (0)