Attendize/app/Http/Controllers/API/PublicController.php

86 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers\API;
use App\Models\Category;
use App\Models\Event;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class PublicController extends Controller
{
public function getCategories($parent_id = false){
$categories = Category::select('title_tk','title_ru','id','parent_id');
if($parent_id)
$categories->children($parent_id)->orderBy('lft');
else
$categories->main();
return response()->json($categories->get());
// return $categories->get();
}
public function showCategoryEvents($cat_id){
$category = Category::select('id','title_tk','title_ru','view_type','events_limit','parent_id')
->findOrFail($cat_id);
[$order, $data] = $this->sorts_filters();
$data['category'] = $category;
$data['sub_cats'] = $category->children()
->withLiveEvents($order, $data['start'], $data['end'], $category->events_limit)
->whereHas('cat_events',
function ($query) use($data){
$query->onLive($data['start'], $data['end']);
})
->withCount(['cat_events' => function($query) use($data){
$query->onLive($data['start'], $data['end']);
}])
->orderBy('cats_event_count','desc')
->get();
return response()->json($data);
}
private function sorts_filters(){
$data['start'] = \request()->get('start') ?? Carbon::today();
$data['end'] = \request()->get('end')?? Carbon::today()->endOfCentury();
$sort = \request()->get('sort');
if($sort == 'new')
$orderBy = ['field'=>'created_at','order'=>'desc'];
if ($sort =='popular')
$orderBy = ['field'=>'views','order'=>'desc'];
else
{
$orderBy =['field'=>'start_date','order'=>'asc'];
$sort = 'start_date';
}
$data['sort'] = $sort;
//todo check date formats;
return [$orderBy, $data];
}
public function showSubCategoryEvents($cat_id){
$category = Category::select('id','title_tk','title_ru','view_type','events_limit','parent_id')
->findOrFail($cat_id);
[$order, $data] = $this->sorts_filters();
$data['category'] = $category;
$data['events'] = $category->cat_events()
->onLive($data['start'],$data['end'])
->orderBy($order['field'],$order['order'])
->get();
return response()->json($data);
}
public function getEvent($id){
$event = Event::with('images')->findOrFail($id);
return response()->json($event);
}
}