Implement forced includes to allow forcing additional objects in the json response

This commit is contained in:
David Bomba 2019-06-24 10:13:53 +10:00
parent 9cb33f3e10
commit 67fa34fe82
5 changed files with 90 additions and 9 deletions

View File

@ -22,25 +22,76 @@ use League\Fractal\Resource\Collection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer; use League\Fractal\Serializer\JsonApiSerializer;
/**
*
*/
class BaseController extends Controller class BaseController extends Controller
{ {
/**
* Passed from the parent when we need to force
* includes internally rather than externally via
* the REQUEST 'include' variable.
*
* @var array
*/
public $forced_includes;
/**
* Fractal manager
* @var object
*/
protected $manager;
public function __construct() public function __construct()
{ {
$this->manager = new Manager(); $this->manager = new Manager();
if ($include = request()->input('include')) { $this->forced_includes = [];
$this->manager->parseIncludes($include);
}
private function buildManager()
{
if(request()->input('include') !== null)
{
$request_include = explode(",", request()->input('include'));
$include = array_merge($this->forced_includes, $request_include);
$include = implode(",", $include);
} }
else
{
if(count($this->forced_includes)>=1)
$include = implode(",", $this->forced_includes);
else
$include = '';
}
Log::error('forced includes = ' . print_r($this->forced_includes,1));
Log::error('includes = ' . $include);
$this->manager->parseIncludes($include);
$this->serializer = request()->input('serializer') ?: EntityTransformer::API_SERIALIZER_ARRAY; $this->serializer = request()->input('serializer') ?: EntityTransformer::API_SERIALIZER_ARRAY;
if ($this->serializer === EntityTransformer::API_SERIALIZER_JSON) { if ($this->serializer === EntityTransformer::API_SERIALIZER_JSON)
$this->manager->setSerializer(new JsonApiSerializer()); {
} else {
$this->manager->setSerializer(new ArraySerializer());
}
$this->manager->setSerializer(new JsonApiSerializer());
} else
{
$this->manager->setSerializer(new ArraySerializer());
}
} }
/** /**
@ -64,6 +115,9 @@ class BaseController extends Controller
protected function listResponse($query) protected function listResponse($query)
{ {
$this->buildManager();
$transformer = new $this->entity_transformer(Input::get('serializer')); $transformer = new $this->entity_transformer(Input::get('serializer'));
$includes = $transformer->getDefaultIncludes(); $includes = $transformer->getDefaultIncludes();
@ -79,6 +133,8 @@ class BaseController extends Controller
protected function createCollection($query, $transformer, $entity_type) protected function createCollection($query, $transformer, $entity_type)
{ {
$this->buildManager();
if ($this->serializer && $this->serializer != EntityTransformer::API_SERIALIZER_JSON) { if ($this->serializer && $this->serializer != EntityTransformer::API_SERIALIZER_JSON) {
$entity_type = null; $entity_type = null;
} }
@ -123,6 +179,7 @@ class BaseController extends Controller
protected function itemResponse($item) protected function itemResponse($item)
{ {
$this->buildManager();
$transformer = new $this->entity_transformer(Input::get('serializer')); $transformer = new $this->entity_transformer(Input::get('serializer'));

View File

@ -11,6 +11,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\DataMapper\DefaultSettings;
use App\Http\Requests\Company\CreateCompanyRequest; use App\Http\Requests\Company\CreateCompanyRequest;
use App\Http\Requests\Company\DestroyCompanyRequest; use App\Http\Requests\Company\DestroyCompanyRequest;
use App\Http\Requests\Company\EditCompanyRequest; use App\Http\Requests\Company\EditCompanyRequest;
@ -43,6 +44,9 @@ class CompanyController extends BaseController
protected $entity_transformer = CompanyTransformer::class; protected $entity_transformer = CompanyTransformer::class;
protected $company_repo; protected $company_repo;
public $forced_includes = [];
/** /**
* CompanyController constructor. * CompanyController constructor.
*/ */
@ -90,9 +94,19 @@ class CompanyController extends BaseController
*/ */
public function store(StoreCompanyRequest $request) public function store(StoreCompanyRequest $request)
{ {
// $this->forced_includes = ['company_user'];
$company = CreateCompany::dispatchNow($request->all(), auth()->user()->company()->account); $company = CreateCompany::dispatchNow($request->all(), auth()->user()->company()->account);
auth()->user()->companies()->attach($company->id, [
'account_id' => $company->account->id,
'is_owner' => 1,
'is_admin' => 1,
'is_locked' => 0,
'permissions' => json_encode([]),
'settings' => json_encode(DefaultSettings::userSettings()),
]);
return $this->itemResponse($company); return $this->itemResponse($company);
} }

View File

@ -49,7 +49,7 @@ class QueryLogging
$time = $timeEnd - $timeStart; $time = $timeEnd - $timeStart;
Log::info($request->method() . ' - ' . $request->url() . ": $count queries - " . $time); Log::info($request->method() . ' - ' . $request->url() . ": $count queries - " . $time);
if($count > 20) if($count > 16)
Log::info($queries); Log::info($queries);
} }

View File

@ -51,7 +51,7 @@ class CreateCompany
{ {
$company = new Company(); $company = new Company();
$company->name = $this->request['name'] ?: $this->request['first_name'] . ' ' . $this->request['last_name']; $company->name = isset($this->request['name']) ?: $this->request['first_name'] . ' ' . $this->request['last_name'];
$company->account_id = $this->account->id; $company->account_id = $this->account->id;
$company->company_key = $this->createHash(); $company->company_key = $this->createHash();
$company->ip = request()->ip(); $company->ip = request()->ip();

View File

@ -15,7 +15,9 @@ namespace App\Transformers;
use App\Models\Account; use App\Models\Account;
use App\Models\Client; use App\Models\Client;
use App\Models\Company; use App\Models\Company;
use App\Models\CompanyUser;
use App\Models\User; use App\Models\User;
use App\Transformers\CompanyUserTransformer;
use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesHash;
/** /**
@ -51,6 +53,7 @@ class CompanyTransformer extends EntityTransformer
'language', 'language',
'expenses', 'expenses',
'payments', 'payments',
'company_user'
]; ];
@ -85,6 +88,13 @@ class CompanyTransformer extends EntityTransformer
]; ];
} }
public function includeCompanyUser(Company $company)
{
$transformer = new CompanyUserTransformer($this->serializer);
return $this->includeItem($company->company_users->where('user_id', auth()->user()->id)->first(), $transformer, CompanyUser::class);
}
public function includeUsers(Company $company) public function includeUsers(Company $company)
{ {