38 lines
1.1 KiB
Go
38 lines
1.1 KiB
Go
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
|
|
}
|