Skip to content

Commit c8ebafc

Browse files
committed
#3527 Refactor skill order calculation
1 parent 41a530f commit c8ebafc

File tree

5 files changed

+40
-71
lines changed

5 files changed

+40
-71
lines changed

dashboard/src/components/skills/SkillPage.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ const nextButtonClicked = () => {
174174
175175
<template>
176176
<div class="mt-2">
177-
<Card class="p-2" :pt="{ body: { class: 'p-0!' } }">
177+
<Card class="p-2" :pt="{ body: { class: 'p-0!' } }" v-if="skillsState.skill && (skillsState.skill.prevSkillId || skillsState.skill.nextSkillId)" >
178178
<template #content>
179179
<skill-navigation @prevButtonClicked="prevButtonClicked" @nextButtonClicked="nextButtonClicked" :skill="skillsState.skill" buttonSeverity="info" />
180180
</template>

service/src/main/java/skills/services/admin/SkillsAdminService.groovy

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -701,26 +701,6 @@ class SkillsAdminService {
701701
return res
702702
}
703703

704-
int sortByDisplayOrder(DisplayOrderRes a, DisplayOrderRes b) {
705-
if( a.groupId != null || b.groupId != null ) {
706-
if( a.groupId != null && b.groupId != null) {
707-
if( a.groupId != b.groupId ) {
708-
return a.skillGroupDisplayOrder <=> b.skillGroupDisplayOrder
709-
}
710-
}
711-
else {
712-
if( a.groupId != null && b.groupId == null ) {
713-
return a.skillGroupDisplayOrder <=> b.displayOrder
714-
}
715-
else {
716-
return a.displayOrder <=> b.skillGroupDisplayOrder
717-
}
718-
}
719-
}
720-
721-
return a.displayOrder <=> b.displayOrder
722-
}
723-
724704
@Transactional(readOnly = true)
725705
SkillDefRes getSkill(String projectId, String subjectId, String skillId) {
726706
SkillDefWithExtra res = skillDefWithExtraRepo.findByProjectIdAndSkillIdIgnoreCaseAndTypeIn(projectId, skillId, [SkillDef.ContainerType.Skill, SkillDef.ContainerType.SkillsGroup])

service/src/main/java/skills/skillLoading/SkillsLoader.groovy

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -540,26 +540,6 @@ class SkillsLoader {
540540
Integer points
541541
}
542542

543-
int sortByDisplayOrder(DisplayOrderRes a, DisplayOrderRes b) {
544-
if( a.groupId != null || b.groupId != null ) {
545-
if( a.groupId != null && b.groupId != null) {
546-
if( a.groupId != b.groupId ) {
547-
return a.skillGroupDisplayOrder <=> b.skillGroupDisplayOrder
548-
}
549-
}
550-
else {
551-
if( a.groupId != null && b.groupId == null ) {
552-
return a.skillGroupDisplayOrder <=> b.displayOrder
553-
}
554-
else {
555-
return a.displayOrder <=> b.skillGroupDisplayOrder
556-
}
557-
}
558-
}
559-
560-
return a.displayOrder <=> b.displayOrder
561-
}
562-
563543
class SkillOrderInfo {
564544
String nextSkillId = null;
565545
String prevSkillId = null;
@@ -569,21 +549,14 @@ class SkillsLoader {
569549

570550
SkillOrderInfo getSkillOrderStats(String projectId, String subjectId, String skillId) {
571551
SkillOrderInfo orderInfo = new SkillOrderInfo()
572-
List<DisplayOrderRes> skillOrder = skillDefRepo.findDisplayOrderByProjectIdAndSubjectId(projectId, subjectId)?.sort({a, b -> sortByDisplayOrder(a, b)})
573-
DisplayOrderRes currentSkill = skillOrder.find({ it -> it.getSkillId() == skillId })
574-
575-
if (currentSkill) {
576-
List<DisplayOrderRes> orderedGroup = skillOrder?.sort({a, b -> sortByDisplayOrder(a, b)});
577-
orderInfo.orderInGroup = orderedGroup.findIndexOf({it -> it.skillId == currentSkill.skillId}) + 1;
578-
orderInfo.totalSkills = orderedGroup.size();
579-
580-
int currentIndex = skillOrder.findIndexOf{ it -> it.skillId == currentSkill.skillId }
581-
if(currentIndex > 0) {
582-
orderInfo.prevSkillId = skillOrder[currentIndex - 1]?.skillId
583-
}
584-
if(currentIndex < orderInfo.totalSkills - 1) {
585-
orderInfo.nextSkillId = skillOrder[currentIndex + 1]?.skillId
586-
}
552+
DisplayOrderRes skill = skillDefRepo.findDisplayOrderByProjectIdAndSubjectIdAndSkillId(projectId, subjectId, skillId)
553+
Integer totalSkills = skillDefRepo.countSkillChildren(projectId, subjectId)
554+
555+
if (skill) {
556+
orderInfo.prevSkillId = skill.previousSkillId
557+
orderInfo.nextSkillId = skill.nextSkillId
558+
orderInfo.orderInGroup = skill.overallOrder
559+
orderInfo.totalSkills = totalSkills
587560
}
588561

589562
return orderInfo

service/src/main/java/skills/storage/model/DisplayOrderRes.groovy

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ package skills.storage.model
1717

1818
interface DisplayOrderRes {
1919
String getSkillId();
20-
Integer getDisplayOrder();
21-
Integer getSkillGroupDisplayOrder();
22-
String getGroupId();
23-
String getType();
20+
String getPreviousSkillId();
21+
String getNextSkillId();
22+
Integer getOverallOrder();
2423
}

service/src/main/java/skills/storage/repos/SkillDefRepo.groovy

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -231,17 +231,34 @@ interface SkillDefRepo extends CrudRepository<SkillDef, Integer>, PagingAndSorti
231231
List<SkillDef> findPreviousSkillDefs(String projectId, String skillId, int beforeDisplayOrder, List<RelationshipType> relationshipType, Pageable pageable)
232232

233233
@Nullable
234-
@Query(value='''select child.skill_id as skillId, child.display_order as displayOrder, skillGroup.display_order as skillGroupDisplayOrder, child.group_id as groupId, child.type as type
235-
from skill_definition subj,
236-
skill_relationship_definition rel,
237-
skill_definition child left join skill_definition skillGroup on (child.group_id = skillGroup.skill_id and skillGroup.project_id = child.project_id)
238-
where subj.project_id = ?1
239-
and subj.skill_id = ?2
240-
and child.type = 'Skill'
241-
and child.enabled = 'true'
242-
and subj.id = rel.parent_ref_id
243-
and child.id = rel.child_ref_id''', nativeQuery=true)
244-
List<DisplayOrderRes> findDisplayOrderByProjectIdAndSubjectId(String projectId, String subjectId)
234+
@Query(value='''select * from (
235+
select skillId,
236+
lag(skillId, 1) over ( order by displayOrder, skillGroupDisplayOrder ) as previousSkillId,
237+
lead(skillId, 1) over (order by displayOrder, skillGroupDisplayOrder) as nextSkillId,
238+
row_number() over () as overallOrder
239+
from (
240+
select child.skill_id as skillId,
241+
(case when skillGroup.display_order is null then child.display_order else skillGroup.display_order end) as displayOrder,
242+
(case when skillGroup.display_order is not null then child.display_order else skillGroup.display_order end) as skillGroupDisplayOrder,
243+
child.group_id as groupId,
244+
child.type as type
245+
from skill_definition subj,
246+
skill_relationship_definition rel,
247+
skill_definition child
248+
left join skill_definition skillGroup
249+
on (
250+
child.group_id = skillGroup.skill_id
251+
and skillGroup.project_id = child.project_id
252+
)
253+
where subj.project_id = ?1
254+
and subj.skill_id = ?2
255+
and child.type = 'Skill\'
256+
and child.enabled = 'true\'
257+
and subj.id = rel.parent_ref_id
258+
and child.id = rel.child_ref_id
259+
)
260+
) where skillId = ?3''', nativeQuery=true)
261+
DisplayOrderRes findDisplayOrderByProjectIdAndSubjectIdAndSkillId(String projectId, String subjectId, String skillId)
245262

246263
int countByProjectIdAndType(@Nullable String projectId, SkillDef.ContainerType type)
247264

0 commit comments

Comments
 (0)