70 lines
2.2 KiB
Go
70 lines
2.2 KiB
Go
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())
|
|
}
|