gator/internal/executors/register.go

48 lines
1,002 B
Go
Raw Permalink Normal View History

package executors
import (
"context"
"errors"
"fmt"
"time"
"codeflow.dananglin.me.uk/apollo/gator/internal/database"
"codeflow.dananglin.me.uk/apollo/gator/internal/state"
"github.com/google/uuid"
)
func register(s *state.State, exe executor) error {
if len(exe.Args) != 1 {
return fmt.Errorf("unexpected number of arguments: want 1, got %d", len(exe.Args))
}
name := exe.Args[0]
timestamp := time.Now()
args := database.CreateUserParams{
ID: uuid.New(),
CreatedAt: timestamp,
UpdatedAt: timestamp,
Name: name,
}
user, err := s.DB.CreateUser(context.Background(), args)
if err != nil {
if uniqueViolation(err) {
return errors.New("this user is already registered")
}
return fmt.Errorf("unable to register the user: %w", err)
}
if err := s.Config.SetUser(name); err != nil {
return fmt.Errorf("unable to update the configuration: %w", err)
}
fmt.Printf("Successfully registered %s.\n", user.Name)
fmt.Println("DEBUG:", user)
return nil
}