mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-19 08:01:16 +00:00
60 lines
1.9 KiB
Go
60 lines
1.9 KiB
Go
package seed
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
"github.com/warmbly/warmbly/internal/models"
|
|
"github.com/warmbly/warmbly/internal/pkg/argon2"
|
|
)
|
|
|
|
func seedUsers(ctx context.Context, pool *pgxpool.Pool, r *Result) error {
|
|
hash, err := argon2.Hash(TestPassword)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
type user struct {
|
|
id uuid.UUID
|
|
first string
|
|
last string
|
|
email string
|
|
adminPerm uint32
|
|
role string
|
|
}
|
|
users := []user{
|
|
{UserAdminID, "Super", "Admin", "admin@warmbly.local", uint32(models.AllAdminPermissions), "super-admin"},
|
|
{UserOwnerID, "Olivia", "Owner", "owner@warmbly.local", 0, "org-owner"},
|
|
{UserFounderID, "Frank", "Founder", "founder@warmbly.local", 0, "trial-owner"},
|
|
{UserManagerID, "Marco", "Manager", "manager@warmbly.local", 0, "org-manager"},
|
|
{UserViewerID, "Vera", "Viewer", "viewer@warmbly.local", 0, "org-viewer"},
|
|
}
|
|
|
|
for _, u := range users {
|
|
_, err := pool.Exec(ctx, `
|
|
INSERT INTO users (id, first_name, last_name, email, password_hash, max_organizations, free_trial_used, admin_permissions, admin_granted_at, created_at, updated_at)
|
|
VALUES ($1,$2,$3,$4,$5,5,TRUE,$6,
|
|
CASE WHEN $6 > 0 THEN NOW() ELSE NULL END,
|
|
NOW(), NOW())
|
|
ON CONFLICT (email) DO UPDATE SET
|
|
first_name = EXCLUDED.first_name,
|
|
last_name = EXCLUDED.last_name,
|
|
password_hash = EXCLUDED.password_hash,
|
|
admin_permissions = EXCLUDED.admin_permissions,
|
|
updated_at = NOW()
|
|
`, u.id, u.first, u.last, u.email, hash, u.adminPerm)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
r.Users = append(r.Users, SeededUser{Role: u.role, Email: u.email, ID: u.id.String()})
|
|
}
|
|
|
|
// admin_granted_by is a self-FK that has to point to a real user. Backfill
|
|
// it for the super admin row after the row exists.
|
|
_, err = pool.Exec(ctx, `
|
|
UPDATE users SET admin_granted_by = id WHERE id = $1 AND admin_granted_by IS NULL
|
|
`, UserAdminID)
|
|
return err
|
|
}
|