Add tests for featured thumbnail generation; apply Pint formatting and related edits
This commit is contained in:
@@ -19,8 +19,7 @@ final class AcademyLessonController extends Controller
|
||||
public function __construct(
|
||||
private readonly AcademyAccessService $access,
|
||||
private readonly AcademyCacheService $cache,
|
||||
) {
|
||||
}
|
||||
) {}
|
||||
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
@@ -40,8 +39,8 @@ final class AcademyLessonController extends Controller
|
||||
|
||||
if (filled($filters['q'] ?? null)) {
|
||||
$query->where(function ($builder) use ($filters): void {
|
||||
$builder->where('title', 'like', '%' . $filters['q'] . '%')
|
||||
->orWhere('excerpt', 'like', '%' . $filters['q'] . '%');
|
||||
$builder->where('title', 'like', '%'.$filters['q'].'%')
|
||||
->orWhere('excerpt', 'like', '%'.$filters['q'].'%');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -81,17 +80,31 @@ final class AcademyLessonController extends Controller
|
||||
abort_unless((bool) config('academy.enabled', true), 404);
|
||||
|
||||
$lesson = AcademyLesson::query()
|
||||
->with('category')
|
||||
->with(['category', 'activeBlocks.activeComparisonResults'])
|
||||
->active()
|
||||
->published()
|
||||
->where('slug', $slug)
|
||||
->firstOrFail();
|
||||
|
||||
$payload = $this->access->lessonPayload($lesson, $request->user(), true);
|
||||
$relatedLessons = $lesson->category_id !== null
|
||||
? AcademyLesson::query()
|
||||
->with('category')
|
||||
->active()
|
||||
->published()
|
||||
->where('category_id', $lesson->category_id)
|
||||
->where('id', '!=', $lesson->id)
|
||||
->orderByDesc('published_at')
|
||||
->limit(6)
|
||||
->get()
|
||||
->map(fn (AcademyLesson $relatedLesson): array => $this->access->lessonPayload($relatedLesson, $request->user()))
|
||||
->values()
|
||||
->all()
|
||||
: [];
|
||||
$canonical = route('academy.lessons.show', ['slug' => $lesson->slug]);
|
||||
$description = Str::limit(trim((string) ($lesson->seo_description ?? $lesson->excerpt ?? 'Skinbase Academy lesson.')), 160, '...');
|
||||
$seo = app(SeoFactory::class)->collectionPage(
|
||||
(string) ($lesson->seo_title ?? ($lesson->title . ' — Skinbase Academy')),
|
||||
(string) ($lesson->seo_title ?? ($lesson->title.' — Skinbase Academy')),
|
||||
$description,
|
||||
$canonical,
|
||||
$lesson->cover_image,
|
||||
@@ -100,10 +113,11 @@ final class AcademyLessonController extends Controller
|
||||
return Inertia::render('Academy/Show', [
|
||||
'pageType' => 'lesson',
|
||||
'item' => $payload,
|
||||
'relatedLessons' => $relatedLessons,
|
||||
'seo' => $seo,
|
||||
'pricingUrl' => route('academy.pricing'),
|
||||
'completeUrl' => $request->user() ? route('academy.lessons.complete', ['lesson' => $lesson->id]) : null,
|
||||
'completed' => $request->user()?->academyLessonProgress()->where('lesson_id', $lesson->id)->whereNotNull('completed_at')->exists() ?? false,
|
||||
])->rootView('collections');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ final class AcademyPromptController extends Controller
|
||||
(string) ($prompt->seo_title ?? ($prompt->title . ' — Skinbase Academy')),
|
||||
$description,
|
||||
$canonical,
|
||||
$prompt->preview_image,
|
||||
$payload['preview_image'] ?? null,
|
||||
)->toArray();
|
||||
|
||||
return Inertia::render('Academy/Show', [
|
||||
|
||||
Reference in New Issue
Block a user