package mutil import ( "context" "github.com/tech/sendico/pkg/db/repository" "github.com/tech/sendico/pkg/db/storable" "github.com/tech/sendico/pkg/mlogger" "github.com/tech/sendico/pkg/mutil/mzap" "go.mongodb.org/mongo-driver/bson/primitive" "go.uber.org/zap" ) func SetArchived[T storable.Storable](ctx context.Context, logger mlogger.Logger, newArchived bool, objectRef primitive.ObjectID, repo repository.Repository) error { objs, err := GetObjects[T](ctx, logger, repository.IDFilter(objectRef), nil, repo) if err != nil { logger.Warn("Failed to fetch object", zap.Error(err), mzap.ObjRef("object_ref", objectRef)) return err } if len(objs) == 0 { logger.Warn("No objects found to archive", mzap.ObjRef("object_ref", objectRef)) return nil } // Archive the first object found obj := objs[0] if archivable, ok := any(obj).(interface{ SetArchived(bool) }); ok { archivable.SetArchived(newArchived) if err := repo.Update(ctx, obj); err != nil { logger.Warn("Failed to update object archived status", zap.Error(err), mzap.ObjRef("object_ref", objectRef)) return err } } return nil }