@@ -218,9 +218,10 @@ func (qb *editQueryBuilder) buildQuery(filter models.EditQueryInput, userID uuid
218
218
if filter .TargetType == nil || * filter .TargetType == "" {
219
219
return nil , errors .New ("TargetType is required when TargetID filter is used" )
220
220
}
221
+ jsonID , _ := json .Marshal (* targetID )
221
222
222
223
// Union is significantly faster than an OR query
223
- query . AddWhere ( fmt .Sprintf (`
224
+ whereQueryString := fmt .Sprintf (`
224
225
edits.id IN (
225
226
SELECT id
226
227
FROM edits E
@@ -230,11 +231,55 @@ func (qb *editQueryBuilder) buildQuery(filter models.EditQueryInput, userID uuid
230
231
FROM edits E
231
232
JOIN %[1]s_edits TJ ON TJ.edit_id = E.id
232
233
WHERE TJ.%[1]s_id = ?
234
+
235
+ ` , strings .ToLower (filter .TargetType .String ()))
236
+
237
+ switch * filter .TargetType {
238
+ case models .TargetTypeEnumPerformer :
239
+ // Add scenes with performer to performer edit query
240
+ whereQueryString += `
241
+ UNION
242
+ SELECT id
243
+ FROM edits E
244
+ WHERE jsonb_path_query_array(data, '$.new_data.added_performers[*].performer_id') @> ?
245
+ AND E.status = 'PENDING'
246
+ AND E.target_type = 'SCENE'
247
+ )
248
+ `
249
+ query .AddWhere (whereQueryString )
250
+ query .AddArg (jsonID , * targetID , jsonID )
251
+ case models .TargetTypeEnumStudio :
252
+ // Add scenes with studio to studio edit query
253
+ whereQueryString += `
254
+ UNION
255
+ SELECT id
256
+ FROM edits E
257
+ WHERE E.status = 'PENDING' AND
258
+ E.target_type = 'SCENE' AND
259
+ E.data->'new_data'->'studio_id' @> ?
260
+ )
261
+ `
262
+ query .AddWhere (whereQueryString )
263
+ query .AddArg (jsonID , * targetID , jsonID )
264
+ case models .TargetTypeEnumTag :
265
+ // Add scenes with tag to tag edit query
266
+ whereQueryString += `
267
+ UNION
268
+ SELECT id
269
+ FROM edits E
270
+ WHERE E.status = 'PENDING' AND
271
+ E.target_type = 'SCENE' AND
272
+ E.data->'new_data'->'added_tags' @> ?
233
273
)
234
- ` , strings .ToLower (filter .TargetType .String ())))
274
+ `
275
+ query .AddWhere (whereQueryString )
276
+ query .AddArg (jsonID , * targetID , jsonID )
277
+ default :
278
+ whereQueryString += ")"
279
+ query .AddWhere (whereQueryString )
280
+ query .AddArg (jsonID , * targetID )
281
+ }
235
282
236
- jsonID , _ := json .Marshal (* targetID )
237
- query .AddArg (jsonID , * targetID )
238
283
} else if q := filter .TargetType ; q != nil && * q != "" {
239
284
query .Eq ("target_type" , q .String ())
240
285
}
0 commit comments