refactor: guard external relationships in User model #63

Open
Charon wants to merge 1 commit from feat/consolidate-user-relationships-v2 into dev
Member

Summary

  • Extracts 13 external model relationships (Page, Project, Domain, Pixel, AnalyticsWebsite, AnalyticsGoal, PushWebsite, PushCampaign, PushSegment, PushFlow, TrustCampaign, TrustNotification, Order) from Models/User.php into 5 dedicated traits under Concerns/
  • Each trait resolves model classes at runtime via class_exists(), returning null instead of throwing fatal class-not-found errors
  • User model still uses all traits — no breaking changes for existing consumers
  • Methods that depend on external relationships (canCreateBioPage, canClaimVanityUrl, etc.) now gracefully degrade when modules are absent

New Traits

Trait Relationships Module
HasPageRelationships pages, pageProjects, pageDomains, pagePixels + bio/sub-page entitlements Social
HasAnalyticsRelationships analyticsWebsites, analyticsGoals Analytics
HasPushRelationships pushWebsites, pushCampaigns, pushSegments, pushFlows Push
HasTrustRelationships trustCampaigns, trustNotifications Trust
HasOrderRelationships orders + canClaimVanityUrl Commerce

Fixes #6

🤖 Generated with Claude Code

## Summary - Extracts 13 external model relationships (Page, Project, Domain, Pixel, AnalyticsWebsite, AnalyticsGoal, PushWebsite, PushCampaign, PushSegment, PushFlow, TrustCampaign, TrustNotification, Order) from `Models/User.php` into 5 dedicated traits under `Concerns/` - Each trait resolves model classes at runtime via `class_exists()`, returning `null` instead of throwing fatal class-not-found errors - User model still uses all traits — no breaking changes for existing consumers - Methods that depend on external relationships (`canCreateBioPage`, `canClaimVanityUrl`, etc.) now gracefully degrade when modules are absent ## New Traits | Trait | Relationships | Module | |-------|--------------|--------| | `HasPageRelationships` | pages, pageProjects, pageDomains, pagePixels + bio/sub-page entitlements | Social | | `HasAnalyticsRelationships` | analyticsWebsites, analyticsGoals | Analytics | | `HasPushRelationships` | pushWebsites, pushCampaigns, pushSegments, pushFlows | Push | | `HasTrustRelationships` | trustCampaigns, trustNotifications | Trust | | `HasOrderRelationships` | orders + canClaimVanityUrl | Commerce | Fixes #6 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Charon added 1 commit 2026-03-24 13:22:53 +00:00
Moves all external module relationships (Page, Project, Domain, Pixel,
AnalyticsWebsite, AnalyticsGoal, PushWebsite, PushCampaign, PushSegment,
PushFlow, TrustCampaign, TrustNotification, Order) out of the User model
into dedicated opt-in traits that resolve model classes at runtime via
class_exists(). This prevents fatal errors when consuming apps do not
have those modules installed.

New traits:
- HasPageRelationships (pages, projects, domains, pixels, bio/sub-page entitlements)
- HasAnalyticsRelationships (analytics websites, goals)
- HasPushRelationships (push websites, campaigns, segments, flows)
- HasTrustRelationships (trust campaigns, notifications)
- HasOrderRelationships (orders, vanity URL entitlement)

The User model still uses all five traits so existing consumers see no
breaking changes — the relationships now return null instead of throwing
a class-not-found error when the backing module is absent.

Fixes #6

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/consolidate-user-relationships-v2:feat/consolidate-user-relationships-v2
git checkout feat/consolidate-user-relationships-v2

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git checkout dev
git merge --no-ff feat/consolidate-user-relationships-v2
git checkout feat/consolidate-user-relationships-v2
git rebase dev
git checkout dev
git merge --ff-only feat/consolidate-user-relationships-v2
git checkout feat/consolidate-user-relationships-v2
git rebase dev
git checkout dev
git merge --no-ff feat/consolidate-user-relationships-v2
git checkout dev
git merge --squash feat/consolidate-user-relationships-v2
git checkout dev
git merge --ff-only feat/consolidate-user-relationships-v2
git checkout dev
git merge feat/consolidate-user-relationships-v2
git push origin dev
Sign in to join this conversation.
No description provided.