fix(publish): emit event on confirm publish

Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com>
This commit is contained in:
XiaoSeS 2026-08-21 16:55:18 +08:00
parent fa04d2fa23
commit 77d9ed4bdd
2 changed files with 40 additions and 0 deletions

View file

@ -1,5 +1,6 @@
package com.iflytek.skillhub.domain.skill.service;
import com.iflytek.skillhub.domain.event.SkillPublishedEvent;
import com.iflytek.skillhub.domain.namespace.NamespaceMemberRepository;
import com.iflytek.skillhub.domain.namespace.NamespaceRole;
import com.iflytek.skillhub.domain.review.ReviewTask;
@ -145,6 +146,9 @@ public class SkillReviewSubmitService {
skill.setLatestVersionId(versionId);
skill.setUpdatedBy(actorUserId);
skillRepository.save(skill);
eventPublisher.publishEvent(new SkillPublishedEvent(
skill.getId(), version.getId(), actorUserId));
}
private void assertCanManageLifecycle(Skill skill, String actorUserId, Map<Long, NamespaceRole> userNamespaceRoles) {

View file

@ -1,5 +1,6 @@
package com.iflytek.skillhub.domain.skill.service;
import com.iflytek.skillhub.domain.event.SkillPublishedEvent;
import com.iflytek.skillhub.domain.namespace.NamespaceRole;
import com.iflytek.skillhub.domain.review.ReviewTask;
import com.iflytek.skillhub.domain.review.ReviewTaskRepository;
@ -180,7 +181,16 @@ class SkillReviewSubmitServiceTest {
assertEquals(SkillVersionStatus.PUBLISHED, version.getStatus());
assertNotNull(version.getPublishedAt());
assertEquals(versionId, skill.getLatestVersionId());
verify(skillVersionRepository).save(version);
verify(skillRepository).save(skill);
ArgumentCaptor<SkillPublishedEvent> eventCaptor =
ArgumentCaptor.forClass(SkillPublishedEvent.class);
verify(eventPublisher).publishEvent(eventCaptor.capture());
SkillPublishedEvent event = eventCaptor.getValue();
assertEquals(skillId, event.skillId());
assertEquals(versionId, event.versionId());
assertEquals(userId, event.publisherId());
}
@Test
@ -225,6 +235,7 @@ class SkillReviewSubmitServiceTest {
// When/Then
assertThrows(DomainBadRequestException.class,
() -> service.confirmPublish(skillId, versionId, userId, Map.of()));
verify(eventPublisher, never()).publishEvent(any());
}
@Test
@ -244,6 +255,31 @@ class SkillReviewSubmitServiceTest {
// When/Then
assertThrows(DomainBadRequestException.class,
() -> service.confirmPublish(skillId, versionId, userId, Map.of()));
verify(eventPublisher, never()).publishEvent(any());
}
@Test
@DisplayName("should not publish event when skill persistence fails")
void shouldNotPublishEventWhenSkillPersistenceFails() {
// Given
Long skillId = 1L;
Long versionId = 100L;
String userId = "user-1";
Skill skill = createSkill(skillId, userId, 10L, SkillVisibility.PRIVATE);
SkillVersion version = createVersion(versionId, skillId, SkillVersionStatus.UPLOADED);
RuntimeException persistenceFailure = new RuntimeException("skill save failed");
when(skillRepository.findById(skillId)).thenReturn(Optional.of(skill));
when(skillVersionRepository.findById(versionId)).thenReturn(Optional.of(version));
when(skillRepository.save(skill)).thenThrow(persistenceFailure);
// When/Then
RuntimeException thrown = assertThrows(RuntimeException.class,
() -> service.confirmPublish(skillId, versionId, userId, Map.of()));
assertSame(persistenceFailure, thrown);
verify(skillVersionRepository).save(version);
verify(eventPublisher, never()).publishEvent(any());
}
}