54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package invitationdb
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/tech/sendico/pkg/auth"
|
|
"github.com/tech/sendico/pkg/db/policy"
|
|
"github.com/tech/sendico/pkg/db/repository"
|
|
ri "github.com/tech/sendico/pkg/db/repository/index"
|
|
"github.com/tech/sendico/pkg/mlogger"
|
|
"github.com/tech/sendico/pkg/model"
|
|
"github.com/tech/sendico/pkg/mservice"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type InvitationDB struct {
|
|
auth.ProtectedDBImp[*model.Invitation]
|
|
}
|
|
|
|
func Create(
|
|
ctx context.Context,
|
|
logger mlogger.Logger,
|
|
enforcer auth.Enforcer,
|
|
pdb policy.DB,
|
|
db *mongo.Database,
|
|
) (*InvitationDB, error) {
|
|
p, err := auth.CreateDBImp[*model.Invitation](ctx, logger, pdb, enforcer, mservice.Invitations, db)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// unique email per organization
|
|
if err := p.DBImp.Repository.CreateIndex(&ri.Definition{
|
|
Keys: []ri.Key{{Field: repository.OrgField().Build(), Sort: ri.Asc}, {Field: "description.email", Sort: ri.Asc}},
|
|
Unique: true,
|
|
}); err != nil {
|
|
p.DBImp.Logger.Error("Failed to create unique mnemonic index", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
// ttl index
|
|
ttl := int32(0) // zero ttl means expiration on date preset when inserting data
|
|
if err := p.DBImp.Repository.CreateIndex(&ri.Definition{
|
|
Keys: []ri.Key{{Field: "expiresAt", Sort: ri.Asc}},
|
|
TTL: &ttl,
|
|
}); err != nil {
|
|
p.DBImp.Logger.Warn("Failed to create ttl index in the invitations", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
return &InvitationDB{ProtectedDBImp: *p}, nil
|
|
}
|