service backend
This commit is contained in:
51
api/pkg/auth/dbab.go
Normal file
51
api/pkg/auth/dbab.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/tech/sendico/pkg/db/policy"
|
||||
"github.com/tech/sendico/pkg/db/repository/builder"
|
||||
"github.com/tech/sendico/pkg/db/template"
|
||||
"github.com/tech/sendico/pkg/mlogger"
|
||||
"github.com/tech/sendico/pkg/model"
|
||||
"github.com/tech/sendico/pkg/mservice"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type AccountBoundDB[T model.AccountBoundStorable] interface {
|
||||
Create(ctx context.Context, accountRef primitive.ObjectID, object T) error
|
||||
Get(ctx context.Context, accountRef, objectRef primitive.ObjectID, result T) error
|
||||
Update(ctx context.Context, accountRef primitive.ObjectID, object T) error
|
||||
Patch(ctx context.Context, accountRef, objectRef primitive.ObjectID, patch builder.Patch) error
|
||||
Delete(ctx context.Context, accountRef, objectRef primitive.ObjectID) error
|
||||
DeleteMany(ctx context.Context, accountRef primitive.ObjectID, query builder.Query) error
|
||||
FindOne(ctx context.Context, accountRef primitive.ObjectID, query builder.Query, result T) error
|
||||
ListIDs(ctx context.Context, accountRef primitive.ObjectID, query builder.Query) ([]primitive.ObjectID, error)
|
||||
ListAccountBound(ctx context.Context, accountRef, organizationRef primitive.ObjectID, query builder.Query) ([]model.AccountBoundStorable, error)
|
||||
}
|
||||
|
||||
func CreateAccountBound[T model.AccountBoundStorable](
|
||||
ctx context.Context,
|
||||
logger mlogger.Logger,
|
||||
pdb policy.DB,
|
||||
enforcer Enforcer,
|
||||
collection mservice.Type,
|
||||
db *mongo.Database,
|
||||
) (AccountBoundDB[T], error) {
|
||||
logger = logger.Named("account_bound")
|
||||
var policy model.PolicyDescription
|
||||
if err := pdb.GetBuiltInPolicy(ctx, mservice.Organizations, &policy); err != nil {
|
||||
logger.Warn("Failed to fetch organization policy description", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
res := &AccountBoundDBImp[T]{
|
||||
Logger: logger,
|
||||
DBImp: template.Create[T](logger, collection, db),
|
||||
Enforcer: enforcer,
|
||||
PermissionRef: policy.ID,
|
||||
Collection: collection,
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
Reference in New Issue
Block a user