feat(academy): prepare AI Academy v1 for production enablement
This commit is contained in:
@@ -15,6 +15,10 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use App\Models\SocialAccount;
|
||||
use App\Models\Conversation;
|
||||
use App\Models\ConversationParticipant;
|
||||
use App\Models\AcademyBadge;
|
||||
use App\Models\AcademyChallengeSubmission;
|
||||
use App\Models\AcademyLessonProgress;
|
||||
use App\Models\AcademySavedPrompt;
|
||||
use App\Models\Message;
|
||||
use App\Models\Notification;
|
||||
use App\Models\Achievement;
|
||||
@@ -198,6 +202,28 @@ class User extends Authenticatable
|
||||
return $this->hasMany(CollectionSavedList::class, 'user_id')->orderBy('title');
|
||||
}
|
||||
|
||||
public function academyLessonProgress(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademyLessonProgress::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academySavedPrompts(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademySavedPrompt::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academyChallengeSubmissions(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademyChallengeSubmission::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academyBadges(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(AcademyBadge::class, 'academy_user_badges', 'user_id', 'badge_id')
|
||||
->withPivot('awarded_at')
|
||||
->withTimestamps();
|
||||
}
|
||||
|
||||
public function socialAccounts(): HasMany
|
||||
{
|
||||
return $this->hasMany(SocialAccount::class);
|
||||
@@ -414,6 +440,25 @@ class User extends Authenticatable
|
||||
return $this->hasRole('moderator') || $this->hasLegacyPrivilegeFlag('isModerator');
|
||||
}
|
||||
|
||||
public function hasAcademyCreatorAccess(): bool
|
||||
{
|
||||
return $this->hasAcademyProAccess() || strtolower(trim((string) ($this->role ?? ''))) === 'academy_creator';
|
||||
}
|
||||
|
||||
public function hasAcademyProAccess(): bool
|
||||
{
|
||||
return strtolower(trim((string) ($this->role ?? ''))) === 'academy_pro';
|
||||
}
|
||||
|
||||
public function canAccessAcademyContent(object|array $content): bool
|
||||
{
|
||||
$accessLevel = is_array($content)
|
||||
? (string) ($content['access_level'] ?? 'free')
|
||||
: (string) ($content->access_level ?? 'free');
|
||||
|
||||
return app(\App\Services\Academy\AcademyAccessService::class)->canAccessContent($this, $accessLevel);
|
||||
}
|
||||
|
||||
public function posts(): HasMany
|
||||
{
|
||||
return $this->hasMany(Post::class)->orderByDesc('created_at');
|
||||
|
||||
Reference in New Issue
Block a user