diff --git a/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/SkillRepository.java b/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/SkillRepository.java index 14115318..facf3091 100644 --- a/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/SkillRepository.java +++ b/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/SkillRepository.java @@ -22,6 +22,8 @@ public interface SkillRepository { List findByOwnerId(String ownerId); Page findByOwnerId(String ownerId, Pageable pageable); void incrementDownloadCount(Long skillId); + void incrementSubscriptionCount(Long skillId); + void decrementSubscriptionCount(Long skillId); List findBySlug(String slug); List findByNamespaceSlugAndSlug(String namespaceSlug, String slug); } diff --git a/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/JpaSkillRepositoryAdapter.java b/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/JpaSkillRepositoryAdapter.java index 27c59583..1249f12d 100644 --- a/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/JpaSkillRepositoryAdapter.java +++ b/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/JpaSkillRepositoryAdapter.java @@ -87,6 +87,16 @@ public class JpaSkillRepositoryAdapter implements SkillRepository { delegate.incrementDownloadCount(skillId); } + @Override + public void incrementSubscriptionCount(Long skillId) { + delegate.incrementSubscriptionCount(skillId); + } + + @Override + public void decrementSubscriptionCount(Long skillId) { + delegate.decrementSubscriptionCount(skillId); + } + @Override public List findBySlug(String slug) { return delegate.findBySlug(slug); diff --git a/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/SkillJpaRepository.java b/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/SkillJpaRepository.java index e29a80d2..55ad2aad 100644 --- a/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/SkillJpaRepository.java +++ b/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/SkillJpaRepository.java @@ -44,6 +44,16 @@ public interface SkillJpaRepository extends JpaRepository, SkillRep @Query("UPDATE Skill s SET s.downloadCount = s.downloadCount + 1 WHERE s.id = :skillId") void incrementDownloadCount(@Param("skillId") Long skillId); + @Modifying + @Transactional + @Query("UPDATE Skill s SET s.subscriptionCount = s.subscriptionCount + 1 WHERE s.id = :skillId") + void incrementSubscriptionCount(@Param("skillId") Long skillId); + + @Modifying + @Transactional + @Query("UPDATE Skill s SET s.subscriptionCount = CASE WHEN s.subscriptionCount > 0 THEN s.subscriptionCount - 1 ELSE 0 END WHERE s.id = :skillId") + void decrementSubscriptionCount(@Param("skillId") Long skillId); + List findBySlug(String slug); @Query("SELECT s FROM Skill s JOIN Namespace n ON s.namespaceId = n.id WHERE n.slug = :namespaceSlug AND s.slug = :slug")