trypost/app/Http/Controllers/App
Paulo Castellano 5f7768ca3a fix: apply code review — enforce quota server-side, project conventions
Critical fixes:
- Quota enforcement regressed when the regex flow was replaced with
  tools. The LLM was trusted to respect [Session state] quota hints,
  which is vulnerable to prompt injection / hallucination. Each tool
  now checks Pennant feature limits at the top of handle() and returns
  a short quota-exhausted string instead of calling the provider.
  Audio shares the video quota (there is no AiAudioLimit by design).
- N+1 on aiMessages: combined the two separate ->get() scans that
  produced imagesInThread and videosInThread into a single query.
- postPlatforms lazy load: controller now loadMissing('postPlatforms')
  before constructing SocialMediaAssistant, which accesses the relation
  in activePlatformRules().

Project conventions:
- \RuntimeException and \Throwable are now imported at the top of the
  controller instead of inlined per CLAUDE.md.
- Tool handle() methods use data_get($request, 'prompt') instead of
  direct array access, matching the data_get convention for service
  classes.
- enrichContent() pluralizes attachment types via Str::plural so
  '2 images' reads naturally instead of '2 image'.

Tests:
- Added Storage::fake('public') in tool tests so runs don't pollute
  the local disk with fake-generated files.
- Restored quota enforcement coverage (deleted when the flow changed)
  as three new tests — one per tool — that fill the monthly bucket
  and assert the tool refuses and nothing is generated.
- Removed inline \App\ references in tests in favor of imports.
2026-04-16 10:22:55 -03:00
..
Settings fix: update monthlyCount() callers to pass UsageType enum 2026-04-16 09:29:37 -03:00
AnalyticsController.php feat: add YouTube Analytics with 7 channel metrics 2026-04-14 13:10:27 -03:00
ApiKeyController.php refactor: code review fixes — policies, enums, data_get, tests 2026-03-31 00:40:18 -03:00
AssetController.php feat: complete AI assistant with custom services and brand config 2026-04-16 09:25:08 -03:00
BillingController.php fix: self-host billing bypass, Facebook API metrics migration, X token refresh, and duplicate social accounts 2026-04-15 09:46:18 -03:00
Controller.php refactor: restructure to Actions, subdomain routes (app/api), API tokens 2026-03-29 19:24:28 -03:00
GiphyController.php feat: complete AI assistant with custom services and brand config 2026-04-16 09:25:08 -03:00
MediaController.php fix: API scheduled_at validation, redirect allowlist, UUID model_id, UpdatePost transaction, safe resolveModel 2026-04-01 13:21:22 -03:00
NotificationController.php refactor: code review fixes — policies, enums, data_get, tests 2026-03-31 00:40:18 -03:00
OnboardingController.php feat: redesign billing, onboarding, sidebar, and settings architecture 2026-04-15 00:33:38 -03:00
PostAssistantController.php fix: apply code review — enforce quota server-side, project conventions 2026-04-16 10:22:55 -03:00
PostCommentController.php feat: complete AI assistant with custom services and brand config 2026-04-16 09:25:08 -03:00
PostController.php feat: add CommentsTab component with replies, reactions, and real-time 2026-04-15 20:15:29 -03:00
UnsplashController.php feat: complete AI assistant with custom services and brand config 2026-04-16 09:25:08 -03:00
WorkspaceController.php feat: introduce Account entity as billing owner and refactor architecture 2026-04-14 22:22:04 -03:00
WorkspaceHashtagController.php refactor: code review fixes — policies, enums, data_get, tests 2026-03-31 00:40:18 -03:00
WorkspaceInviteController.php feat: introduce Account entity as billing owner and refactor architecture 2026-04-14 22:22:04 -03:00
WorkspaceLabelController.php refactor: code review fixes — policies, enums, data_get, tests 2026-03-31 00:40:18 -03:00