2024-10-01 05:44:21 +01:00
|
|
|
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"
|
|
|
|
)
|
|
|
|
|
2024-10-03 03:37:52 +01:00
|
|
|
func register(s *state.State, exe executor) error {
|
2024-10-01 05:44:21 +01:00
|
|
|
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
|
|
|
|
}
|