Restore user profile status editing and display #36

Open
opened 2024-01-14 14:37:52 -06:00 by jimmyb · 0 comments
Owner

Users should be able to set and update a short profile status, and that status should be shown prominently on their public profile.

The current Laravel checkout already has a nullable `users.status` column and the `User` model allows it to be filled, but the Livewire profile settings page only updates username and email. Public profile pages render the user header, stats, bio, consoles, social links, and comments, but do not display the stored status. This issue tracks restoring the missing status-editing workflow, making the status visible enough to be meaningful on profiles, and enabling the existing First Status achievement badge.

Scope

  • Account settings profile page at `/settings/profile`.
  • Public profile pages at `/profile/{username}`.
  • Existing `users.status` column.
  • Authenticated current-user status updates only.
  • Safe public rendering for empty, plain-text, and malicious status values.
  • Enable the existing code-managed First Status badge when a user successfully saves their first non-empty status.
  • Idempotent badge persistence, existing flash/JSON award feedback, and targeted/backfill evaluation for users with a currently non-empty status.
  • Existing Laravel/Livewire/Tailwind profile and settings patterns.

Acceptance Criteria

  • Authenticated users can set, update, and clear their status from profile settings.
  • Status updates save to the existing `users.status` column.
  • Status input has a reasonable maximum length and clear validation feedback.
  • Updating status does not require changing username or email.
  • Updating username/email continues to work as before.
  • Public profiles display a non-empty status prominently near the username/header area.
  • Profiles with no status do not show a broken or awkward placeholder.
  • Status text is escaped and cannot inject HTML or JavaScript.
  • Saving a non-empty status evaluates and awards the existing First Status badge exactly once, using the existing idempotent badge persistence and feedback conventions.
  • Updating an existing status, clearing a status, or retrying the same request does not create duplicate First Status awards.
  • Backfill/targeted recalculation can award the badge to users with a currently non-empty status; users whose historical status was cleared do not receive an inferred historical award without evidence.
  • Banned, deleted, and soft-deleted users still do not expose public profiles.
  • User-facing UI supports light/dark mode and follows existing Laravel/Livewire/Tailwind profile patterns.

Test Coverage Required

  • Livewire feature test confirming users can set and update status from profile settings.
  • Livewire feature test confirming users can clear status.
  • Validation test confirming overly long status values are rejected.
  • Regression test confirming username/email profile updates still work.
  • Feature test confirming public profiles show a saved status near the profile header.
  • Feature test confirming empty status does not render a misleading placeholder.
  • Security regression test confirming status output is escaped.
  • Badge tests confirming the first non-empty save awards First Status, subsequent updates/clears remain idempotent, empty status never awards it, and current-status backfill/targeted recalculation is idempotent.
  • Tests should use Pest and focused settings/profile coverage.
  • Run the focused profile settings/profile display and badge tests, then run `vendor/bin/pint --dirty` before closing the issue.

Progress Checklist

  • `users.status` column exists
  • `User` model includes `status` as fillable
  • Profile settings page exists
  • Public profile page exists
  • Existing profile settings tests cover username/email updates
  • Add status state, validation, and persistence to the profile settings Livewire component
  • Add status input/control to the profile settings view
  • Render non-empty status prominently on public profiles
  • Escape status output and avoid rendering empty placeholders
  • Enable First Status badge evaluation, idempotent persistence, and action feedback
  • Add First Status backfill/targeted recalculation coverage for current non-empty statuses
  • Add tests for set, update, clear, validation, display, escaping, badge behavior, and username/email regressions
  • Confirm status UI matches existing profile/settings light and dark mode patterns
Users should be able to set and update a short profile status, and that status should be shown prominently on their public profile. The current Laravel checkout already has a nullable \`users.status\` column and the \`User\` model allows it to be filled, but the Livewire profile settings page only updates username and email. Public profile pages render the user header, stats, bio, consoles, social links, and comments, but do not display the stored status. This issue tracks restoring the missing status-editing workflow, making the status visible enough to be meaningful on profiles, and enabling the existing First Status achievement badge. ## Scope - Account settings profile page at \`/settings/profile\`. - Public profile pages at \`/profile/{username}\`. - Existing \`users.status\` column. - Authenticated current-user status updates only. - Safe public rendering for empty, plain-text, and malicious status values. - Enable the existing code-managed First Status badge when a user successfully saves their first non-empty status. - Idempotent badge persistence, existing flash/JSON award feedback, and targeted/backfill evaluation for users with a currently non-empty status. - Existing Laravel/Livewire/Tailwind profile and settings patterns. ## Acceptance Criteria - Authenticated users can set, update, and clear their status from profile settings. - Status updates save to the existing \`users.status\` column. - Status input has a reasonable maximum length and clear validation feedback. - Updating status does not require changing username or email. - Updating username/email continues to work as before. - Public profiles display a non-empty status prominently near the username/header area. - Profiles with no status do not show a broken or awkward placeholder. - Status text is escaped and cannot inject HTML or JavaScript. - Saving a non-empty status evaluates and awards the existing First Status badge exactly once, using the existing idempotent badge persistence and feedback conventions. - Updating an existing status, clearing a status, or retrying the same request does not create duplicate First Status awards. - Backfill/targeted recalculation can award the badge to users with a currently non-empty status; users whose historical status was cleared do not receive an inferred historical award without evidence. - Banned, deleted, and soft-deleted users still do not expose public profiles. - User-facing UI supports light/dark mode and follows existing Laravel/Livewire/Tailwind profile patterns. ## Test Coverage Required - Livewire feature test confirming users can set and update status from profile settings. - Livewire feature test confirming users can clear status. - Validation test confirming overly long status values are rejected. - Regression test confirming username/email profile updates still work. - Feature test confirming public profiles show a saved status near the profile header. - Feature test confirming empty status does not render a misleading placeholder. - Security regression test confirming status output is escaped. - Badge tests confirming the first non-empty save awards First Status, subsequent updates/clears remain idempotent, empty status never awards it, and current-status backfill/targeted recalculation is idempotent. - Tests should use Pest and focused settings/profile coverage. - Run the focused profile settings/profile display and badge tests, then run \`vendor/bin/pint --dirty\` before closing the issue. ## Progress Checklist - [x] \`users.status\` column exists - [x] \`User\` model includes \`status\` as fillable - [x] Profile settings page exists - [x] Public profile page exists - [x] Existing profile settings tests cover username/email updates - [ ] Add status state, validation, and persistence to the profile settings Livewire component - [ ] Add status input/control to the profile settings view - [ ] Render non-empty status prominently on public profiles - [ ] Escape status output and avoid rendering empty placeholders - [ ] Enable First Status badge evaluation, idempotent persistence, and action feedback - [ ] Add First Status backfill/targeted recalculation coverage for current non-empty statuses - [ ] Add tests for set, update, clear, validation, display, escaping, badge behavior, and username/email regressions - [ ] Confirm status UI matches existing profile/settings light and dark mode patterns
Codex changed title from Add Back Functionality to Allow Users to Set and Update Their Status to Restore user profile status editing and display 2026-05-26 01:00:57 -05:00
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MyVideoGameList/myvideogamelist.com#36
No description provided.