Files
shopit-back/app/Domains/Ticketing/Event/Services/PublicEventService.php

52 lines
1.8 KiB
PHP

<?php
namespace App\Domains\Ticketing\Event\Services;
use App\Domains\Core\Tenant\Models\Tenant;
use App\Domains\Ticketing\Event\Models\Event;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
class PublicEventService
{
public function list(Tenant $tenant, string $term, int $page, ?int $categoryId = null): LengthAwarePaginator
{
$query = $tenant->events()
->whereNotNull('published_at')
->where('published_at', '<=', now());
if ($categoryId !== null) {
abort_unless($tenant->eventCategories()->whereKey($categoryId)->exists(), 404);
$query->where('event_category_id', $categoryId);
}
if ($term !== '') {
$query->where(function ($query) use ($term): void {
$query->where('title', 'like', '%'.$term.'%')
->orWhere('subtitle', 'like', '%'.$term.'%')
->orWhere('location', 'like', '%'.$term.'%');
});
}
return $query->with('attachment')->orderByDesc('published_at')->orderByDesc('id')->paginate(15, ['*'], 'page', $page);
}
public function find(Tenant $tenant, Event $event): Event
{
abort_unless($event->tenant_code === $tenant->codigo
&& $event->published_at !== null
&& $event->published_at->isPast(), 404);
return $event->load([
'attachment',
'dates' => fn ($query) => $query->whereNull('rescheduled_to_event_date_id')->whereNull('suspended_at'),
'socialMedia',
'catalogItems.attachments',
'catalogItems.inventory',
'catalogItems.itemAttributes.attribute',
'catalogItems.variants.inventory',
'catalogItems.variants.eventDate',
'catalogItems.variants.eventDates',
]);
}
}