@@ -118,6 +118,37 @@ export function createDefaultCollection({
118
118
) ;
119
119
}
120
120
121
+ /* delete collection related images/files */
122
+ export const delCollectionRelatedSource = async ( {
123
+ collections,
124
+ session
125
+ } : {
126
+ collections : ( CollectionWithDatasetType | DatasetCollectionSchemaType ) [ ] ;
127
+ session : ClientSession ;
128
+ } ) => {
129
+ if ( collections . length === 0 ) return ;
130
+
131
+ const teamId = collections [ 0 ] . teamId ;
132
+
133
+ if ( ! teamId ) return Promise . reject ( 'teamId is not exist' ) ;
134
+
135
+ const fileIdList = collections . map ( ( item ) => item ?. fileId || '' ) . filter ( Boolean ) ;
136
+ const relatedImageIds = collections
137
+ . map ( ( item ) => item ?. metadata ?. relatedImgId || '' )
138
+ . filter ( Boolean ) ;
139
+
140
+ // delete images
141
+ await delImgByRelatedId ( {
142
+ teamId,
143
+ relateIds : relatedImageIds ,
144
+ session
145
+ } ) ;
146
+ // delete files
147
+ await delFileByFileIdList ( {
148
+ bucketName : BucketNameEnum . dataset ,
149
+ fileIdList
150
+ } ) ;
151
+ } ;
121
152
/**
122
153
* delete collection and it related data
123
154
*/
@@ -134,26 +165,32 @@ export async function delCollectionAndRelatedSources({
134
165
135
166
if ( ! teamId ) return Promise . reject ( 'teamId is not exist' ) ;
136
167
168
+ const datasetIds = Array . from (
169
+ new Set (
170
+ collections . map ( ( item ) => {
171
+ if ( typeof item . datasetId === 'string' ) {
172
+ return String ( item . datasetId ) ;
173
+ }
174
+ return String ( item . datasetId . _id ) ;
175
+ } )
176
+ )
177
+ ) ;
137
178
const collectionIds = collections . map ( ( item ) => String ( item . _id ) ) ;
138
- const fileIdList = collections . map ( ( item ) => item ?. fileId || '' ) . filter ( Boolean ) ;
139
- const relatedImageIds = collections
140
- . map ( ( item ) => item ?. metadata ?. relatedImgId || '' )
141
- . filter ( Boolean ) ;
179
+
180
+ await delCollectionRelatedSource ( { collections, session } ) ;
142
181
143
182
// delete training data
144
183
await MongoDatasetTraining . deleteMany ( {
145
184
teamId,
185
+ datasetIds : { $in : datasetIds } ,
146
186
collectionId : { $in : collectionIds }
147
187
} ) ;
148
-
149
188
// delete dataset.datas
150
- await MongoDatasetData . deleteMany ( { teamId, collectionId : { $in : collectionIds } } , { session } ) ;
151
- // delete imgs
152
- await delImgByRelatedId ( {
153
- teamId,
154
- relateIds : relatedImageIds ,
155
- session
156
- } ) ;
189
+ await MongoDatasetData . deleteMany (
190
+ { teamId, datasetIds : { $in : datasetIds } , collectionId : { $in : collectionIds } } ,
191
+ { session }
192
+ ) ;
193
+
157
194
// delete collections
158
195
await MongoDatasetCollection . deleteMany (
159
196
{
@@ -163,9 +200,5 @@ export async function delCollectionAndRelatedSources({
163
200
) ;
164
201
165
202
// no session delete: delete files, vector data
166
- await deleteDatasetDataVector ( { teamId, collectionIds } ) ;
167
- await delFileByFileIdList ( {
168
- bucketName : BucketNameEnum . dataset ,
169
- fileIdList
170
- } ) ;
203
+ await deleteDatasetDataVector ( { teamId, datasetIds, collectionIds } ) ;
171
204
}
0 commit comments