65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
|
|
package repository
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
libmongo "gateway/internal/library/mongo"
|
||
|
|
authdomain "gateway/internal/model/auth/domain"
|
||
|
|
"gateway/internal/model/auth/domain/entity"
|
||
|
|
domrepo "gateway/internal/model/auth/domain/repository"
|
||
|
|
|
||
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
||
|
|
mongodriver "go.mongodb.org/mongo-driver/v2/mongo"
|
||
|
|
)
|
||
|
|
|
||
|
|
// RegistrationMetaRepositoryParam configures the Mongo registration metadata repository.
|
||
|
|
type RegistrationMetaRepositoryParam struct {
|
||
|
|
Conf *libmongo.Conf
|
||
|
|
}
|
||
|
|
|
||
|
|
type registrationMetaRepository struct {
|
||
|
|
db libmongo.DocumentDBUseCase
|
||
|
|
}
|
||
|
|
|
||
|
|
// NewRegistrationMetaRepository creates a Mongo-backed RegistrationMetaRepository.
|
||
|
|
func NewRegistrationMetaRepository(param RegistrationMetaRepositoryParam) domrepo.RegistrationMetaRepository {
|
||
|
|
documentDB, err := libmongo.NewDocumentDB(param.Conf, entity.RegistrationMetadata{}.CollectionName())
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
return ®istrationMetaRepository{db: documentDB}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *registrationMetaRepository) Insert(ctx context.Context, rec *entity.RegistrationMetadata) error {
|
||
|
|
now := time.Now().UTC().UnixMilli()
|
||
|
|
if rec.ID.IsZero() {
|
||
|
|
rec.ID = bson.NewObjectID()
|
||
|
|
}
|
||
|
|
if rec.CreateAt == 0 {
|
||
|
|
rec.CreateAt = now
|
||
|
|
}
|
||
|
|
if rec.OccurredAt == 0 {
|
||
|
|
rec.OccurredAt = now
|
||
|
|
}
|
||
|
|
_, err := r.db.GetClient().InsertOne(ctx, rec)
|
||
|
|
if err != nil {
|
||
|
|
if mongodriver.IsDuplicateKeyError(err) {
|
||
|
|
return authdomain.ErrDuplicateRegistrationMeta
|
||
|
|
}
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// Index20260521002UP ensures registration_metadata collection indexes exist.
|
||
|
|
func (r *registrationMetaRepository) Index20260521002UP(ctx context.Context) error {
|
||
|
|
return r.db.PopulateMultiIndex(ctx,
|
||
|
|
[]string{authdomain.BSONFieldTenantID, authdomain.BSONFieldUID},
|
||
|
|
[]int32{1, 1},
|
||
|
|
true,
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
var _ domrepo.RegistrationMetaRepository = (*registrationMetaRepository)(nil)
|