From 381a60b99804aa63e87f4be665ded5585ef474ae Mon Sep 17 00:00:00 2001 From: NadezhdaTA Date: Fri, 12 Sep 2025 16:17:05 +0400 Subject: [PATCH] =?UTF-8?q?3=D0=B8=D0=B9=20=D1=8D=D1=82=D0=B0=D0=BF=20?= =?UTF-8?q?=D0=B4=D0=B8=D0=BF=D0=BB=D0=BE=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/CommentPrivateController.java | 45 +++++++ .../Controller/CommentPublicController.java | 25 ++++ .../ru/practicum/Comments/DTO/CommentDTO.java | 28 +++++ .../practicum/Comments/DTO/NewCommentDTO.java | 27 +++++ .../Comments/DTO/UpdateCommentDTO.java | 26 ++++ .../Comments/DTO/UpdatedCommentDTO.java | 7 ++ .../Comments/Mapper/CommentsMapper.java | 19 +++ .../ru/practicum/Comments/Model/Comment.java | 44 +++++++ .../ru/practicum/Comments/Model/Status.java | 6 + .../Repository/CommentsRepository.java | 20 ++++ .../Private/CommentPrivateService.java | 15 +++ .../Private/CommentPrivateServiceImpl.java | 112 ++++++++++++++++++ .../Public/CommentPublicInterface.java | 9 ++ .../Public/CommentPublicInterfaceImpl.java | 34 ++++++ .../practicum/Event/DTO/EventCommentsDTO.java | 21 ++++ .../practicum/Event/Mapper/EventMapper.java | 7 +- .../java/ru/practicum/Event/Model/Event.java | 4 +- .../Private/EventPrivateServiceImpl.java | 2 + evm-service/src/main/resources/schema.sql | 16 ++- 19 files changed, 460 insertions(+), 7 deletions(-) create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Controller/CommentPrivateController.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Controller/CommentPublicController.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/DTO/CommentDTO.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/DTO/NewCommentDTO.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/DTO/UpdateCommentDTO.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/DTO/UpdatedCommentDTO.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Mapper/CommentsMapper.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Model/Comment.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Model/Status.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Repository/CommentsRepository.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Service/Private/CommentPrivateService.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Service/Private/CommentPrivateServiceImpl.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Service/Public/CommentPublicInterface.java create mode 100644 evm-service/src/main/java/ru/practicum/Comments/Service/Public/CommentPublicInterfaceImpl.java create mode 100644 evm-service/src/main/java/ru/practicum/Event/DTO/EventCommentsDTO.java diff --git a/evm-service/src/main/java/ru/practicum/Comments/Controller/CommentPrivateController.java b/evm-service/src/main/java/ru/practicum/Comments/Controller/CommentPrivateController.java new file mode 100644 index 0000000..85dd67e --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Controller/CommentPrivateController.java @@ -0,0 +1,45 @@ +package ru.practicum.Comments.Controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import ru.practicum.Comments.DTO.CommentDTO; +import ru.practicum.Comments.DTO.NewCommentDTO; +import ru.practicum.Comments.DTO.UpdateCommentDTO; +import ru.practicum.Comments.Service.Private.CommentPrivateServiceImpl; + + +@RestController +@RequestMapping("/events/comments") +@RequiredArgsConstructor +public class CommentPrivateController { + private final CommentPrivateServiceImpl 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) { + return commentService.addComment(commentDTO, userId, eventId); + } + + @GetMapping("/{commentId}") + public CommentDTO getComment(@PathVariable Integer commentId) { + return commentService.getComment(commentId); + } + + @PatchMapping("/{commentId}") + public CommentDTO updateComment(@RequestHeader(USER_ID) Integer userId, + @RequestBody UpdateCommentDTO dto, + @PathVariable Integer commentId) { + return commentService.updateComment(dto, userId, commentId); + } + + @DeleteMapping("/{commentId}") + public void deleteComment(@RequestHeader(USER_ID) Integer userId, + @PathVariable Integer commentId){ + commentService.deleteComment(commentId, userId); + } + +} diff --git a/evm-service/src/main/java/ru/practicum/Comments/Controller/CommentPublicController.java b/evm-service/src/main/java/ru/practicum/Comments/Controller/CommentPublicController.java new file mode 100644 index 0000000..0a2ad52 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Controller/CommentPublicController.java @@ -0,0 +1,25 @@ +package ru.practicum.Comments.Controller; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import jakarta.validation.constraints.PositiveOrZero; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import ru.practicum.Comments.DTO.CommentDTO; +import ru.practicum.Comments.Service.Public.CommentPublicInterface; + +import java.util.List; + +@RestController +@RequestMapping("/event/{eventId}/comments") +@RequiredArgsConstructor +public class CommentPublicController { + private final CommentPublicInterface commentPublicInterface; + + @GetMapping + public List getComments(@PathVariable @NotNull Integer eventId, + @RequestParam(defaultValue = "0") @PositiveOrZero Integer from, + @RequestParam(defaultValue = "10") @Positive Integer size) { + return commentPublicInterface.getComments(eventId, from, size); + } +} diff --git a/evm-service/src/main/java/ru/practicum/Comments/DTO/CommentDTO.java b/evm-service/src/main/java/ru/practicum/Comments/DTO/CommentDTO.java new file mode 100644 index 0000000..edf1688 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/DTO/CommentDTO.java @@ -0,0 +1,28 @@ +package ru.practicum.Comments.DTO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.Comments.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/Comments/DTO/NewCommentDTO.java b/evm-service/src/main/java/ru/practicum/Comments/DTO/NewCommentDTO.java new file mode 100644 index 0000000..78aec33 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/DTO/NewCommentDTO.java @@ -0,0 +1,27 @@ +package ru.practicum.Comments.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/Comments/DTO/UpdateCommentDTO.java b/evm-service/src/main/java/ru/practicum/Comments/DTO/UpdateCommentDTO.java new file mode 100644 index 0000000..778fa29 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/DTO/UpdateCommentDTO.java @@ -0,0 +1,26 @@ +package ru.practicum.Comments.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/Comments/DTO/UpdatedCommentDTO.java b/evm-service/src/main/java/ru/practicum/Comments/DTO/UpdatedCommentDTO.java new file mode 100644 index 0000000..dd3afa6 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/DTO/UpdatedCommentDTO.java @@ -0,0 +1,7 @@ +package ru.practicum.Comments.DTO; + +import java.time.LocalDateTime; + +public class UpdatedCommentDTO extends CommentDTO { + private LocalDateTime updatedAt; +} diff --git a/evm-service/src/main/java/ru/practicum/Comments/Mapper/CommentsMapper.java b/evm-service/src/main/java/ru/practicum/Comments/Mapper/CommentsMapper.java new file mode 100644 index 0000000..a41f20f --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Mapper/CommentsMapper.java @@ -0,0 +1,19 @@ +package ru.practicum.Comments.Mapper; + +import org.mapstruct.Mapper; +import ru.practicum.Comments.DTO.CommentDTO; +import ru.practicum.Comments.DTO.NewCommentDTO; +import ru.practicum.Comments.DTO.UpdateCommentDTO; +import ru.practicum.Comments.DTO.UpdatedCommentDTO; +import ru.practicum.Comments.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/Comments/Model/Comment.java b/evm-service/src/main/java/ru/practicum/Comments/Model/Comment.java new file mode 100644 index 0000000..94b3ef1 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Model/Comment.java @@ -0,0 +1,44 @@ +package ru.practicum.Comments.Model; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.Event.Model.Event; +import ru.practicum.User.Model.User; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@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; +} diff --git a/evm-service/src/main/java/ru/practicum/Comments/Model/Status.java b/evm-service/src/main/java/ru/practicum/Comments/Model/Status.java new file mode 100644 index 0000000..06d8886 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Model/Status.java @@ -0,0 +1,6 @@ +package ru.practicum.Comments.Model; + +public enum Status { + CREATED, + UPDATED +} diff --git a/evm-service/src/main/java/ru/practicum/Comments/Repository/CommentsRepository.java b/evm-service/src/main/java/ru/practicum/Comments/Repository/CommentsRepository.java new file mode 100644 index 0000000..395f2bb --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Repository/CommentsRepository.java @@ -0,0 +1,20 @@ +package ru.practicum.Comments.Repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.practicum.Comments.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/Comments/Service/Private/CommentPrivateService.java b/evm-service/src/main/java/ru/practicum/Comments/Service/Private/CommentPrivateService.java new file mode 100644 index 0000000..4bcd39a --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Service/Private/CommentPrivateService.java @@ -0,0 +1,15 @@ +package ru.practicum.Comments.Service.Private; + +import ru.practicum.Comments.DTO.CommentDTO; +import ru.practicum.Comments.DTO.NewCommentDTO; +import ru.practicum.Comments.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/Comments/Service/Private/CommentPrivateServiceImpl.java b/evm-service/src/main/java/ru/practicum/Comments/Service/Private/CommentPrivateServiceImpl.java new file mode 100644 index 0000000..d5b7cb3 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Service/Private/CommentPrivateServiceImpl.java @@ -0,0 +1,112 @@ +package ru.practicum.Comments.Service.Private; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ru.practicum.Comments.DTO.CommentDTO; +import ru.practicum.Comments.DTO.NewCommentDTO; +import ru.practicum.Comments.DTO.UpdateCommentDTO; +import ru.practicum.Comments.Mapper.CommentsMapper; +import ru.practicum.Comments.Model.Comment; +import ru.practicum.Comments.Model.Status; +import ru.practicum.Comments.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 +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 (NotFoundException 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); + + return commentsMapper.toCommentDTO(commentsRepository.save(comment)); + } + + @Override + public CommentDTO getComment(Integer commentId) { + Comment comment = commentsRepository.findById(commentId) + .orElseThrow(() -> new NotFoundException("Comment with id " + commentId + " not found")); + + if (comment.getStatus().equals(Status.CREATED)) { + return commentsMapper.toCommentDTO(comment); + } else { + return commentsMapper.toUpdatedCommentDTO(comment); + } + } + + @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()); + + return commentsMapper.toUpdatedCommentDTO(commentsRepository.save(comment)); + } + + @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); + } + + + 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/Comments/Service/Public/CommentPublicInterface.java b/evm-service/src/main/java/ru/practicum/Comments/Service/Public/CommentPublicInterface.java new file mode 100644 index 0000000..45589fd --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Service/Public/CommentPublicInterface.java @@ -0,0 +1,9 @@ +package ru.practicum.Comments.Service.Public; + +import ru.practicum.Comments.DTO.CommentDTO; + +import java.util.List; + +public interface CommentPublicInterface { + List getComments(Integer eventId, Integer from, Integer size); +} diff --git a/evm-service/src/main/java/ru/practicum/Comments/Service/Public/CommentPublicInterfaceImpl.java b/evm-service/src/main/java/ru/practicum/Comments/Service/Public/CommentPublicInterfaceImpl.java new file mode 100644 index 0000000..595d9b8 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Comments/Service/Public/CommentPublicInterfaceImpl.java @@ -0,0 +1,34 @@ +package ru.practicum.Comments.Service.Public; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import ru.practicum.Comments.DTO.CommentDTO; +import ru.practicum.Comments.Mapper.CommentsMapper; +import ru.practicum.Comments.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 +public class CommentPublicInterfaceImpl implements CommentPublicInterface { + 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); + + return commentsRepository.findCommentsByEvent_Id(eventId, pageable).stream() + .map(commentsMapper::toCommentDTO) + .toList(); + } +} 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..66f2f54 --- /dev/null +++ b/evm-service/src/main/java/ru/practicum/Event/DTO/EventCommentsDTO.java @@ -0,0 +1,21 @@ +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 LocalDateTime eventDate; + +} 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 index 74afdec..1d3a346 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,10 +1,7 @@ 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.DTO.*; import ru.practicum.Event.Model.Event; @Mapper(componentModel = "spring") @@ -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 index 2b81c22..75d358c 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 @@ -31,7 +31,7 @@ public class Event { private Category category; @Column(name = "confirmed_requests") - private Integer confirmedRequests = 0; + private Integer confirmedRequests; @Column(name = "created_on") private LocalDateTime createdOn = LocalDateTime.now(); @@ -66,5 +66,5 @@ public class Event { private State state; @Column(name = "views") - private Integer views = 0; + private Integer views; } 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/Private/EventPrivateServiceImpl.java index d5c52bb..925fc3f 100644 --- a/evm-service/src/main/java/ru/practicum/Event/Service/Private/EventPrivateServiceImpl.java +++ b/evm-service/src/main/java/ru/practicum/Event/Service/Private/EventPrivateServiceImpl.java @@ -48,6 +48,8 @@ public EventFullDTO addEvent(Integer userId, NewEventDTO event) { newEvent.setInitiator(user); newEvent.setCategory(category); newEvent.setState(PENDING); + newEvent.setConfirmedRequests(0); + newEvent.setViews(0); return eventMapper.toEventFullDTO(eventRepository.save(newEvent)); } diff --git a/evm-service/src/main/resources/schema.sql b/evm-service/src/main/resources/schema.sql index 97956c5..07e3ea3 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,17 @@ 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), + 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 +); + + +