package template

import (
	"context"

	"github.com/tech/sendico/pkg/db/repository/builder"
	"github.com/tech/sendico/pkg/db/storable"
	"go.mongodb.org/mongo-driver/v2/bson"
)

type DB[T storable.Storable] interface {
	Create(ctx context.Context, object T) error
	InsertMany(ctx context.Context, objects []T) error
	Get(ctx context.Context, objectRef bson.ObjectID, result T) error
	Update(ctx context.Context, object T) error
	Patch(ctx context.Context, objectRef bson.ObjectID, patch builder.Patch) error
	Delete(ctx context.Context, objectRef bson.ObjectID) error
	DeleteMany(ctx context.Context, query builder.Query) error
	DeleteCascade(ctx context.Context, objectRef bson.ObjectID) error
	FindOne(ctx context.Context, query builder.Query, result T) error
}
