36 lines
1.3 KiB
Go
36 lines
1.3 KiB
Go
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)
|
|
}
|