diff --git a/src/main/java/ru/yandex/practicum/catsgram/CatsgramApplication.java b/develop/src/main/java/ru/yandex/practicum/catsgram/CatsgramApplication.java similarity index 99% rename from src/main/java/ru/yandex/practicum/catsgram/CatsgramApplication.java rename to develop/src/main/java/ru/yandex/practicum/catsgram/CatsgramApplication.java index 63f822d5..c789fb59 100644 --- a/src/main/java/ru/yandex/practicum/catsgram/CatsgramApplication.java +++ b/develop/src/main/java/ru/yandex/practicum/catsgram/CatsgramApplication.java @@ -9,5 +9,4 @@ public class CatsgramApplication { public static void main(String[] args) { SpringApplication.run(CatsgramApplication.class, args); } - } diff --git a/src/main/java/ru/yandex/practicum/catsgram/controller/PostController.java b/develop/src/main/java/ru/yandex/practicum/catsgram/controller/PostController.java similarity index 69% rename from src/main/java/ru/yandex/practicum/catsgram/controller/PostController.java rename to develop/src/main/java/ru/yandex/practicum/catsgram/controller/PostController.java index 2b19e51d..d6e9ddc7 100644 --- a/src/main/java/ru/yandex/practicum/catsgram/controller/PostController.java +++ b/develop/src/main/java/ru/yandex/practicum/catsgram/controller/PostController.java @@ -1,20 +1,23 @@ package ru.yandex.practicum.catsgram.controller; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import ru.yandex.practicum.catsgram.model.Post; +import ru.yandex.practicum.catsgram.models.Post; import java.util.ArrayList; import java.util.List; @RestController public class PostController { - + private static final Logger log = LoggerFactory.getLogger(PostController.class); private final List posts = new ArrayList<>(); @GetMapping("/posts") public List findAll() { + log.debug("Текущее количество постов: {}", posts.size()); return posts; } diff --git a/src/main/java/ru/yandex/practicum/catsgram/controller/SimpleController.java b/develop/src/main/java/ru/yandex/practicum/catsgram/controller/SimpleController.java similarity index 100% rename from src/main/java/ru/yandex/practicum/catsgram/controller/SimpleController.java rename to develop/src/main/java/ru/yandex/practicum/catsgram/controller/SimpleController.java diff --git a/develop/src/main/java/ru/yandex/practicum/catsgram/controller/UserController.java b/develop/src/main/java/ru/yandex/practicum/catsgram/controller/UserController.java new file mode 100644 index 00000000..94d7aa0f --- /dev/null +++ b/develop/src/main/java/ru/yandex/practicum/catsgram/controller/UserController.java @@ -0,0 +1,43 @@ +package ru.yandex.practicum.catsgram.controller; + +import org.springframework.web.bind.annotation.*; +import ru.yandex.practicum.catsgram.models.User; +import ru.yandex.practicum.catsgram.exception.InvalidEmailException; +import ru.yandex.practicum.catsgram.exception.UserAlreadyExistException; + +import java.util.*; + +@RestController +@RequestMapping("/users") +public class UserController { + private final Map users = new HashMap<>(); + + @GetMapping + public Collection findAll() { + return users.values(); + } + + @PostMapping + public User create(@RequestBody User user) { + if(user.getEmail() == null || user.getEmail().isBlank()) { + throw new InvalidEmailException("Адрес электронной почты не может быть пустым."); + } + if(users.containsKey(user.getEmail())) { + throw new UserAlreadyExistException("Пользователь с электронной почтой " + + user.getEmail() + " уже зарегистрирован."); + } + users.put(user.getEmail(), user); + return user; + } + + @PutMapping + public User put(@RequestBody User user) { + if(user.getEmail() == null || user.getEmail().isBlank()) { + throw new InvalidEmailException("Адрес электронной почты не может быть пустым."); + } + users.put(user.getEmail(), user); + + return user; + } +} + diff --git a/develop/src/main/java/ru/yandex/practicum/catsgram/exception/InvalidEmailException.java b/develop/src/main/java/ru/yandex/practicum/catsgram/exception/InvalidEmailException.java new file mode 100644 index 00000000..47fd862b --- /dev/null +++ b/develop/src/main/java/ru/yandex/practicum/catsgram/exception/InvalidEmailException.java @@ -0,0 +1,7 @@ +package ru.yandex.practicum.catsgram.exception; + +public class InvalidEmailException extends RuntimeException { + public InvalidEmailException(String s) { + super(s); + } +} \ No newline at end of file diff --git a/develop/src/main/java/ru/yandex/practicum/catsgram/exception/UserAlreadyExistException.java b/develop/src/main/java/ru/yandex/practicum/catsgram/exception/UserAlreadyExistException.java new file mode 100644 index 00000000..b3681b26 --- /dev/null +++ b/develop/src/main/java/ru/yandex/practicum/catsgram/exception/UserAlreadyExistException.java @@ -0,0 +1,7 @@ +package ru.yandex.practicum.catsgram.exception; + +public class UserAlreadyExistException extends RuntimeException { + public UserAlreadyExistException(String s) { + super(s); + } +} \ No newline at end of file diff --git a/src/main/java/ru/yandex/practicum/catsgram/model/Post.java b/develop/src/main/java/ru/yandex/practicum/catsgram/models/Post.java similarity index 95% rename from src/main/java/ru/yandex/practicum/catsgram/model/Post.java rename to develop/src/main/java/ru/yandex/practicum/catsgram/models/Post.java index 6a4b8868..7d18f1d1 100644 --- a/src/main/java/ru/yandex/practicum/catsgram/model/Post.java +++ b/develop/src/main/java/ru/yandex/practicum/catsgram/models/Post.java @@ -1,4 +1,4 @@ -package ru.yandex.practicum.catsgram.model; +package ru.yandex.practicum.catsgram.models; import java.time.Instant; diff --git a/develop/src/main/java/ru/yandex/practicum/catsgram/models/User.java b/develop/src/main/java/ru/yandex/practicum/catsgram/models/User.java new file mode 100644 index 00000000..1352b4d5 --- /dev/null +++ b/develop/src/main/java/ru/yandex/practicum/catsgram/models/User.java @@ -0,0 +1,47 @@ +package ru.yandex.practicum.catsgram.models; + +import java.time.LocalDate; +import java.util.Objects; + +public class User { + private String email; + private String nickname; + private LocalDate birthdate; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public LocalDate getBirthdate() { + return birthdate; + } + + public void setBirthdate(LocalDate birthdate) { + this.birthdate = birthdate; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + User user = (User) o; + return email.equals(user.email); + } + + @Override + public int hashCode() { + return Objects.hash(email); + } +} \ No newline at end of file diff --git a/develop/src/main/resources/application.properties b/develop/src/main/resources/application.properties new file mode 100644 index 00000000..235f65ce --- /dev/null +++ b/develop/src/main/resources/application.properties @@ -0,0 +1,2 @@ +logging.level.org.zalando.logbook=TRACE +logging.level.ru.yandex.practicum.contollers=debug diff --git a/src/test/java/ru/yandex/practicum/catsgram/CatsgramApplicationTests.java b/develop/src/test/java/ru/yandex/practicum/catsgram/CatsgramApplicationTests.java similarity index 79% rename from src/test/java/ru/yandex/practicum/catsgram/CatsgramApplicationTests.java rename to develop/src/test/java/ru/yandex/practicum/catsgram/CatsgramApplicationTests.java index 32936573..c01905c9 100644 --- a/src/test/java/ru/yandex/practicum/catsgram/CatsgramApplicationTests.java +++ b/develop/src/test/java/ru/yandex/practicum/catsgram/CatsgramApplicationTests.java @@ -1,4 +1,4 @@ -package test.java.ru.yandex.practicum.catsgram; +package ru.yandex.practicum.catsgram; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/pom.xml b/pom.xml index a4bdb80c..43c441d0 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.1 + 2.6.2 ru.yandex.practicum @@ -22,11 +22,33 @@ spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-logging + + + org.zalando + logbook-spring-boot-starter + 2.14.0 + + org.springframework.boot spring-boot-starter-test test + + org.testng + testng + RELEASE + compile + + + org.junit.jupiter + junit-jupiter-api + 5.8.1 + compile + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 8b137891..00000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -