@@ -18,18 +18,36 @@ const constants = require('../../app-constants')
18
18
async function searchChallengeTimelineTemplates ( criteria ) {
19
19
const list = await helper . scan ( 'ChallengeTimelineTemplate' )
20
20
const records = _ . filter ( list , e => ( ! criteria . typeId || criteria . typeId === e . typeId ) &&
21
- ( ! criteria . timelineTemplateId || criteria . timelineTemplateId === e . timelineTemplateId ) )
21
+ ( ! criteria . timelineTemplateId || criteria . timelineTemplateId === e . timelineTemplateId ) &&
22
+ ( ! criteria . trackId || criteria . trackId === e . trackId ) &&
23
+ ( ! criteria . isDefault || criteria . isDefault === e . isDefault ) )
22
24
return records
23
25
}
24
26
25
27
searchChallengeTimelineTemplates . schema = {
26
28
criteria : Joi . object ( ) . keys ( {
27
29
typeId : Joi . optionalId ( ) ,
28
30
trackId : Joi . optionalId ( ) ,
29
- timelineTemplateId : Joi . optionalId ( )
31
+ timelineTemplateId : Joi . optionalId ( ) ,
32
+ isDefault : Joi . boolean ( )
30
33
} )
31
34
}
32
35
36
+ /**
37
+ * Unset existing default timeline template in order to create a new one
38
+ * @param {String } typeId the type ID
39
+ * @param {String } trackId the track ID
40
+ */
41
+ async function unsetDefaultTimelineTemplate ( typeId , trackId ) {
42
+ const records = await searchChallengeTimelineTemplates ( { typeId, trackId, isDefault : true } )
43
+ if ( records . length === 0 ) {
44
+ return
45
+ }
46
+ for ( const record of records ) {
47
+ await fullyUpdateChallengeTimelineTemplate ( record . id , { ...record , isDefault : false } )
48
+ }
49
+ }
50
+
33
51
/**
34
52
* Create challenge type timeline template.
35
53
* @param {Object } data the data to create challenge type timeline template
@@ -46,6 +64,10 @@ async function createChallengeTimelineTemplate (data) {
46
64
await helper . getById ( 'ChallengeTrack' , data . trackId )
47
65
await helper . getById ( 'TimelineTemplate' , data . timelineTemplateId )
48
66
67
+ if ( data . isDefault ) {
68
+ await unsetDefaultTimelineTemplate ( data . typeId , data . trackId )
69
+ }
70
+
49
71
const ret = await helper . create ( 'ChallengeTimelineTemplate' , _ . assign ( { id : uuid ( ) } , data ) )
50
72
// post bus event
51
73
await helper . postBusEvent ( constants . Topics . ChallengeTimelineTemplateCreated , ret )
@@ -56,7 +78,8 @@ createChallengeTimelineTemplate.schema = {
56
78
data : Joi . object ( ) . keys ( {
57
79
typeId : Joi . id ( ) ,
58
80
trackId : Joi . id ( ) ,
59
- timelineTemplateId : Joi . id ( )
81
+ timelineTemplateId : Joi . id ( ) ,
82
+ isDefault : Joi . boolean ( ) . default ( false ) . required ( )
60
83
} ) . required ( )
61
84
}
62
85
@@ -84,7 +107,8 @@ async function fullyUpdateChallengeTimelineTemplate (challengeTimelineTemplateId
84
107
85
108
if ( record . typeId === data . typeId &&
86
109
record . trackId === data . trackId &&
87
- record . timelineTemplateId === data . timelineTemplateId ) {
110
+ record . timelineTemplateId === data . timelineTemplateId &&
111
+ record . isDefault === data . isDefault ) {
88
112
// no change
89
113
return record
90
114
}
@@ -99,6 +123,10 @@ async function fullyUpdateChallengeTimelineTemplate (challengeTimelineTemplateId
99
123
await helper . getById ( 'ChallengeTrack' , data . trackId )
100
124
await helper . getById ( 'TimelineTemplate' , data . timelineTemplateId )
101
125
126
+ if ( data . isDefault ) {
127
+ await unsetDefaultTimelineTemplate ( data . typeId , data . trackId )
128
+ }
129
+
102
130
const ret = await helper . update ( record , data )
103
131
// post bus event
104
132
await helper . postBusEvent ( constants . Topics . ChallengeTimelineTemplateUpdated , ret )
0 commit comments