package indexable import ( "context" "github.com/tech/sendico/pkg/db/repository" "github.com/tech/sendico/pkg/db/repository/builder" "github.com/tech/sendico/pkg/mlogger" "github.com/tech/sendico/pkg/model" "go.mongodb.org/mongo-driver/bson/primitive" ) // Example usage of the generic IndexableDB with different types // Example 1: Using with Project func ExampleProjectIndexableDB(repo repository.Repository, logger mlogger.Logger, organizationRef primitive.ObjectID) { // Define helper functions for Project createEmpty := func() *model.Project { return &model.Project{} } getIndexable := func(p *model.Project) *model.Indexable { return &p.Indexable } // Create generic IndexableDB for Project projectDB := NewIndexableDB(repo, logger, createEmpty, getIndexable) // Use with organization filter orgFilter := repository.OrgFilter(organizationRef) projectDB.Reorder(context.Background(), primitive.NewObjectID(), 2, orgFilter) } // Example 3: Using with Task func ExampleTaskIndexableDB(repo repository.Repository, logger mlogger.Logger, statusRef primitive.ObjectID) { // Define helper functions for Task createEmpty := func() *model.Task { return &model.Task{} } getIndexable := func(t *model.Task) *model.Indexable { return &t.Indexable } // Create generic IndexableDB for Task taskDB := NewIndexableDB(repo, logger, createEmpty, getIndexable) // Use with status filter statusFilter := repository.Query().Comparison(repository.Field("statusRef"), builder.Eq, statusRef) taskDB.Reorder(context.Background(), primitive.NewObjectID(), 3, statusFilter) } // Example 5: Using without any filter (global reordering) func ExampleGlobalIndexableDB(repo repository.Repository, logger mlogger.Logger) { // Define helper functions for any Indexable type createEmpty := func() *model.Project { return &model.Project{} } getIndexable := func(p *model.Project) *model.Indexable { return &p.Indexable } // Create generic IndexableDB without filters globalDB := NewIndexableDB(repo, logger, createEmpty, getIndexable) // Use without any filter - reorders all items globally globalDB.Reorder(context.Background(), primitive.NewObjectID(), 5, repository.Query()) }