tissue/app/Http/Controllers/HomeController.php

80 lines
2.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Ejaculation;
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()
{
if (Auth::check()) {
$ejaculations = Ejaculation::select(DB::raw(<<<'SQL'
to_char(ejaculated_date, 'YYYY/MM/DD HH24:MI') AS ejaculated_date,
note,
is_private,
to_char(lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC), 'YYYY/MM/DD HH24:MI') AS before_date,
to_char(ejaculated_date - (lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)), 'FMDDD日 FMHH24時間 FMMI分') AS ejaculated_span
SQL
))
->where(['user_id' => Auth::id()])
->orderBy('ejaculated_date', 'desc')
->limit(9)
->get();
// 現在のオナ禁セッションの経過時間
if (count($ejaculations) > 0) {
$currentSession = Carbon::parse($ejaculations[0]['ejaculated_date'])
->diff(Carbon::now())
->format('%d日 %h時間 %i分');
} else {
$currentSession = null;
}
// 概況欄のデータ取得
$summary = DB::select(<<<'SQL'
SELECT
to_char(avg(span), 'FMDDD日 FMHH24時間 FMMI分') AS average,
to_char(max(span), 'FMDDD日 FMHH24時間 FMMI分') AS longest,
to_char(min(span), 'FMDDD日 FMHH24時間 FMMI分') AS shortest,
to_char(sum(span), 'FMDDD日 FMHH24時間 FMMI分') AS total_times,
count(*) AS total_checkins
FROM
(
SELECT
ejaculated_date - lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC) AS span
FROM
ejaculations
WHERE
user_id = :user_id
ORDER BY
ejaculated_date DESC
) AS temp
SQL
, ['user_id' => Auth::id()]);
return view('home')->with(compact('ejaculations', 'currentSession', 'summary'));
} else {
return view('guest');
}
}
}