diff --git a/README.md b/README.md index 18a246e..8896883 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ # java-explore-with-me Template repository for ExploreWithMe project. + + +https://github.com/NadezhdaTA/java-explore-with-me/pull/4 \ No newline at end of file diff --git a/evm-service/src/main/java/ru/practicum/Category/Model/Category.java b/evm-service/src/main/java/ru/practicum/Category/Model/Category.java deleted file mode 100644 index 92b44d1..0000000 --- a/evm-service/src/main/java/ru/practicum/Category/Model/Category.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.practicum.Category.Model; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Entity -@Table(name = "categories") -public class Category { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - private Integer id; - - @Column(name = "name", length = 50) - private String name; -} diff --git a/evm-service/src/main/java/ru/practicum/User/Model/User.java b/evm-service/src/main/java/ru/practicum/User/Model/User.java deleted file mode 100644 index 9e08ef5..0000000 --- a/evm-service/src/main/java/ru/practicum/User/Model/User.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.practicum.User.Model; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Entity -@Table(name = "users") -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - private Integer id; - - @Column(name = "email", length = 500) - private String email; - - @Column(name = "name", length = 250) - private String name; -} diff --git a/evm-service/src/main/java/ru/practicum/Category/Controller/CategoryAdminController.java b/evm-service/src/main/java/ru/practicum/category/controller/CategoryAdminController.java similarity index 66% rename from evm-service/src/main/java/ru/practicum/Category/Controller/CategoryAdminController.java rename to evm-service/src/main/java/ru/practicum/category/controller/CategoryAdminController.java index 6864f84..091f21d 100644 --- a/evm-service/src/main/java/ru/practicum/Category/Controller/CategoryAdminController.java +++ b/evm-service/src/main/java/ru/practicum/category/controller/CategoryAdminController.java @@ -1,34 +1,39 @@ -package ru.practicum.Category.Controller; +package ru.practicum.category.controller; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import ru.practicum.Category.DTO.CategoryDTO; -import ru.practicum.Category.DTO.NewCategoryDTO; -import ru.practicum.Category.Service.Admin.CategoryAdminServiceImpl; +import ru.practicum.category.dto.CategoryDTO; +import ru.practicum.category.dto.NewCategoryDTO; +import ru.practicum.category.service.admin.CategoryAdminService; @RestController @RequestMapping("/admin/categories") @RequiredArgsConstructor +@Slf4j public class CategoryAdminController { - private final CategoryAdminServiceImpl categoryService; + private final CategoryAdminService categoryService; @PostMapping @ResponseStatus(HttpStatus.CREATED) public CategoryDTO createCategory(@RequestBody @Valid NewCategoryDTO category) { + log.info("Create new category: {}", category); return categoryService.addCategory(category); } @DeleteMapping("/{catId}") @ResponseStatus(HttpStatus.NO_CONTENT) public void deleteCategory(@PathVariable Integer catId) { + log.info("Delete category: {}", catId); categoryService.deleteCategory(catId); } @PatchMapping("/{catId}") @ResponseStatus(HttpStatus.OK) public CategoryDTO updateCategory(@PathVariable Integer catId, @RequestBody @Valid CategoryDTO category) { + log.info("Update category: {}, {}", catId, category); return categoryService.updateCategory(catId, category); } diff --git a/evm-service/src/main/java/ru/practicum/Category/Controller/CategoryPublicController.java b/evm-service/src/main/java/ru/practicum/category/controller/CategoryPublicController.java similarity index 73% rename from evm-service/src/main/java/ru/practicum/Category/Controller/CategoryPublicController.java rename to evm-service/src/main/java/ru/practicum/category/controller/CategoryPublicController.java index 65cbea9..7958546 100644 --- a/evm-service/src/main/java/ru/practicum/Category/Controller/CategoryPublicController.java +++ b/evm-service/src/main/java/ru/practicum/category/controller/CategoryPublicController.java @@ -1,28 +1,32 @@ -package ru.practicum.Category.Controller; +package ru.practicum.category.controller; import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ru.practicum.Category.DTO.CategoryDTO; -import ru.practicum.Category.Service.Public.CategoryPublicService; +import ru.practicum.category.dto.CategoryDTO; +import ru.practicum.category.service.open.CategoryPublicService; import java.util.List; @RestController @RequestMapping("/categories") @RequiredArgsConstructor +@Slf4j public class CategoryPublicController { private final CategoryPublicService categoryService; @GetMapping("/{catId}") public CategoryDTO getCategory(@PathVariable Integer catId) { + log.info("Get category: {}", catId); return categoryService.getCategory(catId); } @GetMapping public List getCategories(@RequestParam(defaultValue = "0") @PositiveOrZero Integer from, @RequestParam(defaultValue = "10") @Positive Integer size) { + log.info("Get categories: {}, {}", from, size); return categoryService.getCategories(from, size); } } diff --git a/evm-service/src/main/java/ru/practicum/Category/DTO/CategoryDTO.java b/evm-service/src/main/java/ru/practicum/category/dto/CategoryDTO.java similarity index 90% rename from evm-service/src/main/java/ru/practicum/Category/DTO/CategoryDTO.java rename to evm-service/src/main/java/ru/practicum/category/dto/CategoryDTO.java index fdc9e3d..c538012 100644 --- a/evm-service/src/main/java/ru/practicum/Category/DTO/CategoryDTO.java +++ b/evm-service/src/main/java/ru/practicum/category/dto/CategoryDTO.java @@ -1,4 +1,4 @@ -package ru.practicum.Category.DTO; +package ru.practicum.category.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; diff --git a/evm-service/src/main/java/ru/practicum/Category/DTO/NewCategoryDTO.java b/evm-service/src/main/java/ru/practicum/category/dto/NewCategoryDTO.java similarity index 90% rename from evm-service/src/main/java/ru/practicum/Category/DTO/NewCategoryDTO.java rename to evm-service/src/main/java/ru/practicum/category/dto/NewCategoryDTO.java index 0e0dbfc..d08d156 100644 --- a/evm-service/src/main/java/ru/practicum/Category/DTO/NewCategoryDTO.java +++ b/evm-service/src/main/java/ru/practicum/category/dto/NewCategoryDTO.java @@ -1,4 +1,4 @@ -package ru.practicum.Category.DTO; +package ru.practicum.category.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; diff --git a/evm-service/src/main/java/ru/practicum/Category/Mapper/CategoryMapper.java b/evm-service/src/main/java/ru/practicum/category/mapper/CategoryMapper.java similarity index 59% rename from evm-service/src/main/java/ru/practicum/Category/Mapper/CategoryMapper.java rename to evm-service/src/main/java/ru/practicum/category/mapper/CategoryMapper.java index a1d82dd..9c9e464 100644 --- a/evm-service/src/main/java/ru/practicum/Category/Mapper/CategoryMapper.java +++ b/evm-service/src/main/java/ru/practicum/category/mapper/CategoryMapper.java @@ -1,9 +1,9 @@ -package ru.practicum.Category.Mapper; +package ru.practicum.category.mapper; import org.mapstruct.Mapper; -import ru.practicum.Category.DTO.CategoryDTO; -import ru.practicum.Category.DTO.NewCategoryDTO; -import ru.practicum.Category.Model.Category; +import ru.practicum.category.dto.CategoryDTO; +import ru.practicum.category.dto.NewCategoryDTO; +import ru.practicum.category.model.Category; @Mapper(componentModel = "spring") public interface CategoryMapper { diff --git a/evm-service/src/main/java/ru/practicum/category/model/Category.java b/evm-service/src/main/java/ru/practicum/category/model/Category.java new file mode 100644 index 0000000..28b61ce --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/category/model/Category.java @@ -0,0 +1,37 @@ +package ru.practicum.category.model; + +import jakarta.persistence.*; +import lombok.*; + +import java.util.Objects; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +@Entity +@Table(name = "categories") +public class Category { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @Column(name = "name", length = 50) + private String name; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Category category = (Category) o; + return Objects.equals(id, category.id); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } +} diff --git a/evm-service/src/main/java/ru/practicum/Category/Repository/CategoryRepository.java b/evm-service/src/main/java/ru/practicum/category/repository/CategoryRepository.java similarity index 77% rename from evm-service/src/main/java/ru/practicum/Category/Repository/CategoryRepository.java rename to evm-service/src/main/java/ru/practicum/category/repository/CategoryRepository.java index f1634f8..66ca1a0 100644 --- a/evm-service/src/main/java/ru/practicum/Category/Repository/CategoryRepository.java +++ b/evm-service/src/main/java/ru/practicum/category/repository/CategoryRepository.java @@ -1,7 +1,7 @@ -package ru.practicum.Category.Repository; +package ru.practicum.category.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ru.practicum.Category.Model.Category; +import ru.practicum.category.model.Category; import java.util.Optional; diff --git a/evm-service/src/main/java/ru/practicum/Category/Service/Admin/CategoryAdminService.java b/evm-service/src/main/java/ru/practicum/category/service/admin/CategoryAdminService.java similarity index 59% rename from evm-service/src/main/java/ru/practicum/Category/Service/Admin/CategoryAdminService.java rename to evm-service/src/main/java/ru/practicum/category/service/admin/CategoryAdminService.java index 4609760..f95304e 100644 --- a/evm-service/src/main/java/ru/practicum/Category/Service/Admin/CategoryAdminService.java +++ b/evm-service/src/main/java/ru/practicum/category/service/admin/CategoryAdminService.java @@ -1,7 +1,7 @@ -package ru.practicum.Category.Service.Admin; +package ru.practicum.category.service.admin; -import ru.practicum.Category.DTO.CategoryDTO; -import ru.practicum.Category.DTO.NewCategoryDTO; +import ru.practicum.category.dto.CategoryDTO; +import ru.practicum.category.dto.NewCategoryDTO; public interface CategoryAdminService { CategoryDTO addCategory(NewCategoryDTO categoryDTO); diff --git a/evm-service/src/main/java/ru/practicum/Category/Service/Admin/CategoryAdminServiceImpl.java b/evm-service/src/main/java/ru/practicum/category/service/admin/CategoryAdminServiceImpl.java similarity index 56% rename from evm-service/src/main/java/ru/practicum/Category/Service/Admin/CategoryAdminServiceImpl.java rename to evm-service/src/main/java/ru/practicum/category/service/admin/CategoryAdminServiceImpl.java index 3e13534..5ffd9e4 100644 --- a/evm-service/src/main/java/ru/practicum/Category/Service/Admin/CategoryAdminServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/category/service/admin/CategoryAdminServiceImpl.java @@ -1,21 +1,23 @@ -package ru.practicum.Category.Service.Admin; +package ru.practicum.category.service.admin; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ru.practicum.Category.DTO.CategoryDTO; -import ru.practicum.Category.DTO.NewCategoryDTO; -import ru.practicum.Category.Mapper.CategoryMapper; -import ru.practicum.Category.Model.Category; -import ru.practicum.Category.Repository.CategoryRepository; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Repository.EventRepository; -import ru.practicum.Exception.ConflictException; -import ru.practicum.Exception.NotFoundException; +import ru.practicum.category.dto.CategoryDTO; +import ru.practicum.category.dto.NewCategoryDTO; +import ru.practicum.category.mapper.CategoryMapper; +import ru.practicum.category.model.Category; +import ru.practicum.category.repository.CategoryRepository; +import ru.practicum.event.model.Event; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.ConflictException; +import ru.practicum.exception.NotFoundException; import java.util.List; @Service @RequiredArgsConstructor +@Slf4j public class CategoryAdminServiceImpl implements CategoryAdminService { private final CategoryMapper categoryMapper; private final CategoryRepository repository; @@ -24,7 +26,9 @@ public class CategoryAdminServiceImpl implements CategoryAdminService { @Override public CategoryDTO addCategory(NewCategoryDTO newCategory) { Category category = categoryMapper.toCategory(newCategory); - return categoryMapper.toCategoryDTO(repository.save(category)); + CategoryDTO categoryDTO = categoryMapper.toCategoryDTO(repository.save(category)); + log.info("Category is added: {}", categoryDTO); + return categoryDTO; } @Override @@ -37,9 +41,8 @@ public void deleteCategory(Integer catId) { throw new ConflictException("Category with id " + catId + " has connected events"); } - // Integer categoryEvents = - repository.deleteById(catId); + log.info("Category is deleted: {}", category); } @Override @@ -47,13 +50,15 @@ public CategoryDTO updateCategory(int id, CategoryDTO newCategory) { Category category = repository.findById(id) .orElseThrow(() -> new NotFoundException("Category with id " + id + " not found")); + CategoryDTO categoryDTO; if (category.getName().equals(newCategory.getName())) { - return categoryMapper.toCategoryDTO(category); + categoryDTO = categoryMapper.toCategoryDTO(category); } else { - return categoryMapper.toCategoryDTO(repository.save(categoryMapper.toCategory(newCategory))); + categoryDTO = categoryMapper.toCategoryDTO(repository.save(categoryMapper.toCategory(newCategory))); } - + log.info("Category is updated: {}", categoryDTO); + return categoryDTO; } diff --git a/evm-service/src/main/java/ru/practicum/Category/Service/Public/CategoryPublicService.java b/evm-service/src/main/java/ru/practicum/category/service/open/CategoryPublicService.java similarity index 66% rename from evm-service/src/main/java/ru/practicum/Category/Service/Public/CategoryPublicService.java rename to evm-service/src/main/java/ru/practicum/category/service/open/CategoryPublicService.java index 7d614ec..81d5fde 100644 --- a/evm-service/src/main/java/ru/practicum/Category/Service/Public/CategoryPublicService.java +++ b/evm-service/src/main/java/ru/practicum/category/service/open/CategoryPublicService.java @@ -1,6 +1,6 @@ -package ru.practicum.Category.Service.Public; +package ru.practicum.category.service.open; -import ru.practicum.Category.DTO.CategoryDTO; +import ru.practicum.category.dto.CategoryDTO; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/Category/Service/Public/CategoryPublicServiceImpl.java b/evm-service/src/main/java/ru/practicum/category/service/open/CategoryPublicServiceImpl.java similarity index 67% rename from evm-service/src/main/java/ru/practicum/Category/Service/Public/CategoryPublicServiceImpl.java rename to evm-service/src/main/java/ru/practicum/category/service/open/CategoryPublicServiceImpl.java index fb00324..301327c 100644 --- a/evm-service/src/main/java/ru/practicum/Category/Service/Public/CategoryPublicServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/category/service/open/CategoryPublicServiceImpl.java @@ -1,21 +1,23 @@ -package ru.practicum.Category.Service.Public; +package ru.practicum.category.service.open; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; -import ru.practicum.Category.DTO.CategoryDTO; -import ru.practicum.Category.Mapper.CategoryMapper; -import ru.practicum.Category.Model.Category; -import ru.practicum.Category.Repository.CategoryRepository; -import ru.practicum.Exception.NotFoundException; +import ru.practicum.category.dto.CategoryDTO; +import ru.practicum.category.mapper.CategoryMapper; +import ru.practicum.category.model.Category; +import ru.practicum.category.repository.CategoryRepository; +import ru.practicum.exception.NotFoundException; import java.util.List; @Service @RequiredArgsConstructor +@Slf4j public class CategoryPublicServiceImpl implements CategoryPublicService { private final CategoryRepository repository; private final CategoryMapper categoryMapper; @@ -24,15 +26,16 @@ public class CategoryPublicServiceImpl implements CategoryPublicService { public CategoryDTO getCategory(Integer catId) { Category category = repository.findById(catId) .orElseThrow(() -> new NotFoundException("Category with id " + catId + " not found")); - return categoryMapper.toCategoryDTO(category); + CategoryDTO categoryDTO = categoryMapper.toCategoryDTO(category); + log.info("Category is found: {}", categoryDTO); + return categoryDTO; } - - @Override public List getCategories(Integer from, Integer size) { Pageable pageable = PageRequest.of(from, size, Sort.by("id").ascending()); Page categories = repository.findAll(pageable); + log.info("Found categories are sent"); return categories.getContent().stream() .map(categoryMapper::toCategoryDTO) .toList(); diff --git a/evm-service/src/main/java/ru/practicum/comment/controller/CommentPrivateController.java b/evm-service/src/main/java/ru/practicum/comment/controller/CommentPrivateController.java new file mode 100644 index 0000000..56d2ef1 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/controller/CommentPrivateController.java @@ -0,0 +1,52 @@ +package ru.practicum.comment.controller; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import ru.practicum.comment.dto.CommentDTO; +import ru.practicum.comment.dto.NewCommentDTO; +import ru.practicum.comment.dto.UpdateCommentDTO; +import ru.practicum.comment.service.close.CommentPrivateService; + + +@RestController +@RequestMapping("/events/comments") +@RequiredArgsConstructor +@Slf4j +public class CommentPrivateController { + private final CommentPrivateService commentService; + public static final String USER_ID = "X-User-Id"; + + @PostMapping("/{eventId}") + @ResponseStatus(HttpStatus.CREATED) + public CommentDTO addComment(@RequestBody NewCommentDTO commentDTO, + @RequestHeader(USER_ID) Integer userId, + @PathVariable Integer eventId) { + log.info("Adding comment to event with id = {}, userId = {}, " + + "comment : {}", eventId, userId, commentDTO); + return commentService.addComment(commentDTO, userId, eventId); + } + + @GetMapping("/{commentId}") + public CommentDTO getComment(@PathVariable Integer commentId) { + log.info("Getting comment by id: {}", commentId); + return commentService.getComment(commentId); + } + + @PatchMapping("/{commentId}") + public CommentDTO updateComment(@RequestHeader(USER_ID) Integer userId, + @RequestBody UpdateCommentDTO dto, + @PathVariable Integer commentId) { + log.info("Updating comment with id = {}, userId = {}, comment: {}", commentId, userId, dto); + return commentService.updateComment(dto, userId, commentId); + } + + @DeleteMapping("/{commentId}") + public void deleteComment(@RequestHeader(USER_ID) Integer userId, + @PathVariable Integer commentId) { + log.info("Deleting comment with id = {} by user with id = {}", commentId, userId); + commentService.deleteComment(commentId, userId); + } + +} diff --git a/evm-service/src/main/java/ru/practicum/comment/controller/CommentPublicController.java b/evm-service/src/main/java/ru/practicum/comment/controller/CommentPublicController.java new file mode 100644 index 0000000..aef391f --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/controller/CommentPublicController.java @@ -0,0 +1,28 @@ +package ru.practicum.comment.controller; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import jakarta.validation.constraints.PositiveOrZero; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import ru.practicum.comment.dto.CommentDTO; +import ru.practicum.comment.service.open.CommentPublicService; + +import java.util.List; + +@RestController +@RequestMapping("/event/{eventId}/comments") +@RequiredArgsConstructor +@Slf4j +public class CommentPublicController { + private final CommentPublicService commentPublicInterface; + + @GetMapping + public List getComments(@PathVariable @NotNull Integer eventId, + @RequestParam(defaultValue = "0") @PositiveOrZero Integer from, + @RequestParam(defaultValue = "10") @Positive Integer size) { + log.info("Getting comments to event with id = {}, from - {}, size - {}", eventId, from, size); + return commentPublicInterface.getComments(eventId, from, size); + } +} diff --git a/evm-service/src/main/java/ru/practicum/comment/dto/CommentDTO.java b/evm-service/src/main/java/ru/practicum/comment/dto/CommentDTO.java new file mode 100644 index 0000000..bf6140d --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/dto/CommentDTO.java @@ -0,0 +1,28 @@ +package ru.practicum.comment.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.comment.model.Status; +import ru.practicum.event.dto.EventCommentsDTO; +import ru.practicum.user.model.User; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CommentDTO { + + private Integer id; + + private String comment; + + private User author; + + private EventCommentsDTO event; + + private LocalDateTime createdAt; + + private Status status; +} diff --git a/evm-service/src/main/java/ru/practicum/comment/dto/NewCommentDTO.java b/evm-service/src/main/java/ru/practicum/comment/dto/NewCommentDTO.java new file mode 100644 index 0000000..9a2fcda --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/dto/NewCommentDTO.java @@ -0,0 +1,27 @@ +package ru.practicum.comment.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import ru.practicum.StatsRequestDTO; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class NewCommentDTO { + + @NotNull + @Size(max = 7000) + @JsonProperty("comment") + private String comment; + + @DateTimeFormat(pattern = StatsRequestDTO.DATE_FORMAT) + private final LocalDateTime createdAt = LocalDateTime.now(); + +} diff --git a/evm-service/src/main/java/ru/practicum/comment/dto/UpdateCommentDTO.java b/evm-service/src/main/java/ru/practicum/comment/dto/UpdateCommentDTO.java new file mode 100644 index 0000000..165f6d5 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/dto/UpdateCommentDTO.java @@ -0,0 +1,26 @@ +package ru.practicum.comment.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import ru.practicum.StatsRequestDTO; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UpdateCommentDTO { + + @NotNull + @Size(max = 7000) + @JsonProperty("comment") + private String comment; + + @DateTimeFormat(pattern = StatsRequestDTO.DATE_FORMAT) + private final LocalDateTime updatedAt = LocalDateTime.now(); +} diff --git a/evm-service/src/main/java/ru/practicum/comment/dto/UpdatedCommentDTO.java b/evm-service/src/main/java/ru/practicum/comment/dto/UpdatedCommentDTO.java new file mode 100644 index 0000000..e8ff2f2 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/dto/UpdatedCommentDTO.java @@ -0,0 +1,7 @@ +package ru.practicum.comment.dto; + +import java.time.LocalDateTime; + +public class UpdatedCommentDTO extends CommentDTO { + private LocalDateTime updatedAt; +} diff --git a/evm-service/src/main/java/ru/practicum/comment/mapper/CommentsMapper.java b/evm-service/src/main/java/ru/practicum/comment/mapper/CommentsMapper.java new file mode 100644 index 0000000..a7702c6 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/mapper/CommentsMapper.java @@ -0,0 +1,19 @@ +package ru.practicum.comment.mapper; + +import org.mapstruct.Mapper; +import ru.practicum.comment.dto.CommentDTO; +import ru.practicum.comment.dto.NewCommentDTO; +import ru.practicum.comment.dto.UpdateCommentDTO; +import ru.practicum.comment.dto.UpdatedCommentDTO; +import ru.practicum.comment.model.Comment; + +@Mapper(componentModel = "spring") +public interface CommentsMapper { + CommentDTO toCommentDTO(Comment comment); + + Comment toComment(NewCommentDTO commentDTO); + + UpdatedCommentDTO toUpdatedCommentDTO(Comment comment); + + Comment toComment(UpdateCommentDTO commentDTO); +} diff --git a/evm-service/src/main/java/ru/practicum/comment/model/Comment.java b/evm-service/src/main/java/ru/practicum/comment/model/Comment.java new file mode 100644 index 0000000..3ccb1f1 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/model/Comment.java @@ -0,0 +1,58 @@ +package ru.practicum.comment.model; + +import jakarta.persistence.*; +import lombok.*; +import ru.practicum.event.model.Event; +import ru.practicum.user.model.User; + +import java.time.LocalDateTime; +import java.util.Objects; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +@Entity +@Table(name = "comments") +public class Comment { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @Column(name = "comment", length = 7000) + private String comment; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "author_id") + private User author; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "event_id") + private Event event; + + @Column(name = "created_at") + private final LocalDateTime createdAt = LocalDateTime.now(); + + @Column(name = "updated_at") + private LocalDateTime updatedAt; + + @Enumerated(EnumType.STRING) + @Column(name = "status") + private Status status; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Comment comment = (Comment) o; + return Objects.equals(id, comment.id); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } +} diff --git a/evm-service/src/main/java/ru/practicum/comment/model/Status.java b/evm-service/src/main/java/ru/practicum/comment/model/Status.java new file mode 100644 index 0000000..0b7a7e8 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/model/Status.java @@ -0,0 +1,6 @@ +package ru.practicum.comment.model; + +public enum Status { + CREATED, + UPDATED +} diff --git a/evm-service/src/main/java/ru/practicum/comment/repository/CommentsRepository.java b/evm-service/src/main/java/ru/practicum/comment/repository/CommentsRepository.java new file mode 100644 index 0000000..bf31e50 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/repository/CommentsRepository.java @@ -0,0 +1,20 @@ +package ru.practicum.comment.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.practicum.comment.model.Comment; + +import org.springframework.data.domain.Pageable; +import java.util.List; +import java.util.Optional; + +public interface CommentsRepository extends JpaRepository { + Comment save(Comment comment); + + List findCommentsByEvent_Id(Integer eventId, Pageable pageable); + + Optional findById(Integer commentId); + + Comment findCommentByEvent_IdAndAuthor_Id(Integer eventId, Integer authorId); + + Optional findCommentById(Integer commentId); +} diff --git a/evm-service/src/main/java/ru/practicum/comment/service/close/CommentPrivateService.java b/evm-service/src/main/java/ru/practicum/comment/service/close/CommentPrivateService.java new file mode 100644 index 0000000..2633c90 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/service/close/CommentPrivateService.java @@ -0,0 +1,15 @@ +package ru.practicum.comment.service.close; + +import ru.practicum.comment.dto.CommentDTO; +import ru.practicum.comment.dto.NewCommentDTO; +import ru.practicum.comment.dto.UpdateCommentDTO; + +public interface CommentPrivateService { + CommentDTO addComment(NewCommentDTO commentDTO, Integer userId, Integer eventId); + + CommentDTO getComment(Integer commentId); + + CommentDTO updateComment(UpdateCommentDTO commentDTO, Integer userId, Integer commentId); + + void deleteComment(Integer commentId, Integer userId); +} diff --git a/evm-service/src/main/java/ru/practicum/comment/service/close/CommentPrivateServiceImpl.java b/evm-service/src/main/java/ru/practicum/comment/service/close/CommentPrivateServiceImpl.java new file mode 100644 index 0000000..45dc6d5 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/service/close/CommentPrivateServiceImpl.java @@ -0,0 +1,125 @@ +package ru.practicum.comment.service.close; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.practicum.comment.dto.CommentDTO; +import ru.practicum.comment.dto.NewCommentDTO; +import ru.practicum.comment.dto.UpdateCommentDTO; +import ru.practicum.comment.mapper.CommentsMapper; +import ru.practicum.comment.model.Comment; +import ru.practicum.comment.model.Status; +import ru.practicum.comment.repository.CommentsRepository; +import ru.practicum.event.model.Event; +import ru.practicum.event.model.State; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.NotFoundException; +import ru.practicum.exception.ValidationException; +import ru.practicum.request.model.Request; +import ru.practicum.request.repository.RequestRepository; +import ru.practicum.user.model.User; +import ru.practicum.user.repository.UserRepository; + +import java.util.Objects; + +@Service +@RequiredArgsConstructor +@Slf4j +public class CommentPrivateServiceImpl implements CommentPrivateService { + private final CommentsRepository commentsRepository; + private final CommentsMapper commentsMapper; + private final UserRepository userRepository; + private final EventRepository eventRepository; + private final RequestRepository requestRepository; + + @Override + public CommentDTO addComment(NewCommentDTO commentDTO, Integer userId, Integer eventId) { + User user = checkUser(userId); + Event event = checkEvent(eventId); + + if (event.getEventDate().isBefore(commentDTO.getCreatedAt())) { + throw new ValidationException("Event date is before comment date"); + } + + Request request; + try { + request = requestRepository.findRequestsByEvent_IdAndRequester_Id(eventId, userId); + } catch (RuntimeException e) { + throw new NotFoundException("Request for user with id " + userId + + " and event with id " + eventId + " not found"); + } + + if (!request.getStatus().equals(State.CONFIRMED)) { + throw new ValidationException("Request is not confirmed"); + } + + Comment comment = commentsMapper.toComment(commentDTO); + comment.setStatus(Status.CREATED); + comment.setAuthor(user); + comment.setEvent(event); + + CommentDTO dto = commentsMapper.toCommentDTO(commentsRepository.save(comment)); + log.info("Added comment: {}", dto); + + return dto; + } + + @Override + public CommentDTO getComment(Integer commentId) { + Comment comment = commentsRepository.findById(commentId) + .orElseThrow(() -> new NotFoundException("Comment with id " + commentId + " not found")); + + CommentDTO dto; + if (comment.getStatus().equals(Status.CREATED)) { + dto = commentsMapper.toCommentDTO(comment); + } else { + dto = commentsMapper.toUpdatedCommentDTO(comment); + } + + log.info("Found comment: {}", dto); + return dto; + } + + @Override + public CommentDTO updateComment(UpdateCommentDTO commentDTO, Integer userId, Integer commentId) { + User user = checkUser(userId); + Comment comment = commentsRepository.findById(commentId) + .orElseThrow(() -> new NotFoundException("Comment with id " + commentId + " not found")); + + if (!Objects.equals(comment.getAuthor().getId(), user.getId())) { + throw new ValidationException("You are not allowed to update this comment"); + } + + comment.setComment(commentDTO.getComment()); + comment.setStatus(Status.UPDATED); + comment.setUpdatedAt(commentDTO.getUpdatedAt()); + + CommentDTO dto = commentsMapper.toUpdatedCommentDTO(commentsRepository.save(comment)); + log.info("Updated comment: {}", dto); + + return dto; + } + + @Override + public void deleteComment(Integer commentId, Integer userId) { + User user = checkUser(userId); + Comment comment = commentsRepository.findById(commentId) + .orElseThrow(() -> new NotFoundException("Comment with id " + commentId + " not found")); + if (!Objects.equals(comment.getAuthor().getId(), user.getId())) { + throw new ValidationException("You are not allowed to delete this comment"); + } + commentsRepository.deleteById(commentId); + log.info("Comment with id = {} is deleted", commentId); + } + + + private User checkUser(Integer id) { + return userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("User with id " + id + " not found")); + } + + private Event checkEvent(Integer id) { + return eventRepository.findEventById(id) + .orElseThrow(() -> new NotFoundException("Event with id " + id + " not found")); + } +} diff --git a/evm-service/src/main/java/ru/practicum/comment/service/open/CommentPublicService.java b/evm-service/src/main/java/ru/practicum/comment/service/open/CommentPublicService.java new file mode 100644 index 0000000..05bc37b --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/service/open/CommentPublicService.java @@ -0,0 +1,9 @@ +package ru.practicum.comment.service.open; + +import ru.practicum.comment.dto.CommentDTO; + +import java.util.List; + +public interface CommentPublicService { + List getComments(Integer eventId, Integer from, Integer size); +} diff --git a/evm-service/src/main/java/ru/practicum/comment/service/open/CommentPublicServiceImpl.java b/evm-service/src/main/java/ru/practicum/comment/service/open/CommentPublicServiceImpl.java new file mode 100644 index 0000000..ba241a8 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/comment/service/open/CommentPublicServiceImpl.java @@ -0,0 +1,37 @@ +package ru.practicum.comment.service.open; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import ru.practicum.comment.dto.CommentDTO; +import ru.practicum.comment.mapper.CommentsMapper; +import ru.practicum.comment.repository.CommentsRepository; +import ru.practicum.event.model.Event; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.NotFoundException; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Slf4j +public class CommentPublicServiceImpl implements CommentPublicService { + private final CommentsRepository commentsRepository; + private final CommentsMapper commentsMapper; + private final EventRepository eventRepository; + + @Override + public List getComments(Integer eventId, Integer from, Integer size) { + Event event = eventRepository.findById(eventId) + .orElseThrow(() -> new NotFoundException("Event with id " + eventId + " not found")); + + Pageable pageable = PageRequest.of(from, size); + + log.info("Found comments to event with id = {} are sent (from = {}, size = {})", eventId, from, size); + return commentsRepository.findCommentsByEvent_Id(eventId, pageable).stream() + .map(commentsMapper::toCommentDTO) + .toList(); + } +} diff --git a/evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/CompilationDTO.java b/evm-service/src/main/java/ru/practicum/compilation/compilationDTO/CompilationDTO.java similarity index 82% rename from evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/CompilationDTO.java rename to evm-service/src/main/java/ru/practicum/compilation/compilationDTO/CompilationDTO.java index 062239e..5adebfe 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/CompilationDTO.java +++ b/evm-service/src/main/java/ru/practicum/compilation/compilationDTO/CompilationDTO.java @@ -1,11 +1,11 @@ -package ru.practicum.Compilation.CompilationDTO; +package ru.practicum.compilation.compilationDTO; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Event.DTO.EventShortDTO; +import ru.practicum.event.dto.EventShortDTO; import java.util.Set; diff --git a/evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/CompilationsListRequestParams.java b/evm-service/src/main/java/ru/practicum/compilation/compilationDTO/CompilationsListRequestParams.java similarity index 86% rename from evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/CompilationsListRequestParams.java rename to evm-service/src/main/java/ru/practicum/compilation/compilationDTO/CompilationsListRequestParams.java index 02ca7bc..08d06fb 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/CompilationsListRequestParams.java +++ b/evm-service/src/main/java/ru/practicum/compilation/compilationDTO/CompilationsListRequestParams.java @@ -1,4 +1,4 @@ -package ru.practicum.Compilation.CompilationDTO; +package ru.practicum.compilation.compilationDTO; import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; diff --git a/evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/NewCompilationDTO.java b/evm-service/src/main/java/ru/practicum/compilation/compilationDTO/NewCompilationDTO.java similarity index 89% rename from evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/NewCompilationDTO.java rename to evm-service/src/main/java/ru/practicum/compilation/compilationDTO/NewCompilationDTO.java index 6286f29..5720699 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/NewCompilationDTO.java +++ b/evm-service/src/main/java/ru/practicum/compilation/compilationDTO/NewCompilationDTO.java @@ -1,4 +1,4 @@ -package ru.practicum.Compilation.CompilationDTO; +package ru.practicum.compilation.compilationDTO; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; diff --git a/evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/UpdateCompilationRequest.java b/evm-service/src/main/java/ru/practicum/compilation/compilationDTO/UpdateCompilationRequest.java similarity index 88% rename from evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/UpdateCompilationRequest.java rename to evm-service/src/main/java/ru/practicum/compilation/compilationDTO/UpdateCompilationRequest.java index 9339d0e..39116b4 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/CompilationDTO/UpdateCompilationRequest.java +++ b/evm-service/src/main/java/ru/practicum/compilation/compilationDTO/UpdateCompilationRequest.java @@ -1,4 +1,4 @@ -package ru.practicum.Compilation.CompilationDTO; +package ru.practicum.compilation.compilationDTO; import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Controller/CompilationAdminController.java b/evm-service/src/main/java/ru/practicum/compilation/controller/CompilationAdminController.java similarity index 63% rename from evm-service/src/main/java/ru/practicum/Compilation/Controller/CompilationAdminController.java rename to evm-service/src/main/java/ru/practicum/compilation/controller/CompilationAdminController.java index 24c1cf8..ecb496f 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Controller/CompilationAdminController.java +++ b/evm-service/src/main/java/ru/practicum/compilation/controller/CompilationAdminController.java @@ -1,23 +1,26 @@ -package ru.practicum.Compilation.Controller; +package ru.practicum.compilation.controller; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import ru.practicum.Compilation.CompilationDTO.CompilationDTO; -import ru.practicum.Compilation.CompilationDTO.NewCompilationDTO; -import ru.practicum.Compilation.CompilationDTO.UpdateCompilationRequest; -import ru.practicum.Compilation.Service.Admin.CompilationAdminServiceImpl; +import ru.practicum.compilation.compilationDTO.CompilationDTO; +import ru.practicum.compilation.compilationDTO.NewCompilationDTO; +import ru.practicum.compilation.compilationDTO.UpdateCompilationRequest; +import ru.practicum.compilation.service.admin.CompilationAdminService; @RestController @RequestMapping("/admin/compilations") @RequiredArgsConstructor +@Slf4j public class CompilationAdminController { - private final CompilationAdminServiceImpl compilationService; + private final CompilationAdminService compilationService; @PostMapping @ResponseStatus(HttpStatus.CREATED) public CompilationDTO addCompilation(@RequestBody @Valid NewCompilationDTO compilationDTO) { + log.info("Adding new compilation {}", compilationDTO); return compilationService.addCompilation(compilationDTO); } @@ -25,12 +28,14 @@ public CompilationDTO addCompilation(@RequestBody @Valid NewCompilationDTO compi @DeleteMapping("/{compId}") @ResponseStatus(HttpStatus.NO_CONTENT) public void deleteCompilation(@PathVariable Integer compId) { + log.info("Deleting compilation {}", compId); compilationService.deleteCompilation(compId); } @PatchMapping("/{compId}") public CompilationDTO updateCompilation(@PathVariable Integer compId, @RequestBody @Valid UpdateCompilationRequest compilationDTO) { + log.info("Updating compilation {}, {}", compId, compilationDTO); return compilationService.updateCompilation(compId, compilationDTO); } diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Controller/CompilationPublicController.java b/evm-service/src/main/java/ru/practicum/compilation/controller/CompilationPublicController.java similarity index 57% rename from evm-service/src/main/java/ru/practicum/Compilation/Controller/CompilationPublicController.java rename to evm-service/src/main/java/ru/practicum/compilation/controller/CompilationPublicController.java index 81fc643..73a4013 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Controller/CompilationPublicController.java +++ b/evm-service/src/main/java/ru/practicum/compilation/controller/CompilationPublicController.java @@ -1,26 +1,30 @@ -package ru.practicum.Compilation.Controller; +package ru.practicum.compilation.controller; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ru.practicum.Compilation.CompilationDTO.CompilationDTO; -import ru.practicum.Compilation.CompilationDTO.CompilationsListRequestParams; -import ru.practicum.Compilation.Service.Public.CompilationPublicServiceImpl; +import ru.practicum.compilation.compilationDTO.CompilationDTO; +import ru.practicum.compilation.compilationDTO.CompilationsListRequestParams; +import ru.practicum.compilation.service.open.CompilationPublicService; import java.util.List; @RestController @RequestMapping("/compilations") @RequiredArgsConstructor +@Slf4j public class CompilationPublicController { - private final CompilationPublicServiceImpl compilationService; + private final CompilationPublicService compilationService; @GetMapping("/{compId}") public CompilationDTO getCompilation(@PathVariable Integer compId) { + log.info("Getting compilation with id = {}", compId); return compilationService.getCompilation(compId); } @GetMapping public List getCompilations(@ModelAttribute CompilationsListRequestParams params) { + log.info("Getting compilations"); return compilationService.getCompilations(params); } } diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Mapper/CompilationMapper.java b/evm-service/src/main/java/ru/practicum/compilation/mapper/CompilationMapper.java similarity index 64% rename from evm-service/src/main/java/ru/practicum/Compilation/Mapper/CompilationMapper.java rename to evm-service/src/main/java/ru/practicum/compilation/mapper/CompilationMapper.java index 6020c2c..fed9d1f 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Mapper/CompilationMapper.java +++ b/evm-service/src/main/java/ru/practicum/compilation/mapper/CompilationMapper.java @@ -1,10 +1,10 @@ -package ru.practicum.Compilation.Mapper; +package ru.practicum.compilation.mapper; import org.mapstruct.Mapper; import org.mapstruct.Mapping; -import ru.practicum.Compilation.CompilationDTO.CompilationDTO; -import ru.practicum.Compilation.CompilationDTO.NewCompilationDTO; -import ru.practicum.Compilation.Model.Compilation; +import ru.practicum.compilation.compilationDTO.CompilationDTO; +import ru.practicum.compilation.compilationDTO.NewCompilationDTO; +import ru.practicum.compilation.model.Compilation; @Mapper(componentModel = "spring") public interface CompilationMapper { diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Model/Compilation.java b/evm-service/src/main/java/ru/practicum/compilation/model/Compilation.java similarity index 56% rename from evm-service/src/main/java/ru/practicum/Compilation/Model/Compilation.java rename to evm-service/src/main/java/ru/practicum/compilation/model/Compilation.java index 221ebbe..cc87cfe 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Model/Compilation.java +++ b/evm-service/src/main/java/ru/practicum/compilation/model/Compilation.java @@ -1,19 +1,21 @@ -package ru.practicum.Compilation.Model; +package ru.practicum.compilation.model; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.Event.Model.Event; +import lombok.*; +import ru.practicum.event.model.Event; +import java.util.Objects; import java.util.Set; -@Data +@Getter +@Setter +@ToString @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "compilations") public class Compilation { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") @@ -32,4 +34,17 @@ public class Compilation { @Column(name = "title") private String title; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Compilation c = (Compilation) o; + return Objects.equals(id, c.id); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } } diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Repository/CompilationRepository.java b/evm-service/src/main/java/ru/practicum/compilation/repository/CompilationRepository.java similarity index 82% rename from evm-service/src/main/java/ru/practicum/Compilation/Repository/CompilationRepository.java rename to evm-service/src/main/java/ru/practicum/compilation/repository/CompilationRepository.java index 8a4bc5c..6edbb07 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Repository/CompilationRepository.java +++ b/evm-service/src/main/java/ru/practicum/compilation/repository/CompilationRepository.java @@ -1,8 +1,8 @@ -package ru.practicum.Compilation.Repository; +package ru.practicum.compilation.repository; import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaRepository; -import ru.practicum.Compilation.Model.Compilation; +import ru.practicum.compilation.model.Compilation; import org.springframework.data.domain.Pageable; import java.util.Optional; diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Service/Admin/CompilationAdminService.java b/evm-service/src/main/java/ru/practicum/compilation/service/admin/CompilationAdminService.java similarity index 52% rename from evm-service/src/main/java/ru/practicum/Compilation/Service/Admin/CompilationAdminService.java rename to evm-service/src/main/java/ru/practicum/compilation/service/admin/CompilationAdminService.java index 71b3a9e..46871ab 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Service/Admin/CompilationAdminService.java +++ b/evm-service/src/main/java/ru/practicum/compilation/service/admin/CompilationAdminService.java @@ -1,8 +1,8 @@ -package ru.practicum.Compilation.Service.Admin; +package ru.practicum.compilation.service.admin; -import ru.practicum.Compilation.CompilationDTO.CompilationDTO; -import ru.practicum.Compilation.CompilationDTO.NewCompilationDTO; -import ru.practicum.Compilation.CompilationDTO.UpdateCompilationRequest; +import ru.practicum.compilation.compilationDTO.CompilationDTO; +import ru.practicum.compilation.compilationDTO.NewCompilationDTO; +import ru.practicum.compilation.compilationDTO.UpdateCompilationRequest; public interface CompilationAdminService { diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Service/Admin/CompilationAdminServiceImpl.java b/evm-service/src/main/java/ru/practicum/compilation/service/admin/CompilationAdminServiceImpl.java similarity index 62% rename from evm-service/src/main/java/ru/practicum/Compilation/Service/Admin/CompilationAdminServiceImpl.java rename to evm-service/src/main/java/ru/practicum/compilation/service/admin/CompilationAdminServiceImpl.java index 764c182..8a7f3e4 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Service/Admin/CompilationAdminServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/compilation/service/admin/CompilationAdminServiceImpl.java @@ -1,18 +1,19 @@ -package ru.practicum.Compilation.Service.Admin; +package ru.practicum.compilation.service.admin; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ru.practicum.Compilation.CompilationDTO.CompilationDTO; -import ru.practicum.Compilation.CompilationDTO.NewCompilationDTO; -import ru.practicum.Compilation.CompilationDTO.UpdateCompilationRequest; -import ru.practicum.Compilation.Mapper.CompilationMapper; -import ru.practicum.Compilation.Model.Compilation; -import ru.practicum.Compilation.Repository.CompilationRepository; -import ru.practicum.Event.Mapper.EventMapper; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Repository.EventRepository; -import ru.practicum.Exception.NotFoundException; +import ru.practicum.compilation.compilationDTO.CompilationDTO; +import ru.practicum.compilation.compilationDTO.NewCompilationDTO; +import ru.practicum.compilation.compilationDTO.UpdateCompilationRequest; +import ru.practicum.compilation.mapper.CompilationMapper; +import ru.practicum.compilation.model.Compilation; +import ru.practicum.compilation.repository.CompilationRepository; +import ru.practicum.event.mapper.EventMapper; +import ru.practicum.event.model.Event; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.NotFoundException; import java.util.HashSet; import java.util.List; @@ -20,6 +21,7 @@ @Service @RequiredArgsConstructor +@Slf4j public class CompilationAdminServiceImpl implements CompilationAdminService { private final CompilationRepository compilationRepository; private final EventRepository eventRepository; @@ -35,12 +37,15 @@ public CompilationDTO addCompilation(NewCompilationDTO compilationDTO) { compilation.setEvents(events); } - return compilationMapper.toDto(compilationRepository.save(compilation)); + CompilationDTO dto = compilationMapper.toDto(compilationRepository.save(compilation)); + log.info("Compilation is added: {}", dto); + return dto; } @Override public void deleteCompilation(Integer compId) { compilationRepository.delete(checkCompilation(compId)); + log.info("Compilation with id = {} is deleted", compId); } @Override @@ -52,7 +57,9 @@ public CompilationDTO updateCompilation(Integer compId, UpdateCompilationRequest compilation.setEvents(events); } - return compilationMapper.toDto(compilationRepository.save(compilation)); + CompilationDTO dto = compilationMapper.toDto(compilationRepository.save(compilation)); + log.info("Compilation with id = {} is updated: {}", compId, dto); + return dto; } private Compilation checkCompilation(Integer compId) { diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Service/Public/CompilationPublicService.java b/evm-service/src/main/java/ru/practicum/compilation/service/open/CompilationPublicService.java similarity index 55% rename from evm-service/src/main/java/ru/practicum/Compilation/Service/Public/CompilationPublicService.java rename to evm-service/src/main/java/ru/practicum/compilation/service/open/CompilationPublicService.java index 3b76595..fb5ccab 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Service/Public/CompilationPublicService.java +++ b/evm-service/src/main/java/ru/practicum/compilation/service/open/CompilationPublicService.java @@ -1,7 +1,7 @@ -package ru.practicum.Compilation.Service.Public; +package ru.practicum.compilation.service.open; -import ru.practicum.Compilation.CompilationDTO.CompilationDTO; -import ru.practicum.Compilation.CompilationDTO.CompilationsListRequestParams; +import ru.practicum.compilation.compilationDTO.CompilationDTO; +import ru.practicum.compilation.compilationDTO.CompilationsListRequestParams; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/Compilation/Service/Public/CompilationPublicServiceImpl.java b/evm-service/src/main/java/ru/practicum/compilation/service/open/CompilationPublicServiceImpl.java similarity index 84% rename from evm-service/src/main/java/ru/practicum/Compilation/Service/Public/CompilationPublicServiceImpl.java rename to evm-service/src/main/java/ru/practicum/compilation/service/open/CompilationPublicServiceImpl.java index f8a14b9..3b64845 100644 --- a/evm-service/src/main/java/ru/practicum/Compilation/Service/Public/CompilationPublicServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/compilation/service/open/CompilationPublicServiceImpl.java @@ -1,19 +1,20 @@ -package ru.practicum.Compilation.Service.Public; +package ru.practicum.compilation.service.open; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; -import ru.practicum.Compilation.CompilationDTO.CompilationDTO; -import ru.practicum.Compilation.CompilationDTO.CompilationsListRequestParams; -import ru.practicum.Compilation.Mapper.CompilationMapper; -import ru.practicum.Compilation.Model.Compilation; -import ru.practicum.Compilation.Repository.CompilationRepository; -import ru.practicum.Event.Mapper.EventMapper; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Repository.EventRepository; -import ru.practicum.Exception.NotFoundException; +import ru.practicum.compilation.compilationDTO.CompilationDTO; +import ru.practicum.compilation.compilationDTO.CompilationsListRequestParams; +import ru.practicum.compilation.mapper.CompilationMapper; +import ru.practicum.compilation.model.Compilation; +import ru.practicum.compilation.repository.CompilationRepository; +import ru.practicum.event.mapper.EventMapper; +import ru.practicum.event.model.Event; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.NotFoundException; import ru.practicum.StatsClient; import ru.practicum.ViewStatsDTO; @@ -24,6 +25,7 @@ @Service @RequiredArgsConstructor +@Slf4j public class CompilationPublicServiceImpl implements CompilationPublicService { private final CompilationRepository compilationRepository; private final CompilationMapper compilationMapper; @@ -44,6 +46,7 @@ public CompilationDTO getCompilation(Integer compId) { .peek(eventShortDTO -> eventShortDTO.setViews(views.get(eventShortDTO.getId()))); } + log.info("Compilation with id = {} is found: {}", compId, compilationDTO); return compilationDTO; } @@ -74,7 +77,7 @@ public List getCompilations(CompilationsListRequestParams params } ).toList(); } - + log.info("Found compilations are sent"); return compilationDtos; } diff --git a/evm-service/src/main/java/ru/practicum/Event/Controller/EventAdminController.java b/evm-service/src/main/java/ru/practicum/event/controller/EventAdminController.java similarity index 66% rename from evm-service/src/main/java/ru/practicum/Event/Controller/EventAdminController.java rename to evm-service/src/main/java/ru/practicum/event/controller/EventAdminController.java index 24f166c..626967a 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Controller/EventAdminController.java +++ b/evm-service/src/main/java/ru/practicum/event/controller/EventAdminController.java @@ -1,24 +1,27 @@ -package ru.practicum.Event.Controller; +package ru.practicum.event.controller; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import ru.practicum.Event.DTO.EventFullDTO; -import ru.practicum.Event.DTO.SearchEventsDTO; -import ru.practicum.Event.DTO.UpdateEventAdminRequest; -import ru.practicum.Event.Service.Admin.EventAdminService; +import ru.practicum.event.dto.EventFullDTO; +import ru.practicum.event.dto.SearchEventsDTO; +import ru.practicum.event.dto.UpdateEventAdminRequest; +import ru.practicum.event.service.admin.EventAdminService; import java.util.List; @RestController @RequestMapping("/admin/events") @RequiredArgsConstructor +@Slf4j public class EventAdminController { private final EventAdminService eventAdminService; @GetMapping public List getEvents(@ModelAttribute @Valid SearchEventsDTO dto) { + log.info("Searching events with parameters {}", dto); return eventAdminService.getEvents(dto); } @@ -26,6 +29,7 @@ public List getEvents(@ModelAttribute @Valid SearchEventsDTO dto) @ResponseStatus(HttpStatus.OK) public EventFullDTO updateEvent(@PathVariable Integer eventId, @RequestBody @Valid UpdateEventAdminRequest request) { + log.info("Updating event with id {}: {}", eventId, request); return eventAdminService.updateEvent(eventId, request); } diff --git a/evm-service/src/main/java/ru/practicum/Event/Controller/EventPrivateController.java b/evm-service/src/main/java/ru/practicum/event/controller/EventPrivateController.java similarity index 72% rename from evm-service/src/main/java/ru/practicum/Event/Controller/EventPrivateController.java rename to evm-service/src/main/java/ru/practicum/event/controller/EventPrivateController.java index fb82c2c..cd1134a 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Controller/EventPrivateController.java +++ b/evm-service/src/main/java/ru/practicum/event/controller/EventPrivateController.java @@ -1,26 +1,29 @@ -package ru.practicum.Event.Controller; +package ru.practicum.event.controller; import jakarta.validation.Valid; import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import ru.practicum.Event.DTO.*; -import ru.practicum.Event.Service.Private.EventPrivateServiceImpl; -import ru.practicum.Request.RequestDTO.ParticipationRequestDto; +import ru.practicum.event.dto.*; +import ru.practicum.event.service.close.EventPrivateService; +import ru.practicum.request.requestDTO.ParticipationRequestDto; import java.util.List; @RestController @RequestMapping("/users/{userId}/events") @RequiredArgsConstructor +@Slf4j public class EventPrivateController { - private final EventPrivateServiceImpl eventPrivateService; + private final EventPrivateService eventPrivateService; @PostMapping @ResponseStatus(HttpStatus.CREATED) public EventFullDTO addEvent(@PathVariable Integer userId, @RequestBody @Valid NewEventDTO event) { + log.info("Adding new event {}", event); return eventPrivateService.addEvent(userId, event); } @@ -28,11 +31,13 @@ public EventFullDTO addEvent(@PathVariable Integer userId, @RequestBody @Valid N public List getEvents(@PathVariable Integer userId, @RequestParam(defaultValue = "0") @PositiveOrZero Integer from, @RequestParam(defaultValue = "10") @Positive Integer size) { + log.info("Getting events by user with id = {} from {} to {}", userId, from, size); return eventPrivateService.getEvents(userId, from, size); } @GetMapping("/{eventId}") public EventFullDTO getEvent(@PathVariable Integer userId, @PathVariable Integer eventId) { + log.info("Getting event with id {} by user with id = {}", eventId, userId); return eventPrivateService.getEvent(userId, eventId); } @@ -40,12 +45,14 @@ public EventFullDTO getEvent(@PathVariable Integer userId, @PathVariable Integer public EventFullDTO updateEvent(@PathVariable Integer userId, @PathVariable Integer eventId, @RequestBody @Valid UpdateEventUserRequest event) { + log.info("Updating event with id {} by user with id = {}: {}", eventId, userId, event); return eventPrivateService.updateEvent(userId, eventId, event); } @GetMapping("/{eventId}/requests") public List getUserRequests(@PathVariable Integer userId, @PathVariable Integer eventId) { + log.info("Getting user participation requests by user with id = {} and event with id = {}", userId, eventId); return eventPrivateService.getUserRequests(userId, eventId); } @@ -53,6 +60,7 @@ public List getUserRequests(@PathVariable Integer userI public EventRequestStatusUpdateResult updateRequests(@RequestBody @Valid EventRequestStatusUpdateRequest request, @PathVariable Integer userId, @PathVariable Integer eventId) { + log.info("Updating participation request in event with id {} by user with id = {}: {}", eventId, userId, request); return eventPrivateService.updateRequests(request, userId, eventId); } diff --git a/evm-service/src/main/java/ru/practicum/Event/Controller/EventPublicController.java b/evm-service/src/main/java/ru/practicum/event/controller/EventPublicController.java similarity index 62% rename from evm-service/src/main/java/ru/practicum/Event/Controller/EventPublicController.java rename to evm-service/src/main/java/ru/practicum/event/controller/EventPublicController.java index d559408..8d46078 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Controller/EventPublicController.java +++ b/evm-service/src/main/java/ru/practicum/event/controller/EventPublicController.java @@ -1,13 +1,14 @@ -package ru.practicum.Event.Controller; +package ru.practicum.event.controller; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ru.practicum.Event.DTO.EventFullDTO; -import ru.practicum.Event.DTO.EventPublicParams; -import ru.practicum.Event.DTO.EventShortDTO; -import ru.practicum.Event.Service.Public.EventPublicServiceImpl; +import ru.practicum.event.dto.EventFullDTO; +import ru.practicum.event.dto.EventPublicParams; +import ru.practicum.event.dto.EventShortDTO; +import ru.practicum.event.service.open.EventPublicService; import java.util.List; @@ -15,17 +16,20 @@ @RestController @RequestMapping("/events") @RequiredArgsConstructor +@Slf4j public class EventPublicController { - private final EventPublicServiceImpl eventPublicService; + private final EventPublicService eventPublicService; @GetMapping("/{id}") public EventFullDTO findEventById(@PathVariable Integer id, HttpServletRequest request) { + log.info("Finding event with id {}", id); return eventPublicService.findEventById(id, request); } @GetMapping public List findAllEvents(@ModelAttribute @Valid EventPublicParams params, HttpServletRequest request) { + log.info("Finding all events with {} params", params); return eventPublicService.findAllEvents(params, request); } } diff --git a/evm-service/src/main/java/ru/practicum/event/dto/EventCommentsDTO.java b/evm-service/src/main/java/ru/practicum/event/dto/EventCommentsDTO.java new file mode 100644 index 0000000..72e6e96 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/event/dto/EventCommentsDTO.java @@ -0,0 +1,25 @@ +package ru.practicum.event.dto; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class EventCommentsDTO { + + private Integer id; + + private String title; + + private String annotation; + + private String description; + + private LocalDateTime eventDate; + +} diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/EventFullDTO.java b/evm-service/src/main/java/ru/practicum/event/dto/EventFullDTO.java similarity index 83% rename from evm-service/src/main/java/ru/practicum/Event/DTO/EventFullDTO.java rename to evm-service/src/main/java/ru/practicum/event/dto/EventFullDTO.java index 71d8c1e..576b116 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/EventFullDTO.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/EventFullDTO.java @@ -1,14 +1,14 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Category.DTO.CategoryDTO; +import ru.practicum.category.dto.CategoryDTO; import ru.practicum.StatsRequestDTO; -import ru.practicum.User.DTO.UserShortDTO; -import ru.practicum.Event.Model.Location; -import ru.practicum.Event.Model.State; +import ru.practicum.user.dto.UserShortDTO; +import ru.practicum.event.model.Location; +import ru.practicum.event.model.State; import java.time.LocalDateTime; diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/EventPublicParams.java b/evm-service/src/main/java/ru/practicum/event/dto/EventPublicParams.java similarity index 96% rename from evm-service/src/main/java/ru/practicum/Event/DTO/EventPublicParams.java rename to evm-service/src/main/java/ru/practicum/event/dto/EventPublicParams.java index 0224c91..5d502d6 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/EventPublicParams.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/EventPublicParams.java @@ -1,4 +1,4 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/EventRequestStatusUpdateRequest.java b/evm-service/src/main/java/ru/practicum/event/dto/EventRequestStatusUpdateRequest.java similarity index 85% rename from evm-service/src/main/java/ru/practicum/Event/DTO/EventRequestStatusUpdateRequest.java rename to evm-service/src/main/java/ru/practicum/event/dto/EventRequestStatusUpdateRequest.java index b7bade6..f8942cd 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/EventRequestStatusUpdateRequest.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/EventRequestStatusUpdateRequest.java @@ -1,11 +1,11 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Event.Model.State; +import ru.practicum.event.model.State; import java.util.ArrayList; diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/EventRequestStatusUpdateResult.java b/evm-service/src/main/java/ru/practicum/event/dto/EventRequestStatusUpdateResult.java similarity index 77% rename from evm-service/src/main/java/ru/practicum/Event/DTO/EventRequestStatusUpdateResult.java rename to evm-service/src/main/java/ru/practicum/event/dto/EventRequestStatusUpdateResult.java index 215b2be..0f8a350 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/EventRequestStatusUpdateResult.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/EventRequestStatusUpdateResult.java @@ -1,9 +1,9 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Request.RequestDTO.ParticipationRequestDto; +import ru.practicum.request.requestDTO.ParticipationRequestDto; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/EventShortDTO.java b/evm-service/src/main/java/ru/practicum/event/dto/EventShortDTO.java similarity index 86% rename from evm-service/src/main/java/ru/practicum/Event/DTO/EventShortDTO.java rename to evm-service/src/main/java/ru/practicum/event/dto/EventShortDTO.java index b268a70..74a528b 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/EventShortDTO.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/EventShortDTO.java @@ -1,4 +1,4 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.validation.constraints.NotBlank; @@ -6,9 +6,9 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Category.DTO.CategoryDTO; +import ru.practicum.category.dto.CategoryDTO; import ru.practicum.StatsRequestDTO; -import ru.practicum.User.DTO.UserShortDTO; +import ru.practicum.user.dto.UserShortDTO; import java.time.LocalDateTime; diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/NewEventDTO.java b/evm-service/src/main/java/ru/practicum/event/dto/NewEventDTO.java similarity index 93% rename from evm-service/src/main/java/ru/practicum/Event/DTO/NewEventDTO.java rename to evm-service/src/main/java/ru/practicum/event/dto/NewEventDTO.java index 8d840c2..f559788 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/NewEventDTO.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/NewEventDTO.java @@ -1,4 +1,4 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; @@ -6,7 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Event.Model.Location; +import ru.practicum.event.model.Location; import ru.practicum.StatsRequestDTO; import java.time.LocalDateTime; diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/SearchEventsDTO.java b/evm-service/src/main/java/ru/practicum/event/dto/SearchEventsDTO.java similarity index 92% rename from evm-service/src/main/java/ru/practicum/Event/DTO/SearchEventsDTO.java rename to evm-service/src/main/java/ru/practicum/event/dto/SearchEventsDTO.java index f037783..510c8c4 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/SearchEventsDTO.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/SearchEventsDTO.java @@ -1,4 +1,4 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; @@ -6,7 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import ru.practicum.Event.Model.State; +import ru.practicum.event.model.State; import ru.practicum.StatsRequestDTO; import java.time.LocalDateTime; diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/UpdateEventAdminRequest.java b/evm-service/src/main/java/ru/practicum/event/dto/UpdateEventAdminRequest.java similarity index 88% rename from evm-service/src/main/java/ru/practicum/Event/DTO/UpdateEventAdminRequest.java rename to evm-service/src/main/java/ru/practicum/event/dto/UpdateEventAdminRequest.java index 52d08f6..7793ded 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/UpdateEventAdminRequest.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/UpdateEventAdminRequest.java @@ -1,4 +1,4 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.validation.constraints.Future; @@ -6,8 +6,8 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Event.Model.Location; -import ru.practicum.Event.Model.State; +import ru.practicum.event.model.Location; +import ru.practicum.event.model.State; import ru.practicum.StatsRequestDTO; import java.time.LocalDateTime; diff --git a/evm-service/src/main/java/ru/practicum/Event/DTO/UpdateEventUserRequest.java b/evm-service/src/main/java/ru/practicum/event/dto/UpdateEventUserRequest.java similarity index 89% rename from evm-service/src/main/java/ru/practicum/Event/DTO/UpdateEventUserRequest.java rename to evm-service/src/main/java/ru/practicum/event/dto/UpdateEventUserRequest.java index b605ab0..952835f 100644 --- a/evm-service/src/main/java/ru/practicum/Event/DTO/UpdateEventUserRequest.java +++ b/evm-service/src/main/java/ru/practicum/event/dto/UpdateEventUserRequest.java @@ -1,4 +1,4 @@ -package ru.practicum.Event.DTO; +package ru.practicum.event.dto; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.validation.constraints.Future; @@ -7,8 +7,8 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Event.Model.Location; -import ru.practicum.Event.Model.State; +import ru.practicum.event.model.Location; +import ru.practicum.event.model.State; import ru.practicum.StatsRequestDTO; import java.time.LocalDateTime; diff --git a/evm-service/src/main/java/ru/practicum/Event/Mapper/EventMapper.java b/evm-service/src/main/java/ru/practicum/event/mapper/EventMapper.java similarity index 63% rename from evm-service/src/main/java/ru/practicum/Event/Mapper/EventMapper.java rename to evm-service/src/main/java/ru/practicum/event/mapper/EventMapper.java index 74afdec..92f4264 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Mapper/EventMapper.java +++ b/evm-service/src/main/java/ru/practicum/event/mapper/EventMapper.java @@ -1,11 +1,8 @@ -package ru.practicum.Event.Mapper; +package ru.practicum.event.mapper; import org.mapstruct.*; -import ru.practicum.Event.DTO.EventFullDTO; -import ru.practicum.Event.DTO.EventShortDTO; -import ru.practicum.Event.DTO.NewEventDTO; -import ru.practicum.Event.DTO.UpdateEventAdminRequest; -import ru.practicum.Event.Model.Event; +import ru.practicum.event.model.Event; +import ru.practicum.event.dto.*; @Mapper(componentModel = "spring") public interface EventMapper { @@ -18,4 +15,6 @@ public interface EventMapper { @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) @Mapping(target = "category", ignore = true) Event toEvent(UpdateEventAdminRequest request, @MappingTarget Event event); + + EventCommentsDTO toEventCommentsDTO(Event event); } diff --git a/evm-service/src/main/java/ru/practicum/Event/Model/Event.java b/evm-service/src/main/java/ru/practicum/event/model/Event.java similarity index 73% rename from evm-service/src/main/java/ru/practicum/Event/Model/Event.java rename to evm-service/src/main/java/ru/practicum/event/model/Event.java index 2b81c22..383a494 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Model/Event.java +++ b/evm-service/src/main/java/ru/practicum/event/model/Event.java @@ -1,15 +1,16 @@ -package ru.practicum.Event.Model; +package ru.practicum.event.model; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.Category.Model.Category; -import ru.practicum.User.Model.User; +import lombok.*; +import ru.practicum.category.model.Category; +import ru.practicum.user.model.User; import java.time.LocalDateTime; +import java.util.Objects; -@Data +@Getter +@Setter +@ToString @NoArgsConstructor @AllArgsConstructor @Entity @@ -67,4 +68,17 @@ public class Event { @Column(name = "views") private Integer views = 0; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Event event = (Event) o; + return Objects.equals(id, event.id); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } } diff --git a/evm-service/src/main/java/ru/practicum/Event/Model/Location.java b/evm-service/src/main/java/ru/practicum/event/model/Location.java similarity index 88% rename from evm-service/src/main/java/ru/practicum/Event/Model/Location.java rename to evm-service/src/main/java/ru/practicum/event/model/Location.java index f97e67e..04fc8cb 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Model/Location.java +++ b/evm-service/src/main/java/ru/practicum/event/model/Location.java @@ -1,4 +1,4 @@ -package ru.practicum.Event.Model; +package ru.practicum.event.model; import jakarta.persistence.*; import lombok.AllArgsConstructor; diff --git a/evm-service/src/main/java/ru/practicum/Event/Model/State.java b/evm-service/src/main/java/ru/practicum/event/model/State.java similarity index 83% rename from evm-service/src/main/java/ru/practicum/Event/Model/State.java rename to evm-service/src/main/java/ru/practicum/event/model/State.java index 33b5d70..3c83bf1 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Model/State.java +++ b/evm-service/src/main/java/ru/practicum/event/model/State.java @@ -1,4 +1,4 @@ -package ru.practicum.Event.Model; +package ru.practicum.event.model; public enum State { diff --git a/evm-service/src/main/java/ru/practicum/Event/Repository/EventRepository.java b/evm-service/src/main/java/ru/practicum/event/repository/EventRepository.java similarity index 86% rename from evm-service/src/main/java/ru/practicum/Event/Repository/EventRepository.java rename to evm-service/src/main/java/ru/practicum/event/repository/EventRepository.java index 22782e2..afbbf0b 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Repository/EventRepository.java +++ b/evm-service/src/main/java/ru/practicum/event/repository/EventRepository.java @@ -1,11 +1,11 @@ -package ru.practicum.Event.Repository; +package ru.practicum.event.repository; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.JpaRepository; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Model.State; +import ru.practicum.event.model.Event; +import ru.practicum.event.model.State; import java.util.List; import java.util.Optional; diff --git a/evm-service/src/main/java/ru/practicum/Event/Service/Admin/EventAdminService.java b/evm-service/src/main/java/ru/practicum/event/service/admin/EventAdminService.java similarity index 53% rename from evm-service/src/main/java/ru/practicum/Event/Service/Admin/EventAdminService.java rename to evm-service/src/main/java/ru/practicum/event/service/admin/EventAdminService.java index 1b4a0c9..7b0c53d 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Service/Admin/EventAdminService.java +++ b/evm-service/src/main/java/ru/practicum/event/service/admin/EventAdminService.java @@ -1,8 +1,8 @@ -package ru.practicum.Event.Service.Admin; +package ru.practicum.event.service.admin; -import ru.practicum.Event.DTO.EventFullDTO; -import ru.practicum.Event.DTO.SearchEventsDTO; -import ru.practicum.Event.DTO.UpdateEventAdminRequest; +import ru.practicum.event.dto.EventFullDTO; +import ru.practicum.event.dto.SearchEventsDTO; +import ru.practicum.event.dto.UpdateEventAdminRequest; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/Event/Service/Admin/EventAdminServiceImpl.java b/evm-service/src/main/java/ru/practicum/event/service/admin/EventAdminServiceImpl.java similarity index 81% rename from evm-service/src/main/java/ru/practicum/Event/Service/Admin/EventAdminServiceImpl.java rename to evm-service/src/main/java/ru/practicum/event/service/admin/EventAdminServiceImpl.java index b5200e9..1f9e876 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Service/Admin/EventAdminServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/event/service/admin/EventAdminServiceImpl.java @@ -1,21 +1,22 @@ -package ru.practicum.Event.Service.Admin; +package ru.practicum.event.service.admin; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; -import ru.practicum.Category.Repository.CategoryRepository; -import ru.practicum.Event.DTO.EventFullDTO; -import ru.practicum.Event.DTO.SearchEventsDTO; -import ru.practicum.Event.DTO.UpdateEventAdminRequest; -import ru.practicum.Event.Mapper.EventMapper; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Model.State; -import ru.practicum.Event.Repository.EventRepository; -import ru.practicum.Exception.ConflictException; -import ru.practicum.Exception.ValidationException; -import ru.practicum.User.Repository.UserRepository; +import ru.practicum.category.repository.CategoryRepository; +import ru.practicum.event.dto.EventFullDTO; +import ru.practicum.event.dto.SearchEventsDTO; +import ru.practicum.event.dto.UpdateEventAdminRequest; +import ru.practicum.event.mapper.EventMapper; +import ru.practicum.event.model.Event; +import ru.practicum.event.model.State; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.ConflictException; +import ru.practicum.exception.ValidationException; +import ru.practicum.user.repository.UserRepository; import java.time.LocalDateTime; import java.util.List; @@ -23,6 +24,7 @@ @Service @RequiredArgsConstructor +@Slf4j public class EventAdminServiceImpl implements EventAdminService { private final EventRepository eventRepository; private final EventMapper eventMapper; @@ -41,6 +43,7 @@ public List getEvents(SearchEventsDTO dto) { Pageable pageable = PageRequest.of(dto.getFrom(), dto.getSize()); List events = eventRepository.findAll(spec, pageable).getContent(); + log.info("Found events with params {} are sent, size - {}", dto, events.size()); return events.stream() .map(eventMapper::toEventFullDTO) @@ -82,8 +85,10 @@ public EventFullDTO updateEvent(Integer eventId, UpdateEventAdminRequest request } Event updatedEvent = eventMapper.toEvent(request, event); + EventFullDTO eventFullDTO = eventMapper.toEventFullDTO(eventRepository.save(updatedEvent)); + log.info("Event with id = {} and parameters {} is updated: {}", eventId, request, eventFullDTO); - return eventMapper.toEventFullDTO(eventRepository.save(updatedEvent)); + return eventFullDTO; } private Specification getEventSpecification(SearchEventsDTO event) { diff --git a/evm-service/src/main/java/ru/practicum/Event/Service/Private/EventPrivateService.java b/evm-service/src/main/java/ru/practicum/event/service/close/EventPrivateService.java similarity index 80% rename from evm-service/src/main/java/ru/practicum/Event/Service/Private/EventPrivateService.java rename to evm-service/src/main/java/ru/practicum/event/service/close/EventPrivateService.java index 5ac76da..a2ad702 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Service/Private/EventPrivateService.java +++ b/evm-service/src/main/java/ru/practicum/event/service/close/EventPrivateService.java @@ -1,7 +1,7 @@ -package ru.practicum.Event.Service.Private; +package ru.practicum.event.service.close; -import ru.practicum.Event.DTO.*; -import ru.practicum.Request.RequestDTO.ParticipationRequestDto; +import ru.practicum.request.requestDTO.ParticipationRequestDto; +import ru.practicum.event.dto.*; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/Event/Service/Private/EventPrivateServiceImpl.java b/evm-service/src/main/java/ru/practicum/event/service/close/EventPrivateServiceImpl.java similarity index 76% rename from evm-service/src/main/java/ru/practicum/Event/Service/Private/EventPrivateServiceImpl.java rename to evm-service/src/main/java/ru/practicum/event/service/close/EventPrivateServiceImpl.java index d5c52bb..a27a383 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Service/Private/EventPrivateServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/event/service/close/EventPrivateServiceImpl.java @@ -1,35 +1,37 @@ -package ru.practicum.Event.Service.Private; +package ru.practicum.event.service.close; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import ru.practicum.Category.Model.Category; -import ru.practicum.Category.Repository.CategoryRepository; -import ru.practicum.Event.DTO.*; -import ru.practicum.Event.Mapper.EventMapper; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Repository.EventRepository; -import ru.practicum.Exception.ConflictException; -import ru.practicum.Exception.NotFoundException; -import ru.practicum.Exception.ValidationException; -import ru.practicum.Request.Mapper.RequestMapper; -import ru.practicum.Request.Model.Request; -import ru.practicum.Request.Repository.RequestRepository; -import ru.practicum.Request.RequestDTO.ParticipationRequestDto; -import ru.practicum.User.Model.User; -import ru.practicum.User.Repository.UserRepository; +import ru.practicum.event.dto.*; +import ru.practicum.category.model.Category; +import ru.practicum.category.repository.CategoryRepository; +import ru.practicum.event.mapper.EventMapper; +import ru.practicum.event.model.Event; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.ConflictException; +import ru.practicum.exception.NotFoundException; +import ru.practicum.exception.ValidationException; +import ru.practicum.request.mapper.RequestMapper; +import ru.practicum.request.model.Request; +import ru.practicum.request.repository.RequestRepository; +import ru.practicum.request.requestDTO.ParticipationRequestDto; +import ru.practicum.user.model.User; +import ru.practicum.user.repository.UserRepository; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import static ru.practicum.Event.Model.State.*; +import static ru.practicum.event.model.State.*; @Service @RequiredArgsConstructor +@Slf4j public class EventPrivateServiceImpl implements EventPrivateService { private final EventRepository eventRepository; private final EventMapper eventMapper; @@ -48,14 +50,20 @@ public EventFullDTO addEvent(Integer userId, NewEventDTO event) { newEvent.setInitiator(user); newEvent.setCategory(category); newEvent.setState(PENDING); - return eventMapper.toEventFullDTO(eventRepository.save(newEvent)); + + EventFullDTO eventFullDTO = eventMapper.toEventFullDTO(eventRepository.save(newEvent)); + log.info("Event is added: {}", eventFullDTO); + + return eventFullDTO; } @Override public EventFullDTO getEvent(Integer userId, Integer eventId) { Event event = checkEvent(eventId); int confirmedRequests = requestRepository.findRequestsByEvent_IdAndStatus(eventId, CONFIRMED).size(); - return eventMapper.toEventFullDTO(event); + EventFullDTO eventFullDTO = eventMapper.toEventFullDTO(event); + log.info("Event with id = {} is found: {}", eventId, eventFullDTO); + return eventFullDTO; } @Override @@ -88,7 +96,9 @@ public EventFullDTO updateEvent(Integer userId, Integer eventId, UpdateEventUser eventFound.setEventDate(event.getEventDate()); } - return eventMapper.toEventFullDTO(eventRepository.save(eventFound)); + EventFullDTO eventFullDTO = eventMapper.toEventFullDTO(eventRepository.save(eventFound)); + log.info("Event with id = {} is updated: {}", eventId, eventFullDTO); + return eventFullDTO; } @Override @@ -96,6 +106,7 @@ public List getUserRequests(Integer userId, Integer eve checkUser(userId); checkEvent(eventId); + log.info("Participation requests for event with id = {} by user with id = {} are found", eventId, userId); return requestRepository.findRequestsByEvent_IdAndEvent_Initiator_Id(eventId, userId).stream() .map(requestMapper::toParticipationRequestDto) .toList(); @@ -139,7 +150,9 @@ public EventRequestStatusUpdateResult updateRequests(EventRequestStatusUpdateReq } } - return new EventRequestStatusUpdateResult(confirmedRequests, rejectedRequests); + EventRequestStatusUpdateResult result = new EventRequestStatusUpdateResult(confirmedRequests, rejectedRequests); + log.info("Status is updated: {}", result); + return result; } @Override @@ -147,6 +160,7 @@ public List getEvents(Integer userId, Integer from, Integer size) checkUser(userId); Pageable pageable = PageRequest.of(from, size); Page events = eventRepository.getEventByInitiator_Id(userId, pageable); + log.info("Number of events for user with id = {} found: {}", userId, events.getTotalElements()); return events.getContent().stream() .map(eventMapper::toEventShortDTO) .toList(); diff --git a/evm-service/src/main/java/ru/practicum/Event/Service/Public/EventPublicService.java b/evm-service/src/main/java/ru/practicum/event/service/open/EventPublicService.java similarity index 60% rename from evm-service/src/main/java/ru/practicum/Event/Service/Public/EventPublicService.java rename to evm-service/src/main/java/ru/practicum/event/service/open/EventPublicService.java index db38b40..39b1240 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Service/Public/EventPublicService.java +++ b/evm-service/src/main/java/ru/practicum/event/service/open/EventPublicService.java @@ -1,9 +1,9 @@ -package ru.practicum.Event.Service.Public; +package ru.practicum.event.service.open; import jakarta.servlet.http.HttpServletRequest; -import ru.practicum.Event.DTO.EventFullDTO; -import ru.practicum.Event.DTO.EventPublicParams; -import ru.practicum.Event.DTO.EventShortDTO; +import ru.practicum.event.dto.EventFullDTO; +import ru.practicum.event.dto.EventPublicParams; +import ru.practicum.event.dto.EventShortDTO; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/Event/Service/Public/EventPublicServiceImpl.java b/evm-service/src/main/java/ru/practicum/event/service/open/EventPublicServiceImpl.java similarity index 87% rename from evm-service/src/main/java/ru/practicum/Event/Service/Public/EventPublicServiceImpl.java rename to evm-service/src/main/java/ru/practicum/event/service/open/EventPublicServiceImpl.java index 044d22f..3efe915 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Service/Public/EventPublicServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/event/service/open/EventPublicServiceImpl.java @@ -1,23 +1,24 @@ -package ru.practicum.Event.Service.Public; +package ru.practicum.event.service.open; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; -import ru.practicum.Category.Repository.CategoryRepository; -import ru.practicum.Event.DTO.EventFullDTO; -import ru.practicum.Event.DTO.EventPublicParams; -import ru.practicum.Event.DTO.EventShortDTO; -import ru.practicum.Event.Mapper.EventMapper; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Model.State; -import ru.practicum.Event.Repository.EventRepository; -import ru.practicum.Exception.NotFoundException; -import ru.practicum.Exception.ValidationException; -import ru.practicum.Request.Repository.RequestRepository; +import ru.practicum.category.repository.CategoryRepository; +import ru.practicum.event.dto.EventFullDTO; +import ru.practicum.event.dto.EventPublicParams; +import ru.practicum.event.dto.EventShortDTO; +import ru.practicum.event.mapper.EventMapper; +import ru.practicum.event.model.Event; +import ru.practicum.event.model.State; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.NotFoundException; +import ru.practicum.exception.ValidationException; +import ru.practicum.request.repository.RequestRepository; import ru.practicum.StatsClient; import ru.practicum.ViewStatsDTO; @@ -29,6 +30,7 @@ @Service @RequiredArgsConstructor +@Slf4j public class EventPublicServiceImpl implements EventPublicService { private final EventRepository eventRepository; private final EventMapper eventMapper; @@ -47,7 +49,9 @@ public EventFullDTO findEventById(Integer id, HttpServletRequest request) { Map views = getStats(uris, request); event.setViews(views.get(event.getId())); - return eventMapper.toEventFullDTO(event); + EventFullDTO eventFullDTO = eventMapper.toEventFullDTO(event); + log.info("Event with id = {} and is found: {}", id, eventFullDTO); + return eventFullDTO; } @Override @@ -96,6 +100,7 @@ public List findAllEvents(EventPublicParams params, HttpServletRe .toList(); } + log.info("Found {} events", events.size()); return events; } diff --git a/evm-service/src/main/java/ru/practicum/Exception/ConflictException.java b/evm-service/src/main/java/ru/practicum/exception/ConflictException.java similarity index 85% rename from evm-service/src/main/java/ru/practicum/Exception/ConflictException.java rename to evm-service/src/main/java/ru/practicum/exception/ConflictException.java index cd46f5b..f2f0173 100644 --- a/evm-service/src/main/java/ru/practicum/Exception/ConflictException.java +++ b/evm-service/src/main/java/ru/practicum/exception/ConflictException.java @@ -1,4 +1,4 @@ -package ru.practicum.Exception; +package ru.practicum.exception; public class ConflictException extends RuntimeException { public ConflictException(String message) { diff --git a/evm-service/src/main/java/ru/practicum/Exception/ErrorResponse.java b/evm-service/src/main/java/ru/practicum/exception/ErrorResponse.java similarity index 92% rename from evm-service/src/main/java/ru/practicum/Exception/ErrorResponse.java rename to evm-service/src/main/java/ru/practicum/exception/ErrorResponse.java index eefbe00..c7d1f2c 100644 --- a/evm-service/src/main/java/ru/practicum/Exception/ErrorResponse.java +++ b/evm-service/src/main/java/ru/practicum/exception/ErrorResponse.java @@ -1,4 +1,4 @@ -package ru.practicum.Exception; +package ru.practicum.exception; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; diff --git a/evm-service/src/main/java/ru/practicum/Exception/EvmErrorHandler.java b/evm-service/src/main/java/ru/practicum/exception/EvmErrorHandler.java similarity index 98% rename from evm-service/src/main/java/ru/practicum/Exception/EvmErrorHandler.java rename to evm-service/src/main/java/ru/practicum/exception/EvmErrorHandler.java index 7d23cde..70c9277 100644 --- a/evm-service/src/main/java/ru/practicum/Exception/EvmErrorHandler.java +++ b/evm-service/src/main/java/ru/practicum/exception/EvmErrorHandler.java @@ -1,4 +1,4 @@ -package ru.practicum.Exception; +package ru.practicum.exception; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DataIntegrityViolationException; diff --git a/evm-service/src/main/java/ru/practicum/Exception/NotFoundException.java b/evm-service/src/main/java/ru/practicum/exception/NotFoundException.java similarity index 85% rename from evm-service/src/main/java/ru/practicum/Exception/NotFoundException.java rename to evm-service/src/main/java/ru/practicum/exception/NotFoundException.java index 982e60a..63b6602 100644 --- a/evm-service/src/main/java/ru/practicum/Exception/NotFoundException.java +++ b/evm-service/src/main/java/ru/practicum/exception/NotFoundException.java @@ -1,4 +1,4 @@ -package ru.practicum.Exception; +package ru.practicum.exception; public class NotFoundException extends RuntimeException { public NotFoundException(String message) { diff --git a/evm-service/src/main/java/ru/practicum/Exception/UniqueException.java b/evm-service/src/main/java/ru/practicum/exception/UniqueException.java similarity index 85% rename from evm-service/src/main/java/ru/practicum/Exception/UniqueException.java rename to evm-service/src/main/java/ru/practicum/exception/UniqueException.java index ca6b3a6..d1607cc 100644 --- a/evm-service/src/main/java/ru/practicum/Exception/UniqueException.java +++ b/evm-service/src/main/java/ru/practicum/exception/UniqueException.java @@ -1,4 +1,4 @@ -package ru.practicum.Exception; +package ru.practicum.exception; public class UniqueException extends RuntimeException { public UniqueException(final String message) { diff --git a/evm-service/src/main/java/ru/practicum/Exception/ValidationException.java b/evm-service/src/main/java/ru/practicum/exception/ValidationException.java similarity index 86% rename from evm-service/src/main/java/ru/practicum/Exception/ValidationException.java rename to evm-service/src/main/java/ru/practicum/exception/ValidationException.java index 06bd106..a03f561 100644 --- a/evm-service/src/main/java/ru/practicum/Exception/ValidationException.java +++ b/evm-service/src/main/java/ru/practicum/exception/ValidationException.java @@ -1,4 +1,4 @@ -package ru.practicum.Exception; +package ru.practicum.exception; public class ValidationException extends RuntimeException { public ValidationException() { diff --git a/evm-service/src/main/java/ru/practicum/Request/Controller/RequestPrivateController.java b/evm-service/src/main/java/ru/practicum/request/controller/RequestPrivateController.java similarity index 67% rename from evm-service/src/main/java/ru/practicum/Request/Controller/RequestPrivateController.java rename to evm-service/src/main/java/ru/practicum/request/controller/RequestPrivateController.java index 8c25286..0ed66b9 100644 --- a/evm-service/src/main/java/ru/practicum/Request/Controller/RequestPrivateController.java +++ b/evm-service/src/main/java/ru/practicum/request/controller/RequestPrivateController.java @@ -1,35 +1,40 @@ -package ru.practicum.Request.Controller; +package ru.practicum.request.controller; import jakarta.validation.constraints.Positive; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import ru.practicum.Request.RequestDTO.ParticipationRequestDto; -import ru.practicum.Request.Service.RequestPrivateServiceImpl; +import ru.practicum.request.requestDTO.ParticipationRequestDto; +import ru.practicum.request.service.RequestPrivateService; import java.util.List; @RestController @RequestMapping("/users/{userId}/requests") @RequiredArgsConstructor +@Slf4j public class RequestPrivateController { - private final RequestPrivateServiceImpl requestService; + private final RequestPrivateService requestService; @PostMapping @ResponseStatus(HttpStatus.CREATED) public ParticipationRequestDto addRequest(@PathVariable @Positive Integer userId, @RequestParam @Positive Integer eventId) { + log.info("Adding request by user with id = {} to event with id = {}", userId, eventId); return requestService.addRequest(userId, eventId); } @PatchMapping("/{requestId}/cancel") public ParticipationRequestDto cancelRequest(@PathVariable @Positive Integer userId, @PathVariable @Positive Integer requestId) { + log.info("Canceling request with id = {} for user with id = {}", requestId, userId); return requestService.cancelRequest(userId, requestId); } @GetMapping List getRequests(@PathVariable @Positive Integer userId) { + log.info("Get requests by user with id = {}", userId); return requestService.getRequests(userId); } } diff --git a/evm-service/src/main/java/ru/practicum/Request/Mapper/RequestMapper.java b/evm-service/src/main/java/ru/practicum/request/mapper/RequestMapper.java similarity index 77% rename from evm-service/src/main/java/ru/practicum/Request/Mapper/RequestMapper.java rename to evm-service/src/main/java/ru/practicum/request/mapper/RequestMapper.java index e232dad..8c4c172 100644 --- a/evm-service/src/main/java/ru/practicum/Request/Mapper/RequestMapper.java +++ b/evm-service/src/main/java/ru/practicum/request/mapper/RequestMapper.java @@ -1,9 +1,9 @@ -package ru.practicum.Request.Mapper; +package ru.practicum.request.mapper; import org.mapstruct.Mapper; import org.mapstruct.Mapping; -import ru.practicum.Request.Model.Request; -import ru.practicum.Request.RequestDTO.ParticipationRequestDto; +import ru.practicum.request.model.Request; +import ru.practicum.request.requestDTO.ParticipationRequestDto; @Mapper(componentModel = "spring") public interface RequestMapper { diff --git a/evm-service/src/main/java/ru/practicum/Request/Model/Request.java b/evm-service/src/main/java/ru/practicum/request/model/Request.java similarity index 50% rename from evm-service/src/main/java/ru/practicum/Request/Model/Request.java rename to evm-service/src/main/java/ru/practicum/request/model/Request.java index 3e5b1d5..304a0a1 100644 --- a/evm-service/src/main/java/ru/practicum/Request/Model/Request.java +++ b/evm-service/src/main/java/ru/practicum/request/model/Request.java @@ -1,16 +1,17 @@ -package ru.practicum.Request.Model; +package ru.practicum.request.model; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Model.State; -import ru.practicum.User.Model.User; +import lombok.*; +import ru.practicum.event.model.Event; +import ru.practicum.event.model.State; +import ru.practicum.user.model.User; import java.time.LocalDateTime; +import java.util.Objects; -@Data +@Getter +@Setter +@ToString @AllArgsConstructor @NoArgsConstructor @Entity @@ -34,4 +35,17 @@ public class Request { @Column(name = "state_id") @Enumerated(EnumType.ORDINAL) private State status; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Request request = (Request) o; + return Objects.equals(id, request.id); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } } diff --git a/evm-service/src/main/java/ru/practicum/Request/Repository/RequestRepository.java b/evm-service/src/main/java/ru/practicum/request/repository/RequestRepository.java similarity index 82% rename from evm-service/src/main/java/ru/practicum/Request/Repository/RequestRepository.java rename to evm-service/src/main/java/ru/practicum/request/repository/RequestRepository.java index 43d0400..f942480 100644 --- a/evm-service/src/main/java/ru/practicum/Request/Repository/RequestRepository.java +++ b/evm-service/src/main/java/ru/practicum/request/repository/RequestRepository.java @@ -1,8 +1,8 @@ -package ru.practicum.Request.Repository; +package ru.practicum.request.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ru.practicum.Event.Model.State; -import ru.practicum.Request.Model.Request; +import ru.practicum.event.model.State; +import ru.practicum.request.model.Request; import java.util.List; import java.util.Optional; diff --git a/evm-service/src/main/java/ru/practicum/Request/RequestDTO/ParticipationRequestDto.java b/evm-service/src/main/java/ru/practicum/request/requestDTO/ParticipationRequestDto.java similarity index 85% rename from evm-service/src/main/java/ru/practicum/Request/RequestDTO/ParticipationRequestDto.java rename to evm-service/src/main/java/ru/practicum/request/requestDTO/ParticipationRequestDto.java index 1e3edc8..68797c1 100644 --- a/evm-service/src/main/java/ru/practicum/Request/RequestDTO/ParticipationRequestDto.java +++ b/evm-service/src/main/java/ru/practicum/request/requestDTO/ParticipationRequestDto.java @@ -1,10 +1,10 @@ -package ru.practicum.Request.RequestDTO; +package ru.practicum.request.requestDTO; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.Event.Model.State; +import ru.practicum.event.model.State; import java.time.LocalDateTime; diff --git a/evm-service/src/main/java/ru/practicum/Request/Service/RequestPrivateService.java b/evm-service/src/main/java/ru/practicum/request/service/RequestPrivateService.java similarity index 73% rename from evm-service/src/main/java/ru/practicum/Request/Service/RequestPrivateService.java rename to evm-service/src/main/java/ru/practicum/request/service/RequestPrivateService.java index 29be91e..a2872bb 100644 --- a/evm-service/src/main/java/ru/practicum/Request/Service/RequestPrivateService.java +++ b/evm-service/src/main/java/ru/practicum/request/service/RequestPrivateService.java @@ -1,6 +1,6 @@ -package ru.practicum.Request.Service; +package ru.practicum.request.service; -import ru.practicum.Request.RequestDTO.ParticipationRequestDto; +import ru.practicum.request.requestDTO.ParticipationRequestDto; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/Request/Service/RequestPrivateServiceImpl.java b/evm-service/src/main/java/ru/practicum/request/service/RequestPrivateServiceImpl.java similarity index 68% rename from evm-service/src/main/java/ru/practicum/Request/Service/RequestPrivateServiceImpl.java rename to evm-service/src/main/java/ru/practicum/request/service/RequestPrivateServiceImpl.java index 7cfbc06..4732c83 100644 --- a/evm-service/src/main/java/ru/practicum/Request/Service/RequestPrivateServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/request/service/RequestPrivateServiceImpl.java @@ -1,23 +1,25 @@ -package ru.practicum.Request.Service; +package ru.practicum.request.service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ru.practicum.Event.Model.Event; -import ru.practicum.Event.Model.State; -import ru.practicum.Event.Repository.EventRepository; -import ru.practicum.Exception.ConflictException; -import ru.practicum.Exception.NotFoundException; -import ru.practicum.Request.Mapper.RequestMapper; -import ru.practicum.Request.Model.Request; -import ru.practicum.Request.Repository.RequestRepository; -import ru.practicum.Request.RequestDTO.ParticipationRequestDto; -import ru.practicum.User.Model.User; -import ru.practicum.User.Repository.UserRepository; +import ru.practicum.event.model.Event; +import ru.practicum.event.model.State; +import ru.practicum.event.repository.EventRepository; +import ru.practicum.exception.ConflictException; +import ru.practicum.exception.NotFoundException; +import ru.practicum.request.mapper.RequestMapper; +import ru.practicum.request.model.Request; +import ru.practicum.request.repository.RequestRepository; +import ru.practicum.request.requestDTO.ParticipationRequestDto; +import ru.practicum.user.model.User; +import ru.practicum.user.repository.UserRepository; import java.util.List; @Service @RequiredArgsConstructor +@Slf4j public class RequestPrivateServiceImpl implements RequestPrivateService { private final RequestRepository requestRepository; private final EventRepository eventRepository; @@ -58,7 +60,11 @@ public ParticipationRequestDto addRequest(Integer userId, Integer eventId) { request.setEvent(event); request.setRequester(user); - return requestMapper.toParticipationRequestDto(requestRepository.save(request)); + ParticipationRequestDto participationRequestDto = requestMapper.toParticipationRequestDto( + requestRepository.save(request)); + log.info("Request is added: {}", participationRequestDto); + + return participationRequestDto; } @Override @@ -70,12 +76,17 @@ public ParticipationRequestDto cancelRequest(Integer userId, Integer requestId) request.setStatus(State.CANCELED); - return requestMapper.toParticipationRequestDto(requestRepository.save(request)); + ParticipationRequestDto participationRequestDto = requestMapper.toParticipationRequestDto( + requestRepository.save(request)); + log.info("Request is cancelled: {}", participationRequestDto); + + return participationRequestDto; } @Override public List getRequests(Integer userId) { checkUser(userId); + log.info("Found requests for user with id = {} are sent", userId); return requestRepository.findRequestsByRequester_Id(userId).stream() .map(requestMapper::toParticipationRequestDto) .toList(); diff --git a/evm-service/src/main/java/ru/practicum/User/Controller/UserAdminController.java b/evm-service/src/main/java/ru/practicum/user/controller/UserAdminController.java similarity index 71% rename from evm-service/src/main/java/ru/practicum/User/Controller/UserAdminController.java rename to evm-service/src/main/java/ru/practicum/user/controller/UserAdminController.java index 3ee9657..ecce57c 100644 --- a/evm-service/src/main/java/ru/practicum/User/Controller/UserAdminController.java +++ b/evm-service/src/main/java/ru/practicum/user/controller/UserAdminController.java @@ -1,33 +1,37 @@ -package ru.practicum.User.Controller; +package ru.practicum.user.controller; import jakarta.validation.Valid; import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import ru.practicum.User.DTO.NewUserRequest; -import ru.practicum.User.DTO.UserDTO; -import ru.practicum.User.DTO.UsersListRequest; -import ru.practicum.User.Service.UserAdminServiceImpl; +import ru.practicum.user.dto.NewUserRequest; +import ru.practicum.user.dto.UserDTO; +import ru.practicum.user.dto.UsersListRequest; +import ru.practicum.user.service.UserAdminService; import java.util.List; @RestController @RequestMapping("/admin/users") @RequiredArgsConstructor +@Slf4j public class UserAdminController { - private final UserAdminServiceImpl userAdminService; + private final UserAdminService userAdminService; @PostMapping @ResponseStatus(HttpStatus.CREATED) public UserDTO addUser(@RequestBody @Valid NewUserRequest newUser) { + log.info("Adding new user {}", newUser); return userAdminService.addUser(newUser); } @GetMapping("/{userId}") @ResponseStatus(HttpStatus.OK) public UserDTO getUserById(@PathVariable Integer userId) { + log.info("Getting user with id = {}", userId); return userAdminService.getUserById(userId); } @@ -36,12 +40,14 @@ public UserDTO getUserById(@PathVariable Integer userId) { public List getUsers(@RequestParam(required = false) List ids, @RequestParam(defaultValue = "0") @PositiveOrZero int from, @RequestParam(defaultValue = "10") @Positive int size) { + log.info("Getting users with ids {}, from {}, size {}", ids, from, size); return userAdminService.getUsers(new UsersListRequest(ids, from, size)); } @DeleteMapping("/{userId}") @ResponseStatus(HttpStatus.NO_CONTENT) public void deleteUser(@PathVariable Integer userId) { + log.info("Deleting user with id = {}", userId); userAdminService.deleteUserById(userId); } } diff --git a/evm-service/src/main/java/ru/practicum/User/DTO/NewUserRequest.java b/evm-service/src/main/java/ru/practicum/user/dto/NewUserRequest.java similarity index 93% rename from evm-service/src/main/java/ru/practicum/User/DTO/NewUserRequest.java rename to evm-service/src/main/java/ru/practicum/user/dto/NewUserRequest.java index 9e2e7f4..3121655 100644 --- a/evm-service/src/main/java/ru/practicum/User/DTO/NewUserRequest.java +++ b/evm-service/src/main/java/ru/practicum/user/dto/NewUserRequest.java @@ -1,4 +1,4 @@ -package ru.practicum.User.DTO; +package ru.practicum.user.dto; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; diff --git a/evm-service/src/main/java/ru/practicum/User/DTO/UserDTO.java b/evm-service/src/main/java/ru/practicum/user/dto/UserDTO.java similarity index 92% rename from evm-service/src/main/java/ru/practicum/User/DTO/UserDTO.java rename to evm-service/src/main/java/ru/practicum/user/dto/UserDTO.java index 552d020..e53222b 100644 --- a/evm-service/src/main/java/ru/practicum/User/DTO/UserDTO.java +++ b/evm-service/src/main/java/ru/practicum/user/dto/UserDTO.java @@ -1,4 +1,4 @@ -package ru.practicum.User.DTO; +package ru.practicum.user.dto; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; diff --git a/evm-service/src/main/java/ru/practicum/User/DTO/UserShortDTO.java b/evm-service/src/main/java/ru/practicum/user/dto/UserShortDTO.java similarity index 91% rename from evm-service/src/main/java/ru/practicum/User/DTO/UserShortDTO.java rename to evm-service/src/main/java/ru/practicum/user/dto/UserShortDTO.java index 6f8c646..7c08013 100644 --- a/evm-service/src/main/java/ru/practicum/User/DTO/UserShortDTO.java +++ b/evm-service/src/main/java/ru/practicum/user/dto/UserShortDTO.java @@ -1,4 +1,4 @@ -package ru.practicum.User.DTO; +package ru.practicum.user.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; diff --git a/evm-service/src/main/java/ru/practicum/User/DTO/UsersListRequest.java b/evm-service/src/main/java/ru/practicum/user/dto/UsersListRequest.java similarity index 80% rename from evm-service/src/main/java/ru/practicum/User/DTO/UsersListRequest.java rename to evm-service/src/main/java/ru/practicum/user/dto/UsersListRequest.java index c194ba8..3098551 100644 --- a/evm-service/src/main/java/ru/practicum/User/DTO/UsersListRequest.java +++ b/evm-service/src/main/java/ru/practicum/user/dto/UsersListRequest.java @@ -1,4 +1,4 @@ -package ru.practicum.User.DTO; +package ru.practicum.user.dto; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/User/Mapper/UserMapper.java b/evm-service/src/main/java/ru/practicum/user/mapper/UserMapper.java similarity index 52% rename from evm-service/src/main/java/ru/practicum/User/Mapper/UserMapper.java rename to evm-service/src/main/java/ru/practicum/user/mapper/UserMapper.java index 6ee6e70..91f4dd6 100644 --- a/evm-service/src/main/java/ru/practicum/User/Mapper/UserMapper.java +++ b/evm-service/src/main/java/ru/practicum/user/mapper/UserMapper.java @@ -1,10 +1,10 @@ -package ru.practicum.User.Mapper; +package ru.practicum.user.mapper; import org.mapstruct.Mapper; -import ru.practicum.User.DTO.NewUserRequest; -import ru.practicum.User.DTO.UserDTO; -import ru.practicum.User.DTO.UserShortDTO; -import ru.practicum.User.Model.User; +import ru.practicum.user.dto.NewUserRequest; +import ru.practicum.user.dto.UserDTO; +import ru.practicum.user.dto.UserShortDTO; +import ru.practicum.user.model.User; @Mapper(componentModel = "spring") public interface UserMapper { diff --git a/evm-service/src/main/java/ru/practicum/user/model/User.java b/evm-service/src/main/java/ru/practicum/user/model/User.java new file mode 100644 index 0000000..1bd1e94 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/user/model/User.java @@ -0,0 +1,39 @@ +package ru.practicum.user.model; + +import jakarta.persistence.*; +import lombok.*; + +import java.util.Objects; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "users") +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @Column(name = "email", length = 500) + private String email; + + @Column(name = "name", length = 250) + private String name; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + User user = (User) o; + return Objects.equals(id, user.id); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } +} diff --git a/evm-service/src/main/java/ru/practicum/User/Repository/UserRepository.java b/evm-service/src/main/java/ru/practicum/user/repository/UserRepository.java similarity index 85% rename from evm-service/src/main/java/ru/practicum/User/Repository/UserRepository.java rename to evm-service/src/main/java/ru/practicum/user/repository/UserRepository.java index 4f34f21..c2651f1 100644 --- a/evm-service/src/main/java/ru/practicum/User/Repository/UserRepository.java +++ b/evm-service/src/main/java/ru/practicum/user/repository/UserRepository.java @@ -1,9 +1,9 @@ -package ru.practicum.User.Repository; +package ru.practicum.user.repository; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; -import ru.practicum.User.Model.User; +import ru.practicum.user.model.User; import java.util.Collection; import java.util.Optional; diff --git a/evm-service/src/main/java/ru/practicum/User/Service/UserAdminService.java b/evm-service/src/main/java/ru/practicum/user/service/UserAdminService.java similarity index 59% rename from evm-service/src/main/java/ru/practicum/User/Service/UserAdminService.java rename to evm-service/src/main/java/ru/practicum/user/service/UserAdminService.java index 75a8beb..769098a 100644 --- a/evm-service/src/main/java/ru/practicum/User/Service/UserAdminService.java +++ b/evm-service/src/main/java/ru/practicum/user/service/UserAdminService.java @@ -1,8 +1,8 @@ -package ru.practicum.User.Service; +package ru.practicum.user.service; -import ru.practicum.User.DTO.NewUserRequest; -import ru.practicum.User.DTO.UserDTO; -import ru.practicum.User.DTO.UsersListRequest; +import ru.practicum.user.dto.NewUserRequest; +import ru.practicum.user.dto.UserDTO; +import ru.practicum.user.dto.UsersListRequest; import java.util.List; diff --git a/evm-service/src/main/java/ru/practicum/User/Service/UserAdminServiceImpl.java b/evm-service/src/main/java/ru/practicum/user/service/UserAdminServiceImpl.java similarity index 65% rename from evm-service/src/main/java/ru/practicum/User/Service/UserAdminServiceImpl.java rename to evm-service/src/main/java/ru/practicum/user/service/UserAdminServiceImpl.java index 378cbf0..05ce975 100644 --- a/evm-service/src/main/java/ru/practicum/User/Service/UserAdminServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/user/service/UserAdminServiceImpl.java @@ -1,30 +1,34 @@ -package ru.practicum.User.Service; +package ru.practicum.user.service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; -import ru.practicum.Exception.NotFoundException; -import ru.practicum.User.DTO.NewUserRequest; -import ru.practicum.User.DTO.UserDTO; -import ru.practicum.User.DTO.UsersListRequest; -import ru.practicum.User.Mapper.UserMapper; -import ru.practicum.User.Model.User; -import ru.practicum.User.Repository.UserRepository; +import ru.practicum.exception.NotFoundException; +import ru.practicum.user.dto.NewUserRequest; +import ru.practicum.user.dto.UserDTO; +import ru.practicum.user.dto.UsersListRequest; +import ru.practicum.user.mapper.UserMapper; +import ru.practicum.user.model.User; +import ru.practicum.user.repository.UserRepository; import java.util.List; @Service @RequiredArgsConstructor +@Slf4j public class UserAdminServiceImpl implements UserAdminService { private final UserRepository userRepository; private final UserMapper userMapper; @Override public UserDTO addUser(NewUserRequest newUser) { - return userMapper.toUserDTO(userRepository.save(userMapper.toUser(newUser))); + UserDTO userDTO = userMapper.toUserDTO(userRepository.save(userMapper.toUser(newUser))); + log.info("User is added: {}", userDTO); + return userDTO; } @Override @@ -33,6 +37,7 @@ public void deleteUserById(Integer id) { .orElseThrow(() -> new NotFoundException("User with id " + id + " not found")); userRepository.delete(user); + log.info("User with id {} deleted", id); } @Override @@ -40,7 +45,9 @@ public UserDTO getUserById(Integer id) { User user = userRepository.findById(id) .orElseThrow(() -> new NotFoundException("User with id " + id + " not found")); - return userMapper.toUserDTO(user); + UserDTO userDTO = userMapper.toUserDTO(user); + log.info("User with id = {} is found: {}", id, userDTO); + return userDTO; } @Override @@ -52,6 +59,7 @@ public List getUsers(UsersListRequest request) { ? userRepository.findAll(pageable).getContent() : userRepository.findByIdIn(request.ids(), pageable).getContent(); + log.info("Found {} users are sent", users.size()); return users.stream() .map(userMapper::toUserDTO) .toList(); diff --git a/evm-service/src/main/resources/schema.sql b/evm-service/src/main/resources/schema.sql index 97956c5..fc80410 100644 --- a/evm-service/src/main/resources/schema.sql +++ b/evm-service/src/main/resources/schema.sql @@ -1,4 +1,4 @@ -DROP TABLE IF EXISTS users, categories, events, requests, compilations, compilation_events; +DROP TABLE IF EXISTS users, categories, events, requests, compilations, compilation_events, comments; CREATE TABLE IF NOT EXISTS users ( id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, @@ -64,3 +64,15 @@ CREATE TABLE IF NOT EXISTS compilation_events ( CONSTRAINT fk_compilation_events_to_events FOREIGN KEY (event_id) REFERENCES events (id) ON DELETE CASCADE ); +CREATE TABLE IF NOT EXISTS comments ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + comment VARCHAR(7000) NOT NULL, + author_id INT NOT NULL, + event_id INT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE, + updated_at TIMESTAMP WITHOUT TIME ZONE, + status VARCHAR(50), + CONSTRAINT fk_comments_to_users FOREIGN KEY (author_id) REFERENCES users (id) ON DELETE CASCADE, + CONSTRAINT fk_comments_to_events FOREIGN KEY (event_id) REFERENCES events (id) ON DELETE CASCADE +) + diff --git a/postman/feature.json b/postman/feature.json new file mode 100644 index 0000000..fbf4018 --- /dev/null +++ b/postman/feature.json @@ -0,0 +1,289 @@ +{ + "info": { + "_postman_id": "0839b33c-c656-44a1-8b32-a74814f2c75b", + "name": "feature.json", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "42528419" + }, + "item": [ + { + "name": "Добавление комментария", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 201\", function () {\r", + " pm.response.to.have.status(201);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "X-User-Id", + "value": "15", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"comment\":\"Добавление нового комментария\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/events/comments/6", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "events", + "comments", + "6" + ] + } + }, + "response": [] + }, + { + "name": "Обновление комментария", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "packages": {}, + "type": "text/javascript" + } + } + ], + "request": { + "method": "PATCH", + "header": [ + { + "key": "X-User-Id", + "value": "15", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"comment\":\"Обновление комментария\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/events/comments/1", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "events", + "comments", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Получение комментариев события", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "", + "value": "", + "type": "text", + "disabled": true + } + ], + "url": { + "raw": "http://localhost:8080/event/6/comments", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "event", + "6", + "comments" + ] + } + }, + "response": [] + }, + { + "name": "Получение комментария пользователя к событию", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "", + "value": "", + "type": "text", + "disabled": true + } + ], + "url": { + "raw": "http://localhost:8080/events/comments/1", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "events", + "comments", + "1" + ] + } + }, + "response": [] + } + ], + "variable": [ + { + "key": "baseURL", + "value": "", + "type": "default" + }, + { + "name": "Удаление комментария", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "DELETE", + "header": [ + { + "key": "X-User-Id", + "value": "15", + "type": "text" + } + ], + "url": { + "raw": "http://localhost:8080/events/comments/1", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "events", + "comments", + "1" + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/stat/stat-server/src/main/java/ru/practicum/controller/StatsServerController.java b/stat/stat-server/src/main/java/ru/practicum/controller/StatsServerController.java index 4ac455b..bca96c2 100644 --- a/stat/stat-server/src/main/java/ru/practicum/controller/StatsServerController.java +++ b/stat/stat-server/src/main/java/ru/practicum/controller/StatsServerController.java @@ -2,6 +2,7 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import ru.practicum.EndpointHitDTO; @@ -13,17 +14,20 @@ @RestController @RequiredArgsConstructor +@Slf4j public class StatsServerController { private final StatsServiceImpl statsService; @GetMapping("/stats") private List viewStats(@ModelAttribute @Valid StatsRequestDTO statsRequestDTO) { + log.info("Getting view stats"); return statsService.getStats(statsRequestDTO); } @PostMapping("/hit") @ResponseStatus(HttpStatus.CREATED) private void createHit(@RequestBody @Valid EndpointHitDTO hitDTO) { + log.info("Creating hit {}", hitDTO); statsService.createHit(hitDTO); } } diff --git a/stat/stat-server/src/main/java/ru/practicum/service/StatsServiceInterface.java b/stat/stat-server/src/main/java/ru/practicum/service/StatsService.java similarity index 87% rename from stat/stat-server/src/main/java/ru/practicum/service/StatsServiceInterface.java rename to stat/stat-server/src/main/java/ru/practicum/service/StatsService.java index 0263295..e829ef5 100644 --- a/stat/stat-server/src/main/java/ru/practicum/service/StatsServiceInterface.java +++ b/stat/stat-server/src/main/java/ru/practicum/service/StatsService.java @@ -6,7 +6,7 @@ import java.util.List; -public interface StatsServiceInterface { +public interface StatsService { List getStats(StatsRequestDTO statsRequestDTO); void createHit(EndpointHitDTO hitDTO); diff --git a/stat/stat-server/src/main/java/ru/practicum/service/StatsServiceImpl.java b/stat/stat-server/src/main/java/ru/practicum/service/StatsServiceImpl.java index c824a8c..27163cd 100644 --- a/stat/stat-server/src/main/java/ru/practicum/service/StatsServiceImpl.java +++ b/stat/stat-server/src/main/java/ru/practicum/service/StatsServiceImpl.java @@ -1,6 +1,7 @@ package ru.practicum.service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ru.practicum.EndpointHitDTO; import ru.practicum.StatsRequestDTO; @@ -16,7 +17,8 @@ @Service @RequiredArgsConstructor -public class StatsServiceImpl implements StatsServiceInterface { +@Slf4j +public class StatsServiceImpl implements StatsService { private final StatsServerRepository statsService; private final ViewStatsMapper viewStatsMapper; private final HitsMapper hitsMapper; @@ -42,6 +44,7 @@ public List getStats(StatsRequestDTO statsRequestDTO) { .toList(); } + log.info("Found {} stats", stats.size()); return stats; } @@ -49,5 +52,6 @@ public List getStats(StatsRequestDTO statsRequestDTO) { public void createHit(EndpointHitDTO hitDTO) { EndpointHit hit = hitsMapper.mapHitDTO(hitDTO); statsService.createHit(hit); + log.info("Created hit {}", hit); } }