Files
phylum/server/internal/core/db/bootstrap.go
2024-11-01 00:25:56 +05:30

86 lines
1.7 KiB
Go

package db
import (
"context"
"errors"
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
)
const DefaultUserUsername = "phylum"
const DefaultUserDisplayName = "Phylum"
func (d DbHandler) BootstrapData(ctx context.Context) error {
if _, err := d.UserByUsername(ctx, DefaultUserUsername); err != nil {
if errors.Is(err, pgx.ErrNoRows) {
err = d.populateData(ctx)
}
if err != nil {
return err
}
}
return nil
}
func (d DbHandler) populateData(ctx context.Context) (e error) {
return d.WithTx(ctx, func(dbh *DbHandler) error {
var err error
// Create root folder
id, _ := uuid.NewUUID()
root, err := dbh.CreateResource(ctx, CreateResourceParams{
ID: id,
Name: "",
Dir: true,
})
if err != nil {
return err
}
// Create home folder
id, _ = uuid.NewUUID()
home, err := dbh.CreateResource(ctx, CreateResourceParams{
ID: id,
Parent: &root.ID,
Name: "home",
Dir: true,
})
if err != nil {
return err
}
// Create user home folder
id, _ = uuid.NewUUID()
userHome, err := dbh.CreateResource(ctx, CreateResourceParams{
ID: id,
Parent: &home.ID,
Name: DefaultUserUsername,
Dir: true,
})
if err != nil {
return err
}
// Create phylum user
u, err := dbh.CreateUser(ctx, CreateUserParams{
Username: DefaultUserUsername,
DisplayName: DefaultUserDisplayName,
PasswordHash: "CANNOT LOG IN",
Root: root.ID,
Home: userHome.ID,
})
if err != nil {
return err
}
_, err = dbh.UpdateUserPermissionsForResource(ctx, UpdateUserPermissionsForResourceParams{
ResourceID: root.ID,
Username: u.Username,
Permission: -1,
})
return err
})
}