Alimentalos/Backend

View on GitHub
relationships/src/Lists/DeviceList.php

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
<?php


namespace Alimentalos\Relationships\Lists;


use App\Models\Device;
use Illuminate\Database\Eloquent\Builder;

trait DeviceList
{
    /**
     * @return Builder
     */
    public static function fetchInDatabaseDevicesQuery()
    {
        $userGroups = authenticated()->groups->pluck('uuid')->toArray();
        return Device::where('user_uuid', authenticated()->uuid)
            ->orWhere('is_public', true)
            ->orWhereHas('groups', fn(Builder $query) => $query->whereIn('uuid', $userGroups));
    }

    /**
     * Fetch in database devices
     * @return Builder
     */
    public function fetchInDatabaseDevices()
    {
        return $this->fetchInDatabaseDevicesQuery();
    }

    /**
     * Fetch in database devices by comma separated string of devices uuid
     *
     * @param $devices
     * @return Builder
     */
    public function fetchInDatabase($devices)
    {
        if (is_null($devices) or $devices === '') {
            return $this->fetchInDatabaseDevices();
        }
        return Device::whereIn('uuid', explode(',', $devices))
            ->orWhere('user_uuid', authenticated()->uuid)
            ->orWhere('is_public', true);
    }
}