83 lines
2.7 KiB
PHP
83 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Ejaculation;
|
|
use App\Information;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class HomeController extends Controller
|
|
{
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Show the application dashboard.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index()
|
|
{
|
|
$informations = Information::query()
|
|
->select('id', 'category', 'pinned', 'title', 'created_at')
|
|
->orderByDesc('pinned')
|
|
->orderByDesc('created_at')
|
|
->take(3)
|
|
->get();
|
|
$categories = Information::CATEGORIES;
|
|
|
|
if (Auth::check()) {
|
|
// チェックイン動向グラフ用のデータ取得
|
|
$groupByDay = Ejaculation::select(DB::raw(
|
|
<<<'SQL'
|
|
to_char(ejaculated_date, 'YYYY/MM/DD') AS "date",
|
|
count(*) AS "count"
|
|
SQL
|
|
))
|
|
->join('users', function ($join) {
|
|
$join->on('users.id', '=', 'ejaculations.user_id')
|
|
->where('users.accept_analytics', true);
|
|
})
|
|
->where('ejaculated_date', '>=', now()->subDays(30))
|
|
->groupBy(DB::raw("to_char(ejaculated_date, 'YYYY/MM/DD')"))
|
|
->orderBy(DB::raw("to_char(ejaculated_date, 'YYYY/MM/DD')"))
|
|
->get()
|
|
->mapWithKeys(function ($item) {
|
|
return [$item['date'] => $item['count']];
|
|
});
|
|
$globalEjaculationCounts = [];
|
|
$day = Carbon::now()->subDays(29);
|
|
for ($i = 0; $i < 30; $i++) {
|
|
$globalEjaculationCounts[$day->format('Y/m/d') . ' の総チェックイン数'] = $groupByDay[$day->format('Y/m/d')] ?? 0;
|
|
$day->addDay();
|
|
}
|
|
|
|
// お惣菜コーナー用のデータ取得
|
|
$publicLinkedEjaculations = Ejaculation::join('users', 'users.id', '=', 'ejaculations.user_id')
|
|
->where('users.is_protected', false)
|
|
->where('ejaculations.is_private', false)
|
|
->where('ejaculations.link', '<>', '')
|
|
->orderBy('ejaculations.ejaculated_date', 'desc')
|
|
->select('ejaculations.*')
|
|
->with('user', 'tags')
|
|
->withLikes()
|
|
->onlyWebCheckin()
|
|
->take(21)
|
|
->get();
|
|
|
|
return view('home')->with(compact('informations', 'categories', 'globalEjaculationCounts', 'publicLinkedEjaculations'));
|
|
} else {
|
|
return view('guest')->with(compact('informations', 'categories'));
|
|
}
|
|
}
|
|
}
|