diff --git a/app/Filters/ClientFilters.php b/app/Filters/ClientFilters.php index 239176c2076f..7d29e7868271 100644 --- a/app/Filters/ClientFilters.php +++ b/app/Filters/ClientFilters.php @@ -4,7 +4,7 @@ namespace App\Filters; use App\Models\Client; use App\Models\User; -use Illuminate\Database\Query\Builder; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Gate; @@ -167,4 +167,12 @@ class ClientFilters extends QueryFilters return $query; } + public function company() + { + $entity = strtolower(class_basename(Client::class)); + + $this->builder->where($entity .'.company_id', '=', auth()->user()->company()->id); + + } + } \ No newline at end of file diff --git a/app/Filters/QueryFilters.php b/app/Filters/QueryFilters.php index c12a8b7c4091..be5ae418f33e 100644 --- a/app/Filters/QueryFilters.php +++ b/app/Filters/QueryFilters.php @@ -46,11 +46,9 @@ abstract class QueryFilters * * @param Request $request */ - public function __construct(Request $request, Builder $builder) + public function __construct(Request $request) { $this->request = $request; - - $this->builder = $builder; } /** @@ -59,9 +57,9 @@ abstract class QueryFilters * @param Builder $builder * @return Builder */ - public function apply(int $company_id, User $user) + public function apply(Builder $builder) { - $this->builder = $this->baseQuery($company_id, $user); + $this->builder = $builder; foreach ($this->filters() as $name => $value) { if (! method_exists($this, $name)) { diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index f7a6853e077f..26dba450245b 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\DataMapper\ClientSettings; use App\Factory\ClientFactory; +use App\Filters\ClientFilters; use App\Http\Requests\Client\CreateClientRequest; use App\Http\Requests\Client\EditClientRequest; use App\Http\Requests\Client\ShowClientRequest; @@ -50,9 +51,11 @@ class ClientController extends Controller /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ - public function index() + public function index(ClientFilters $filters) { - return response()->json(Client::scope()); + $clients = Client::filter($filters)->get(); + + return response()->json($clients); } /** diff --git a/app/Models/Client.php b/app/Models/Client.php index 892ee473db64..a875d12972b3 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -5,6 +5,7 @@ namespace App\Models; use App\DataMapper\ClientSettings; use App\Models\Company; use App\Models\Country; +use App\Models\Filterable; use App\Utils\Traits\MakesHash; use Hashids\Hashids; use Illuminate\Database\Eloquent\SoftDeletes; @@ -15,7 +16,8 @@ class Client extends BaseModel use PresentableTrait; use MakesHash; use SoftDeletes; - + use Filterable; + protected $presenter = 'App\Models\Presenters\ClientPresenter'; protected $appends = [ diff --git a/app/Models/Filterable.php b/app/Models/Filterable.php new file mode 100644 index 000000000000..4907f66239c9 --- /dev/null +++ b/app/Models/Filterable.php @@ -0,0 +1,20 @@ +apply($query); + } +} \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php index 9dc2218fe555..dc1b84084efe 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -63,11 +63,21 @@ class User extends Authenticatable implements MustVerifyEmail 'slack_webhook_url', ]; + /** + * Returns a account. + * + * @return Collection + */ public function account() { return $this->belongsTo(Account::class); } + /** + * Returns all company tokens. + * + * @return Collection + */ public function tokens() { return $this->hasMany(CompanyToken::class)->orderBy('id'); @@ -83,7 +93,11 @@ class User extends Authenticatable implements MustVerifyEmail return $this->belongsToMany(Company::class)->withPivot('permissions', 'settings', 'is_admin', 'is_owner', 'is_locked'); } - + /** + * Returns the current company + * + * @return Collection + */ public function company() { return $this->tokens()->whereRaw("BINARY `token`= ?", [request()->header('X-API-TOKEN')])->first()->company;