<?php
namespace App\Queries;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
class ActivePaidUsersWithRecentProjectsQuery
{
protected $relation;
protected $options;
public function __construct(Builder $relation = null, array $options = [])
{
$this->relation = $relation ?: User::query();
$this->options = $options;
}
public function get(): \Illuminate\Database\Eloquent\Collection
{
return $this->query()->get();
}
protected function query(): Builder
{
$relation = $this->relation;
$relation = $relation->where('status', 'active')
->where('plan', '!=', 'free');
if (!empty($this->options['recent_days'])) {
$recentDays = $this->options['recent_days'];
$relation = $relation->whereHas('projects', function (Builder $q) use ($recentDays) {
$q->where('created_at', '>=', now()->subDays($recentDays));
});
}
if (!empty($this->options['withRoles'])) {
$relation = $relation->with('roles');
}
$relation = $relation->orderBy('created_at', 'desc');
return $relation;
}
}