mirror of
https://github.com/iflytek/skillhub.git
synced 2026-10-08 03:07:51 +00:00
fix(skill): keep published view stable for owners
This commit is contained in:
parent
2757f0ede7
commit
c6b3eab034
3 changed files with 44 additions and 7 deletions
|
|
@ -399,14 +399,14 @@ public class SkillQueryService {
|
|||
}
|
||||
|
||||
private SkillVersion resolvePreviewVersion(Skill skill, String currentUserId) {
|
||||
SkillVersion ownerPreview = resolveOwnerPendingPreview(skill, currentUserId);
|
||||
if (ownerPreview != null) {
|
||||
return ownerPreview;
|
||||
SkillVersion publishedVersion = null;
|
||||
if (skill.getLatestVersionId() != null) {
|
||||
publishedVersion = skillVersionRepository.findById(skill.getLatestVersionId()).orElse(null);
|
||||
}
|
||||
if (skill.getLatestVersionId() == null) {
|
||||
return null;
|
||||
if (publishedVersion != null) {
|
||||
return publishedVersion;
|
||||
}
|
||||
return skillVersionRepository.findById(skill.getLatestVersionId()).orElse(null);
|
||||
return resolveOwnerPendingPreview(skill, currentUserId);
|
||||
}
|
||||
|
||||
private SkillVersion resolveOwnerPendingPreview(Skill skill, String currentUserId) {
|
||||
|
|
|
|||
|
|
@ -502,6 +502,40 @@ class SkillQueryServiceTest {
|
|||
assertFalse(result.canInteract());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetSkillDetail_ShouldKeepPublishedVersionWhenSkillAlreadyPublic() throws Exception {
|
||||
String namespaceSlug = "test-ns";
|
||||
String skillSlug = "test-skill";
|
||||
String ownerId = "owner-1";
|
||||
Map<Long, NamespaceRole> userNsRoles = Map.of();
|
||||
|
||||
Namespace namespace = new Namespace(namespaceSlug, "Test NS", ownerId);
|
||||
setId(namespace, 1L);
|
||||
Skill skill = new Skill(1L, skillSlug, ownerId, SkillVisibility.PUBLIC);
|
||||
setId(skill, 1L);
|
||||
skill.setStatus(SkillStatus.ACTIVE);
|
||||
skill.setLatestVersionId(11L);
|
||||
|
||||
SkillVersion published = new SkillVersion(1L, "1.0.0", ownerId);
|
||||
setId(published, 11L);
|
||||
published.setStatus(SkillVersionStatus.PUBLISHED);
|
||||
|
||||
SkillVersion pending = new SkillVersion(1L, "1.1.0", ownerId);
|
||||
setId(pending, 12L);
|
||||
pending.setStatus(SkillVersionStatus.PENDING_REVIEW);
|
||||
|
||||
when(namespaceRepository.findBySlug(namespaceSlug)).thenReturn(Optional.of(namespace));
|
||||
when(skillRepository.findByNamespaceIdAndSlug(1L, skillSlug)).thenReturn(Optional.of(skill));
|
||||
when(visibilityChecker.canAccess(skill, ownerId, userNsRoles)).thenReturn(true);
|
||||
when(skillVersionRepository.findById(11L)).thenReturn(Optional.of(published));
|
||||
|
||||
SkillQueryService.SkillDetailDTO result = service.getSkillDetail(namespaceSlug, skillSlug, ownerId, userNsRoles);
|
||||
|
||||
assertEquals("1.0.0", result.latestVersion());
|
||||
assertEquals("PUBLISHED", result.viewingVersionStatus());
|
||||
assertTrue(result.canInteract());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetVersionDetail_ShouldAllowPendingVersionForOwnerPreview() throws Exception {
|
||||
String namespaceSlug = "test-ns";
|
||||
|
|
|
|||
|
|
@ -13,9 +13,12 @@ function parseServerDateTime(value: string): Date {
|
|||
}
|
||||
|
||||
export function formatLocalDateTime(
|
||||
value: string,
|
||||
value: string | null | undefined,
|
||||
locale: string,
|
||||
options: Intl.DateTimeFormatOptions = { dateStyle: 'medium', timeStyle: 'short' },
|
||||
) {
|
||||
if (!value) {
|
||||
return '—'
|
||||
}
|
||||
return new Intl.DateTimeFormat(locale, options).format(parseServerDateTime(value))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue