package auth import ( "context" "github.com/tech/sendico/pkg/db/template" "github.com/tech/sendico/pkg/mlogger" "github.com/tech/sendico/pkg/model" "go.mongodb.org/mongo-driver/bson/primitive" ) // ArchivableDB implements archive operations with permission checking type ArchivableDB[T model.PermissionBoundStorable] interface { // SetArchived sets the archived status of an entity with permission checking SetArchived(ctx context.Context, accountRef, objectRef primitive.ObjectID, archived bool) error // IsArchived checks if an entity is archived with permission checking IsArchived(ctx context.Context, accountRef, objectRef primitive.ObjectID) (bool, error) // Archive archives an entity with permission checking (sets archived to true) Archive(ctx context.Context, accountRef, objectRef primitive.ObjectID) error // Unarchive unarchives an entity with permission checking (sets archived to false) Unarchive(ctx context.Context, accountRef, objectRef primitive.ObjectID) error } // NewArchivableDB creates a new auth.ArchivableDB instance func NewArchivableDB[T model.PermissionBoundStorable]( dbImp *template.DBImp[T], logger mlogger.Logger, enforcer Enforcer, createEmpty func() T, getArchivable func(T) model.Archivable, ) ArchivableDB[T] { return newArchivableDBImp(dbImp, logger, enforcer, createEmpty, getArchivable) }