diff --git a/.dockerignore b/.dockerignore index cf703a9..0811100 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,3 +6,4 @@ dist *.db-wal .DS_Store .git +static diff --git a/cmd/user/main.go b/cmd/user/main.go index 1ea1aef..cb3fb2d 100644 --- a/cmd/user/main.go +++ b/cmd/user/main.go @@ -14,19 +14,24 @@ import ( ) func main() { - if len(os.Args) != 3 { - log.Fatalf("Usage: go run cmd/user/main.go ") - } - - username := os.Args[1] - password := os.Args[2] - dbConn, err := db.Open(db.GetDBFile()) if err != nil { log.Fatalf("failed to open db: %v", err) } defer dbConn.Close() + if len(os.Args) == 2 && os.Args[1] == "update-avatar" { + updateAvatars(dbConn) + return + } + + if len(os.Args) != 3 { + log.Fatalf("Usage: go run cmd/user/main.go \n go run cmd/user/main.go update-avatar") + } + + username := os.Args[1] + password := os.Args[2] + var existingID string err = dbConn.QueryRow("SELECT id FROM user WHERE username = ?", username).Scan(&existingID) if err != nil && err != sql.ErrNoRows { @@ -64,10 +69,40 @@ func main() { } id := uuid.New().String() - _, err = dbConn.Exec("INSERT INTO user (id, username, password_hash) VALUES (?, ?, ?)", id, username, string(hash)) + avatarURL := fmt.Sprintf("https://api.dicebear.com/9.x/dylan/svg?seed=%s", username) + _, err = dbConn.Exec("INSERT INTO user (id, username, password_hash, avatar_url) VALUES (?, ?, ?, ?)", id, username, string(hash), avatarURL) if err != nil { log.Fatalf("failed to create user: %v", err) } fmt.Printf("User '%s' was created successfully!\n", username) } + +func updateAvatars(dbConn *sql.DB) { + rows, err := dbConn.Query("SELECT id, username FROM user") + if err != nil { + log.Fatalf("failed to fetch users: %v", err) + } + defer rows.Close() + + count := 0 + for rows.Next() { + var id, username string + if err := rows.Scan(&id, &username); err != nil { + log.Fatalf("failed to scan user: %v", err) + } + + avatarURL := fmt.Sprintf("https://api.dicebear.com/9.x/dylan/svg?seed=%s", username) + _, err := dbConn.Exec("UPDATE user SET avatar_url = ? WHERE id = ?", avatarURL, id) + if err != nil { + log.Fatalf("failed to update avatar for %s: %v", username, err) + } + count++ + } + + if err := rows.Err(); err != nil { + log.Fatalf("iteration error: %v", err) + } + + fmt.Printf("Updated avatars for %d user(s)\n", count) +} diff --git a/internal/db/models.go b/internal/db/models.go index afce58a..b946865 100644 --- a/internal/db/models.go +++ b/internal/db/models.go @@ -64,9 +64,10 @@ type Session struct { type User struct { ID string `json:"id"` - Username string `json:"username"` - PasswordHash string `json:"password_hash"` - CreatedAt time.Time `json:"created_at"` + Username string `json:"username"` + PasswordHash string `json:"password_hash"` + AvatarURL string `json:"avatar_url"` + CreatedAt time.Time `json:"created_at"` } type WatchListEntry struct { diff --git a/internal/db/queries.sql.go b/internal/db/queries.sql.go index 3fdb733..109f755 100644 --- a/internal/db/queries.sql.go +++ b/internal/db/queries.sql.go @@ -469,7 +469,7 @@ func (q *Queries) GetUpcomingSeasons(ctx context.Context, userID string) ([]GetU } const getUser = `-- name: GetUser :one -SELECT id, username, password_hash, created_at FROM user WHERE id = ? LIMIT 1 +SELECT id, username, password_hash, avatar_url, created_at FROM user WHERE id = ? LIMIT 1 ` func (q *Queries) GetUser(ctx context.Context, id string) (User, error) { @@ -479,13 +479,14 @@ func (q *Queries) GetUser(ctx context.Context, id string) (User, error) { &i.ID, &i.Username, &i.PasswordHash, + &i.AvatarURL, &i.CreatedAt, ) return i, err } const getUserByUsername = `-- name: GetUserByUsername :one -SELECT id, username, password_hash, created_at FROM user WHERE username = ? LIMIT 1 +SELECT id, username, password_hash, avatar_url, created_at FROM user WHERE username = ? LIMIT 1 ` func (q *Queries) GetUserByUsername(ctx context.Context, username string) (User, error) { @@ -495,6 +496,7 @@ func (q *Queries) GetUserByUsername(ctx context.Context, username string) (User, &i.ID, &i.Username, &i.PasswordHash, + &i.AvatarURL, &i.CreatedAt, ) return i, err diff --git a/migrations/016_add_avatar_url.sql b/migrations/016_add_avatar_url.sql new file mode 100644 index 0000000..bb153ac --- /dev/null +++ b/migrations/016_add_avatar_url.sql @@ -0,0 +1,3 @@ +ALTER TABLE user ADD COLUMN avatar_url TEXT NOT NULL DEFAULT ''; + +UPDATE user SET avatar_url = 'https://api.dicebear.com/9.x/dylan/svg?seed=' || username WHERE avatar_url = ''; \ No newline at end of file diff --git a/templates/components/header.gohtml b/templates/components/header.gohtml index 695d242..8890ba0 100644 --- a/templates/components/header.gohtml +++ b/templates/components/header.gohtml @@ -42,9 +42,11 @@