62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
|
package postgres
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"git.dragse.it/anthrove/otter-space-sdk/pkg/models"
|
||
|
"git.dragse.it/anthrove/otter-space-sdk/pkg/models/pgModels"
|
||
|
log "github.com/sirupsen/logrus"
|
||
|
"gorm.io/gorm"
|
||
|
)
|
||
|
|
||
|
func CreateUserNodeWithSourceRelation(ctx context.Context, db *gorm.DB, anthroveUserID models.AnthroveUserID, sourceDomain string, userID string, username string) error {
|
||
|
user := pgModels.User{
|
||
|
BaseModel: pgModels.BaseModel{
|
||
|
ID: string(anthroveUserID),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
if err := db.WithContext(ctx).FirstOrCreate(&user).Error; err != nil {
|
||
|
log.WithFields(log.Fields{
|
||
|
"anthrove_user_id": anthroveUserID,
|
||
|
}).Error("database: failed to find or create user")
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
source := pgModels.Source{
|
||
|
Domain: sourceDomain,
|
||
|
}
|
||
|
|
||
|
if err := db.WithContext(ctx).Where(&source).First(&source).Error; err != nil {
|
||
|
log.WithFields(log.Fields{
|
||
|
"source_domain": sourceDomain,
|
||
|
}).Error("database: failed to find source")
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
userSource := pgModels.UserSource{
|
||
|
UserID: user.ID,
|
||
|
SourceID: source.ID,
|
||
|
AccountUsername: username,
|
||
|
AccountID: userID,
|
||
|
}
|
||
|
|
||
|
if err := db.WithContext(ctx).Create(&userSource).Error; err != nil {
|
||
|
log.WithFields(log.Fields{
|
||
|
"anthrove_user_id": anthroveUserID,
|
||
|
"source_domain": sourceDomain,
|
||
|
"account_username": username,
|
||
|
"account_id": userID,
|
||
|
}).Error("database: failed to create user-source relationship")
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
log.WithFields(log.Fields{
|
||
|
"anthrove_user_id": anthroveUserID,
|
||
|
"source_domain": sourceDomain,
|
||
|
"account_username": username,
|
||
|
"account_id": userID,
|
||
|
}).Trace("database: created user-source relationship")
|
||
|
|
||
|
return nil
|
||
|
}
|