forked from baron/baron-sso
Implement tenant import and RP auto login policies
This commit is contained in:
40
backend/internal/repository/rp_user_metadata_repository.go
Normal file
40
backend/internal/repository/rp_user_metadata_repository.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"baron-sso-backend/internal/domain"
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
)
|
||||
|
||||
type RPUserMetadataRepository interface {
|
||||
Get(ctx context.Context, clientID, userID string) (*domain.RPUserMetadata, error)
|
||||
Upsert(ctx context.Context, metadata *domain.RPUserMetadata) error
|
||||
}
|
||||
|
||||
type rpUserMetadataRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewRPUserMetadataRepository(db *gorm.DB) RPUserMetadataRepository {
|
||||
return &rpUserMetadataRepository{db: db}
|
||||
}
|
||||
|
||||
func (r *rpUserMetadataRepository) Get(ctx context.Context, clientID, userID string) (*domain.RPUserMetadata, error) {
|
||||
var metadata domain.RPUserMetadata
|
||||
if err := r.db.WithContext(ctx).First(&metadata, "client_id = ? AND user_id = ?", clientID, userID).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &metadata, nil
|
||||
}
|
||||
|
||||
func (r *rpUserMetadataRepository) Upsert(ctx context.Context, metadata *domain.RPUserMetadata) error {
|
||||
return r.db.WithContext(ctx).Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{
|
||||
{Name: "client_id"},
|
||||
{Name: "user_id"},
|
||||
},
|
||||
DoUpdates: clause.AssignmentColumns([]string{"metadata", "updated_at"}),
|
||||
}).Create(metadata).Error
|
||||
}
|
||||
Reference in New Issue
Block a user