mirror of https://github.com/Devoalda/LaDo.git
fix(Eloquent relationship notation):
Removed: - Unwanted DB calls Modified: - Controllers and views to use model relationships
This commit is contained in:
parent
917db15e78
commit
b4948481e8
|
@ -41,12 +41,11 @@ class ProjectController extends Controller
|
||||||
|
|
||||||
$user = User::find(auth()->user()->id);
|
$user = User::find(auth()->user()->id);
|
||||||
$projects = $user->projects()->paginate(4);
|
$projects = $user->projects()->paginate(4);
|
||||||
// Aggregate all todos for all projects
|
|
||||||
|
|
||||||
$todos = $user->todos()
|
// Aggregate all todos for all projects
|
||||||
->map(function ($todo) {
|
$todos = $user->projects->map(function ($project) {
|
||||||
return Todo::find($todo->id);
|
return $project->todos;
|
||||||
});
|
})->flatten();
|
||||||
|
|
||||||
if ($request->ajax()) {
|
if ($request->ajax()) {
|
||||||
$view = view('project.load-projects', compact('projects'))->render();
|
$view = view('project.load-projects', compact('projects'))->render();
|
||||||
|
@ -60,7 +59,6 @@ class ProjectController extends Controller
|
||||||
'projects' => $projects,
|
'projects' => $projects,
|
||||||
'todos' => $todos->whereNull('completed_at')->values(),
|
'todos' => $todos->whereNull('completed_at')->values(),
|
||||||
'completed' => $todos->whereNotNull('completed_at')
|
'completed' => $todos->whereNotNull('completed_at')
|
||||||
->whereBetween('completed_at', [strtotime('today midnight'), strtotime('today midnight + 1 day')])
|
|
||||||
->values(),
|
->values(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,10 @@ class ProjectTodoController extends Controller
|
||||||
return new TodoResource($todos);
|
return new TodoResource($todos);
|
||||||
}
|
}
|
||||||
|
|
||||||
$todos = $project->todos;
|
// "Todo index" shows all Todos for all Project
|
||||||
|
$todos = $user->projects->map(function ($project) {
|
||||||
|
return $project->todos;
|
||||||
|
})->flatten();
|
||||||
|
|
||||||
return view('todo.index', [
|
return view('todo.index', [
|
||||||
'todos' => $todos->whereNull('completed_at')->values(),
|
'todos' => $todos->whereNull('completed_at')->values(),
|
||||||
|
|
|
@ -13,13 +13,11 @@ class CompletedTodo extends Component
|
||||||
|
|
||||||
public function mount()
|
public function mount()
|
||||||
{
|
{
|
||||||
$this->todo_completed_count = DB::table('todos')
|
$user = auth()->user();
|
||||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
$this->todo_completed_count = $user->projects->map(function ($project) {
|
||||||
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
return $project->todos->whereNotNull('completed_at')->count();
|
||||||
->where('project_user.user_id', '=', Auth::user()->id)
|
})->sum();
|
||||||
->whereDate('due_end', '<=', strtotime('today midnight'))
|
|
||||||
->whereNotNull('completed_at')
|
|
||||||
->count();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function render()
|
public function render()
|
||||||
|
|
|
@ -12,13 +12,11 @@ class IncompleteTodo extends Component
|
||||||
|
|
||||||
public function mount()
|
public function mount()
|
||||||
{
|
{
|
||||||
$this->incomplete_count = DB::table('todos')
|
$user = Auth::user();
|
||||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
|
||||||
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
$this->incomplete_count = $user->projects->map(function ($project) {
|
||||||
->where('project_user.user_id', '=', Auth::user()->id)
|
return $project->todos->where('completed_at', null)->count();
|
||||||
->whereDate('due_end', '<=', strtotime('today midnight'))
|
})->sum();
|
||||||
->whereNull('completed_at')
|
|
||||||
->count();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public function render()
|
public function render()
|
||||||
|
|
|
@ -12,17 +12,24 @@ class PomoCount extends Component
|
||||||
|
|
||||||
public function mount(){
|
public function mount(){
|
||||||
$user = User::find(auth()->user()->id);
|
$user = User::find(auth()->user()->id);
|
||||||
$todos = $user->todos()->map(function ($todo) {
|
$todos = $user->projects->map(function ($project) {
|
||||||
$todo = \App\Models\Todo::find($todo->id);
|
return $project->todos;
|
||||||
$todo->pomos = Pomo::where('todo_id', $todo->id);
|
})->flatten();
|
||||||
return $todo;
|
|
||||||
});
|
// $todos = $user->todos()->map(function ($todo) {
|
||||||
|
// $todo = \App\Models\Todo::find($todo->id);
|
||||||
|
// $todo->pomos = Pomo::where('todo_id', $todo->id);
|
||||||
|
// return $todo;
|
||||||
|
// });
|
||||||
|
|
||||||
// Get the average pomo count per todo
|
// Get the average pomo count per todo
|
||||||
$ave_pomo_count = $todos->avg(function ($todo) {
|
$ave_pomo_count = 0;
|
||||||
return $todo->pomos->count();
|
foreach ($todos as $todo) {
|
||||||
});
|
$ave_pomo_count += $todo->pomo->count();
|
||||||
$this->ave_pomo_count = $ave_pomo_count ?? 0;
|
}
|
||||||
|
$ave_pomo_count = $ave_pomo_count / $todos->count();
|
||||||
|
|
||||||
|
$this->ave_pomo_count = $ave_pomo_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function render()
|
public function render()
|
||||||
|
|
|
@ -19,12 +19,11 @@ class PomoTime extends Component
|
||||||
$user = User::find(auth()->user()->id);
|
$user = User::find(auth()->user()->id);
|
||||||
|
|
||||||
// Get all pomos and calculate the average time spent per todo (due_end - due_start)/count/total pomos
|
// Get all pomos and calculate the average time spent per todo (due_end - due_start)/count/total pomos
|
||||||
$pomos = $user->pomos();
|
$pomos = $user->projects->map(function ($project) {
|
||||||
$pomos = $pomos->map(function ($pomo) {
|
return $project->todos->map(function ($todo) {
|
||||||
$pomo->todo = Todo::find($pomo->todo_id);
|
return $todo->pomo;
|
||||||
$pomo->project = Project::find($pomo->todo->project_id);
|
|
||||||
return $pomo;
|
|
||||||
});
|
});
|
||||||
|
})->flatten();
|
||||||
|
|
||||||
$total_pomos = $pomos->count();
|
$total_pomos = $pomos->count();
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Http\Livewire\Todo;
|
namespace App\Http\Livewire\Todo;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
use App\Models\Todo;
|
use App\Models\Todo;
|
||||||
|
@ -21,26 +22,20 @@ class TodaysTodo extends Component
|
||||||
|
|
||||||
public function render()
|
public function render()
|
||||||
{
|
{
|
||||||
$todos = DB::table('todos')
|
$user = auth()->user();
|
||||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
|
||||||
|
$todos = Todo::join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||||
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
||||||
->where('project_user.user_id', '=', auth()->user()->id)
|
->where('project_user.user_id', '=', $user->id)
|
||||||
->whereDate('due_end', '<=', strtotime('today midnight'))
|
->whereDate('due_end', '<=', now()->toDateString())
|
||||||
->whereNull('completed_at')
|
->whereNull('completed_at')
|
||||||
->orderBy('due_end', 'asc')
|
->orderBy('due_end', 'asc')
|
||||||
->paginate($this->perPage);
|
->paginate($this->perPage);
|
||||||
|
|
||||||
|
$incomplete_count = Todo::join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||||
$todos->transform(function ($todo) {
|
|
||||||
return Todo::find($todo->id);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
$incomplete_count = DB::table('todos')
|
|
||||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
|
||||||
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
||||||
->where('project_user.user_id', '=', auth()->user()->id)
|
->where('project_user.user_id', '=', $user->id)
|
||||||
->whereDate('due_end', '<=', strtotime('today midnight'))
|
->whereDate('due_end', '<=', now()->toDateString())
|
||||||
->whereNull('completed_at')
|
->whereNull('completed_at')
|
||||||
->count();
|
->count();
|
||||||
|
|
||||||
|
|
|
@ -29,19 +29,4 @@ class Pomo extends Model
|
||||||
return $this->belongsTo(Todo::class);
|
return $this->belongsTo(Todo::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function user(): Collection
|
|
||||||
{
|
|
||||||
return DB::table('users')
|
|
||||||
->join('project_user', 'users.id', '=', 'project_user.user_id')
|
|
||||||
->join('projects', 'project_user.project_id', '=', 'projects.id')
|
|
||||||
->join('project_todo', 'projects.id', '=', 'project_todo.project_id')
|
|
||||||
->join('todos', 'project_todo.todo_id', '=', 'todos.id')
|
|
||||||
->join('pomos', 'todos.id', '=', 'pomos.todo_id')
|
|
||||||
->where('pomos.id', '=', $this->id)
|
|
||||||
->select('users.*')
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,19 +38,6 @@ class Todo extends Model
|
||||||
"updated_at" => "integer",
|
"updated_at" => "integer",
|
||||||
];
|
];
|
||||||
|
|
||||||
public function user(): Collection
|
|
||||||
{
|
|
||||||
// Select User given Todo
|
|
||||||
return DB::table('users')
|
|
||||||
->join('project_user', 'users.id', '=', 'project_user.user_id')
|
|
||||||
->join('projects', 'project_user.project_id', '=', 'projects.id')
|
|
||||||
->join('project_todo', 'projects.id', '=', 'project_todo.project_id')
|
|
||||||
->join('todos', 'project_todo.todo_id', '=', 'todos.id')
|
|
||||||
->where('todos.id', '=', $this->id)
|
|
||||||
->select('users.*')
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function projects(): BelongsToMany
|
public function projects(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(
|
return $this->belongsToMany(
|
||||||
|
|
|
@ -58,33 +58,10 @@ class User extends Authenticatable
|
||||||
return $this->belongsToMany(Project::class, projectUser::class, 'user_id', 'project_id');
|
return $this->belongsToMany(Project::class, projectUser::class, 'user_id', 'project_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function todos(): Collection
|
|
||||||
{
|
|
||||||
return DB::table('todos')
|
|
||||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
|
||||||
->join('projects', 'project_todo.project_id', '=', 'projects.id')
|
|
||||||
->join('project_user', 'projects.id', '=', 'project_user.project_id')
|
|
||||||
->join('users', 'project_user.user_id', '=', 'users.id')
|
|
||||||
->where('users.id', '=', $this->id)
|
|
||||||
->select('todos.*')
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pomo(): HasManyThrough
|
public function pomo(): HasManyThrough
|
||||||
{
|
{
|
||||||
return $this->hasManyThrough(Pomo::class, Todo::class);
|
return $this->hasManyThrough(Pomo::class, Todo::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function pomos(): Collection
|
|
||||||
{
|
|
||||||
return DB::table('pomos')
|
|
||||||
->join('todos', 'pomos.todo_id', '=', 'todos.id')
|
|
||||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
|
||||||
->join('projects', 'project_todo.project_id', '=', 'projects.id')
|
|
||||||
->join('project_user', 'projects.id', '=', 'project_user.project_id')
|
|
||||||
->join('users', 'project_user.user_id', '=', 'users.id')
|
|
||||||
->where('users.id', '=', $this->id)
|
|
||||||
->select('pomos.*')
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue