Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

新增星球评论点赞、取消点赞功能 #194

Merged
merged 6 commits into from
Mar 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions design/domain/star_comment_like/_gen.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
cmd:star_comment_like.LikeStarComment:点赞星球评论
cmd:star_comment_like.UnlikeStarComment:取消点赞星球评论

de:star_comment_like.StarCommentLike:StarCommentLiked:已点赞星球评论
de:star_comment_like.StarCommentLike:StarCommentUnliked:已取消点赞星球评论
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.only4.adapter.domain.repositories;

import com.only4.domain.aggregates.star.Star;
import org.netcorepal.cap4j.ddd.domain.aggregate.annotation.Aggregate;
import org.netcorepal.cap4j.ddd.domain.repo.AbstractJpaRepository;
import org.netcorepal.cap4j.ddd.domain.repo.AggregateRepository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Component;
/**
* 本文件由[cap4j-ddd-codegen-maven-plugin]生成
* @author cap4j-ddd-codegen
* @date 2025/03/08
*/
public interface StarRepository extends AggregateRepository<Star, Long> {

@Component
@Aggregate(aggregate = "Star", name = "Star", type = Aggregate.TYPE_REPOSITORY, description = "")
public static class StarJpaRepositoryAdapter extends AbstractJpaRepository<Star, Long>
{
public StarJpaRepositoryAdapter(JpaSpecificationExecutor<Star> jpaSpecificationExecutor, JpaRepository<Star, Long> jpaRepository) {
super(jpaSpecificationExecutor, jpaRepository);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.only4.application.commands.star_comment_like;


import com.only4.common.exception.KnownException;
import com.only4.domain.aggregates.star_comment_like.StarCommentLike;
import com.only4.domain.aggregates.star_comment_like.factory.StarCommentLikeFactory;
import jakarta.validation.constraints.Positive;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
import org.netcorepal.cap4j.ddd.Mediator;
import org.netcorepal.cap4j.ddd.application.RequestParam;
import org.netcorepal.cap4j.ddd.application.command.Command;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
* 点赞星球评论
*
* @author cap4j-ddd-codegen
* @date 2025/03/08
*/
public class LikeStarCommentCmd {

/**
* LikeStarCommentCmd命令请求实现
*/
@Service
@RequiredArgsConstructor
@Slf4j
public static class Handler implements Command<Request, Response> {
@Override
public Response exec(Request cmd) {
StarCommentLike like = Optional.of(Mediator.factories()
.create(StarCommentLikeFactory.Payload.builder()
.starId(cmd.getStarId())
.starCommentId(cmd.getStarCommentId())
.build())).orElseThrow( () -> new KnownException("点赞失败"));

like.like();
Mediator.uow().persist(like);
Mediator.uow().save();

return Response.builder()
.success(true)
.build();
}
}

/**
* LikeStarCommentCmd命令请求参数
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Request implements RequestParam<Response> {
@Positive
Long starId;
@Positive
Long starCommentId;

}

/**
* LikeStarCommentCmd命令响应
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Response {
boolean success;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package com.only4.application.commands.star_comment_like;


import com.only4.common.exception.KnownException;
import com.only4.domain.aggregates.star_comment.StarComment;
import com.only4.domain.aggregates.star_comment.meta.StarCommentSchema;
import com.only4.domain.aggregates.star_comment_like.StarCommentLike;
import com.only4.domain.aggregates.star_comment_like.factory.StarCommentLikeFactory;
import jakarta.validation.constraints.Positive;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
import org.netcorepal.cap4j.ddd.Mediator;
import org.netcorepal.cap4j.ddd.application.RequestParam;
import org.netcorepal.cap4j.ddd.application.command.Command;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
* 取消点赞星球评论
*
* @author cap4j-ddd-codegen
* @date 2025/03/08
*/
public class UnlikeStarCommentCmd {

/**
* UnlikeStarCommentCmd命令请求实现
*/
@Service
@RequiredArgsConstructor
@Slf4j
public static class Handler implements Command<Request, Response> {
@Override
public Response exec(Request cmd) {
StarCommentLike record = Optional.of(Mediator.factories()
.create(StarCommentLikeFactory.Payload.builder()
.starId(cmd.getStarId())
.starCommentId(cmd.getStarCommentId())
.build())).orElseThrow( () -> new KnownException("点赞记录不存在"));

record.unlike();
Mediator.uow().persist(record);
Mediator.uow().save();

return Response.builder()
.success(true)
.build();
}
}

/**
* UnlikeStarCommentCmd命令请求参数
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Request implements RequestParam<Response> {
@Positive
Long starId;
@Positive
Long starCommentId;

}

/**
* UnlikeStarCommentCmd命令响应
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Response {
boolean success;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.only4.application.subscribers.domain;

import com.only4.application.commands.star.UpdateStarLikeCountCmd;
import com.only4.domain.aggregates.star_comment_like.StarCommentLike;
import com.only4.domain.aggregates.star_comment_like.events.StarCommentLikedDomainEvent;
import lombok.RequiredArgsConstructor;
import org.netcorepal.cap4j.ddd.Mediator;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
* StarCommentLike.StarCommentLikedDomainEvent领域事件订阅
* 已点赞星球评论
*/
@Service
@RequiredArgsConstructor
public class StarCommentLikedDomainEventSubscriber {

@EventListener(StarCommentLikedDomainEvent.class)
public void updateStarLikeCount(StarCommentLikedDomainEvent event) {
StarCommentLike record = event.getEntity();

Optional.of(UpdateStarLikeCountCmd.Request.builder()
.starId(record.getStarId())
.likeCount(1)
.build()).ifPresent(Mediator.commands()::send);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.only4.application.subscribers.domain;

import com.only4.application.commands.star.UpdateStarLikeCountCmd;
import com.only4.domain.aggregates.star_comment_like.StarCommentLike;
import com.only4.domain.aggregates.star_comment_like.events.StarCommentUnlikedDomainEvent;
import lombok.RequiredArgsConstructor;
import org.netcorepal.cap4j.ddd.Mediator;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
* StarCommentLike.StarCommentUnlikedDomainEvent领域事件订阅
* 已取消点赞星球评论
*/
@Service
@RequiredArgsConstructor
public class StarCommentUnlikedDomainEventSubscriber {

@EventListener(StarCommentUnlikedDomainEvent.class)
public void updateStarLikeCount(StarCommentUnlikedDomainEvent event) {
StarCommentLike record = event.getEntity();

Optional.of(UpdateStarLikeCountCmd.Request.builder()
.starId(record.getStarId())
.likeCount(-1)
.build()).ifPresent(Mediator.commands()::send);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -176,5 +176,7 @@ public com.only4.domain.aggregates.star_comment.StarCommentStatistics getStarCom
@Column(name = "`del_flag`")
Boolean delFlag;



// 【字段映射结束】本段落由[cap4j-ddd-codegen-maven-plugin]维护,请不要手工改动
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.only4.domain.aggregates.star_comment_like;

import apache.rocketmq.v2.Address;
import com.only4.domain.aggregates.star_comment.events.StarCommentCreatedDomainEvent;
import com.only4.domain.aggregates.star_comment_like.events.StarCommentLikedDomainEvent;
import com.only4.domain.aggregates.star_comment_like.events.StarCommentUnlikedDomainEvent;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -13,6 +16,8 @@
import jakarta.persistence.Table;
import jakarta.persistence.*;

import static org.netcorepal.cap4j.ddd.domain.event.DomainEventSupervisorSupport.events;

/**
* 星球评论点赞
* <p>
Expand All @@ -38,6 +43,13 @@ public class StarCommentLike implements ValueObject<Long> {

// 【行为方法开始】

public void like() {
events().attach(new StarCommentLikedDomainEvent(this), this);
}

public void unlike() {
events().attach(new StarCommentUnlikedDomainEvent(this), this);
}

// 【行为方法结束】

Expand Down Expand Up @@ -114,6 +126,8 @@ public int hashCode() {
@Column(name = "`del_flag`")
Boolean delFlag;



// 【字段映射结束】本段落由[cap4j-ddd-codegen-maven-plugin]维护,请不要手工改动
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.only4.domain.aggregates.star_comment_like.events;

import com.only4.domain.aggregates.star_comment_like.StarCommentLike;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.netcorepal.cap4j.ddd.domain.aggregate.annotation.Aggregate;
import org.netcorepal.cap4j.ddd.domain.event.annotation.DomainEvent;

/**
* StarCommentLike.StarCommentLikedDomainEvent领域事件
* 已点赞星球评论
*
* @author cap4j-ddd-codegen
* @date 2025/03/08
*/
@DomainEvent(persist = false)
@Aggregate(aggregate = "StarCommentLike", name = "StarCommentLikedDomainEvent", type = Aggregate.TYPE_DOMAIN_EVENT, description = "")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class StarCommentLikedDomainEvent {
StarCommentLike entity;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.only4.domain.aggregates.star_comment_like.events;

import com.only4.domain.aggregates.star_comment_like.StarCommentLike;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.netcorepal.cap4j.ddd.domain.aggregate.annotation.Aggregate;
import org.netcorepal.cap4j.ddd.domain.event.annotation.DomainEvent;

/**
* StarCommentLike.StarCommentUnlikedDomainEvent领域事件
* 已取消点赞星球评论
*
* @author cap4j-ddd-codegen
* @date 2025/03/08
*/
@DomainEvent(persist = false)
@Aggregate(aggregate = "StarCommentLike", name = "StarCommentUnlikedDomainEvent", type = Aggregate.TYPE_DOMAIN_EVENT, description = "")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class StarCommentUnlikedDomainEvent {
StarCommentLike entity;
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ public StarCommentLike create(Payload payload) {
@NoArgsConstructor
@AllArgsConstructor
public static class Payload implements AggregatePayload<StarCommentLike> {
String name;
Long starId;
Long starCommentId;

}
}
Loading