@@ -6,11 +6,15 @@ import { GetPostsDto } from '@gitroom/nestjs-libraries/dtos/posts/get.posts.dto'
6
6
import dayjs from 'dayjs' ;
7
7
import isoWeek from 'dayjs/plugin/isoWeek' ;
8
8
import weekOfYear from 'dayjs/plugin/weekOfYear' ;
9
+ import isSameOrAfter from 'dayjs/plugin/isSameOrAfter' ;
10
+ import utc from 'dayjs/plugin/utc' ;
9
11
import { v4 as uuidv4 } from 'uuid' ;
10
12
import { CreateTagDto } from '@gitroom/nestjs-libraries/dtos/posts/create.tag.dto' ;
11
13
12
14
dayjs . extend ( isoWeek ) ;
13
15
dayjs . extend ( weekOfYear ) ;
16
+ dayjs . extend ( isSameOrAfter ) ;
17
+ dayjs . extend ( utc ) ;
14
18
15
19
@Injectable ( )
16
20
export class PostsRepository {
@@ -80,7 +84,7 @@ export class PostsRepository {
80
84
} ) ;
81
85
}
82
86
83
- getPosts ( orgId : string , query : GetPostsDto ) {
87
+ async getPosts ( orgId : string , query : GetPostsDto ) {
84
88
const dateYear = dayjs ( ) . year ( query . year ) ;
85
89
const date =
86
90
query . display === 'day'
@@ -108,20 +112,35 @@ export class PostsRepository {
108
112
. add ( 2 , 'hours' )
109
113
. toDate ( ) ;
110
114
111
- return this . _post . model . post . findMany ( {
115
+ const list = await this . _post . model . post . findMany ( {
112
116
where : {
113
- OR : [
117
+ AND : [
114
118
{
115
- organizationId : orgId ,
119
+ OR : [
120
+ {
121
+ organizationId : orgId ,
122
+ } ,
123
+ {
124
+ submittedForOrganizationId : orgId ,
125
+ } ,
126
+ ] ,
116
127
} ,
117
128
{
118
- submittedForOrganizationId : orgId ,
129
+ OR : [
130
+ {
131
+ publishDate : {
132
+ gte : startDate ,
133
+ lte : endDate ,
134
+ } ,
135
+ } ,
136
+ {
137
+ intervalInDays : {
138
+ not : null ,
139
+ } ,
140
+ } ,
141
+ ] ,
119
142
} ,
120
143
] ,
121
- publishDate : {
122
- gte : startDate ,
123
- lte : endDate ,
124
- } ,
125
144
deletedAt : null ,
126
145
parentPostId : null ,
127
146
...( query . customer
@@ -140,6 +159,7 @@ export class PostsRepository {
140
159
submittedForOrganizationId : true ,
141
160
submittedForOrderId : true ,
142
161
state : true ,
162
+ intervalInDays : true ,
143
163
tags : {
144
164
select : {
145
165
tag : true ,
@@ -155,6 +175,28 @@ export class PostsRepository {
155
175
} ,
156
176
} ,
157
177
} ) ;
178
+
179
+ return list . reduce ( ( all , post ) => {
180
+ if ( ! post . intervalInDays ) {
181
+ return [ ...all , post ] ;
182
+ }
183
+
184
+ const addMorePosts = [ ] ;
185
+ let startingDate = dayjs . utc ( post . publishDate ) ;
186
+ while ( dayjs . utc ( endDate ) . isSameOrAfter ( startingDate ) ) {
187
+ if ( dayjs ( startingDate ) . isSameOrAfter ( dayjs . utc ( post . publishDate ) ) ) {
188
+ addMorePosts . push ( {
189
+ ...post ,
190
+ publishDate : startingDate . toDate ( ) ,
191
+ actualDate : post . publishDate ,
192
+ } ) ;
193
+ }
194
+
195
+ startingDate = startingDate . add ( post . intervalInDays , 'days' ) ;
196
+ }
197
+
198
+ return [ ...all , ...addMorePosts ] ;
199
+ } , [ ] as any [ ] ) ;
158
200
}
159
201
160
202
async deletePost ( orgId : string , group : string ) {
@@ -272,7 +314,8 @@ export class PostsRepository {
272
314
orgId : string ,
273
315
date : string ,
274
316
body : PostBody ,
275
- tags : { value : string ; label : string } [ ]
317
+ tags : { value : string ; label : string } [ ] ,
318
+ inter ?: number ,
276
319
) {
277
320
const posts : Post [ ] = [ ] ;
278
321
const uuid = uuidv4 ( ) ;
@@ -303,6 +346,7 @@ export class PostsRepository {
303
346
: { } ) ,
304
347
content : value . content ,
305
348
group : uuid ,
349
+ intervalInDays : inter ? + inter : null ,
306
350
approvedSubmitForOrder : APPROVED_SUBMIT_FOR_ORDER . NO ,
307
351
state : state === 'draft' ? ( 'DRAFT' as const ) : ( 'QUEUE' as const ) ,
308
352
image : JSON . stringify ( value . image ) ,
0 commit comments