feat: add new reaction types and enforce single reaction per type

This commit is contained in:
Tim
2025-07-11 13:31:26 +08:00
parent abf0203b7c
commit 53ce2dfa96
5 changed files with 44 additions and 4 deletions

View File

@@ -12,7 +12,11 @@ import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@Table(name = "reactions")
@Table(name = "reactions",
uniqueConstraints = {
@UniqueConstraint(columnNames = {"user_id", "post_id", "type"}),
@UniqueConstraint(columnNames = {"user_id", "comment_id", "type"})
})
public class Reaction {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

View File

@@ -7,5 +7,13 @@ public enum ReactionType {
LIKE,
DISLIKE,
RECOMMEND,
ANGRY
ANGRY,
FLUSHED,
STAR_STRUCK,
ROFL,
HOLDING_BACK_TEARS,
MIND_BLOWN,
POOP,
CLOWN,
SKULL
}

View File

@@ -28,6 +28,12 @@ public class ReactionService {
.orElseThrow(() -> new IllegalArgumentException("User not found"));
Post post = postRepository.findById(postId)
.orElseThrow(() -> new IllegalArgumentException("Post not found"));
java.util.Optional<Reaction> existing =
reactionRepository.findByUserAndPostAndType(user, post, type);
if (existing.isPresent()) {
reactionRepository.delete(existing.get());
return null;
}
Reaction reaction = new Reaction();
reaction.setUser(user);
reaction.setPost(post);
@@ -44,6 +50,12 @@ public class ReactionService {
.orElseThrow(() -> new IllegalArgumentException("User not found"));
Comment comment = commentRepository.findById(commentId)
.orElseThrow(() -> new IllegalArgumentException("Comment not found"));
java.util.Optional<Reaction> existing =
reactionRepository.findByUserAndCommentAndType(user, comment, type);
if (existing.isPresent()) {
reactionRepository.delete(existing.get());
return null;
}
Reaction reaction = new Reaction();
reaction.setUser(user);
reaction.setComment(comment);