MCPcopy
hub / github.com/cloudreve/cloudreve / Update

Method Update

inventory/file.go:259–303  ·  view source on GitHub ↗
(ctx context.Context, file *ent.File)

Source from the content-addressed store, hash-verified

257}
258
259func (f *fileClient) Update(ctx context.Context, file *ent.File) (*ent.File, error) {
260 q := f.client.File.UpdateOne(file).
261 SetName(file.Name).
262 SetStoragePoliciesID(file.StoragePolicyFiles)
263
264 existingMetadata, err := f.client.Metadata.Query().Where(metadata.FileID(file.ID)).All(ctx)
265 if err != nil {
266 return nil, err
267 }
268
269 metadataIDs := lo.Map(file.Edges.Metadata, func(item *ent.Metadata, index int) int {
270 return item.ID
271 })
272
273 existingMetadataIds := lo.Map(existingMetadata, func(item *ent.Metadata, index int) int {
274 return item.ID
275 })
276
277 metadataToDelete := lo.Without(existingMetadataIds, metadataIDs...)
278
279 // process metadata diff, delete metadata not in file.Edges.Metadata
280 _, err = f.client.Metadata.Delete().Where(metadata.FileID(file.ID), metadata.IDIn(metadataToDelete...)).Exec(schema.SkipSoftDelete(ctx))
281 if err != nil {
282 return nil, err
283 }
284
285 // Update presented metadata
286 for _, metadata := range file.Edges.Metadata {
287 f.client.Metadata.UpdateOne(metadata).
288 SetName(metadata.Name).
289 SetValue(metadata.Value).
290 SetIsPublic(metadata.IsPublic).
291 Save(ctx)
292 }
293
294 // process direct link diff, delete direct link not in file.Edges.DirectLinks
295 _, err = f.client.DirectLink.Delete().Where(directlink.FileID(file.ID), directlink.IDNotIn(lo.Map(file.Edges.DirectLinks, func(item *ent.DirectLink, index int) int {
296 return item.ID
297 })...)).Exec(ctx)
298 if err != nil {
299 return nil, err
300 }
301
302 return q.Save(ctx)
303}
304
305func (f *fileClient) UpdateProps(ctx context.Context, file *ent.File, props *types.FileProps) (*ent.File, error) {
306 file, err := f.client.File.UpdateOne(file).

Callers

nothing calls this directly

Calls 15

FileIDFunction · 0.92
IDInFunction · 0.92
SkipSoftDeleteFunction · 0.92
FileIDFunction · 0.92
IDNotInFunction · 0.92
ExecMethod · 0.65
DeleteMethod · 0.65
SetStoragePoliciesIDMethod · 0.45
SetNameMethod · 0.45
UpdateOneMethod · 0.45
AllMethod · 0.45
WhereMethod · 0.45

Tested by

no test coverage detected