feat: add password management, reading persistence on feed switch, and spin animation
This commit is contained in:
@@ -173,6 +173,15 @@ func (d *DB) CreateUser(username, passwordHash string) (*models.User, error) {
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func (d *DB) UpdateUserPassword(userID, passwordHash string) error {
|
||||
now := time.Now().UTC()
|
||||
_, err := d.Exec(
|
||||
"UPDATE users SET password_hash = ?, updated_at = ? WHERE id = ?",
|
||||
passwordHash, now, userID,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
// Category operations
|
||||
func (d *DB) ListCategories() ([]models.Category, error) {
|
||||
query := `
|
||||
|
||||
@@ -102,4 +102,17 @@ func TestDatabaseOperations(t *testing.T) {
|
||||
if stats.TotalFeeds != 1 || stats.TotalUnread != 1 || stats.TotalStarred != 1 || stats.TotalCategories != 1 {
|
||||
t.Errorf("unexpected stats: %+v", stats)
|
||||
}
|
||||
|
||||
// 8. Test UpdateUserPassword
|
||||
newHash := "$2a$10$updatedhashvalue"
|
||||
if err := database.UpdateUserPassword(u.ID, newHash); err != nil {
|
||||
t.Fatalf("UpdateUserPassword failed: %v", err)
|
||||
}
|
||||
updatedUser, err := database.GetUserByUsername("admin")
|
||||
if err != nil {
|
||||
t.Fatalf("GetUserByUsername failed: %v", err)
|
||||
}
|
||||
if updatedUser.PasswordHash != newHash {
|
||||
t.Errorf("expected hash %s, got %s", newHash, updatedUser.PasswordHash)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user