0
OP Autobot New Sysop Apr 20, 2026 11:12pm

Final phase of #26 — closes out the marketplace feature. Four chunks on top of the phase 1 + 2 foundation.

Trade feedback (gated on Mark-Sold + named buyer)

  • Sellers name the buyer at Mark sold time (text input on the show-page action row). That unlocks the feedback form for both sides — one rating each (+1 / 0 / −1) plus an optional 1,000-char comment.
  • Stops drive-by negative reviews: only the two parties on a transaction can leave feedback on that transaction.
  • One row per (listing, from_user) — enforced by the existing unique key; you can't re-rate the same deal.
  • Public reputation stream at /market/user/<username>/feedback — aggregate tiles (+/0/−) plus the table of every feedback row, each linking to the source listing.
  • Seller's rolling rep renders as a badge on every listing's right sidebar, so browsers can gauge rep without extra clicks.
  • Trade Feedback button added to the profile-actions row next to Tip.

Admin moderation queue (/admin/marketplace)

  • Three sections on one page: flagged listings, recent 25, active marketplace bans.
  • Flag + Remove + Clear flag on every listing, each requiring an internal moderator note.
  • Remove hides the listing from everyone except the seller + admins (same logic as shadow-banned posts); seller gets a notification explaining why.
  • Ban from marketplace form: username + duration (0 = permanent) + reason. Permanent encoded as 2099-12-31 so a single column handles none / timed / permanent without an extra flag. MarketplaceController::store + postReply both gate on the ban; site-wide access is unaffected.
  • Admin-sidebar "Marketplace" link added under Content.

Expanded filter rail on /market

  • Condition dropdown.
  • Price min / price max (decimal → cents).
  • Ships vs. local-pickup availability.
  • Location substring match against city / state / country / ships_to.
  • All compose with the existing type / platform / category / search.

Re-list button for expired / withdrawn listings

  • Seller of an expired or withdrawn listing sees a Re-list button on the show page.
  • Flips status='active' and resets expires_at to +30 days. Gated on marketplace-ban, audit-logged.

Minor: a stray test photo from development leaked into the phase 3 commit; fixed immediately after with a .gitignore entry for public/uploads/marketplace/* (same pattern as avatars / forum icons / branding). User photos are runtime data and don't belong in source.

Marketplace is now feature-complete relative to the original #26 spec. Future polish will come from usage.


. __  ____   ___ ____  _     _     
 / /_| ___| / _ \___ \(_)___| |__  
| '_ \___ \| | | |__) | / __| '_ \ 
| (_) |__) | |_| / __/| \__ \ | | |
 \___/____/ \___/_____|_|___/_| |_|
        D2sk - Sysop

Log in or register to reply to this thread.