package google import ( "context" "git.gorlug.de/code/ersteller" google_http "git.gorlug.de/code/ersteller/authentication/google/http" "git.gorlug.de/code/ersteller/starter/ent" "git.gorlug.de/code/ersteller/starter/ent/googleauth" "git.gorlug.de/code/ersteller/starter/ent/schema" "git.gorlug.de/code/ersteller/starter/ent/user" "golang.org/x/oauth2" ) type Database struct { db *ent.Client } func NewDatabase(db *ent.Client) google_http.Database { return &Database{ db: db, } } func (d *Database) GetUserIdByEmail(ctx context.Context, email string) (int, error) { return d.db.User.Query().Where(user.Email(email)).OnlyID(ctx) } func (d *Database) CreateUser(ctx context.Context, email string) (int, error) { newUser, err := d.db.User.Create().SetEmail(email).Save(ctx) if err != nil { ersteller.LogError("Failed to create user: %v", err) return -1, err } return newUser.ID, nil } func (d *Database) SaveCredentials(ctx context.Context, userId int, token *oauth2.Token) error { existing, err := d.db.GoogleAuth.Query().Where(googleauth.HasUserWith(user.ID(userId))).Only(ctx) if err == nil { _, err = existing.Update().SetCredentials(schema.Credentials{Token: *token}).Save(ctx) return err } if !ent.IsNotFound(err) { return err } _, err = d.db.GoogleAuth.Create(). SetUserID(userId). SetCredentials(schema.Credentials{Token: *token}). Save(ctx) return err }