API optimizations

This commit is contained in:
Hillel Coren 2016-05-03 23:02:29 +03:00
parent c0a5084282
commit 2d878b6480
19 changed files with 58 additions and 55 deletions

View File

@ -193,26 +193,19 @@ class BaseAPIController extends Controller
protected function getRequestIncludes($data) protected function getRequestIncludes($data)
{ {
$data[] = 'user';
$included = Request::get('include'); $included = Request::get('include');
$included = explode(',', $included); $included = explode(',', $included);
foreach ($included as $include) { foreach ($included as $include) {
if ($include == 'invoices') { if ($include == 'invoices') {
$data[] = 'invoices.invoice_items'; $data[] = 'invoices.invoice_items';
$data[] = 'invoices.user';
} elseif ($include == 'client') { } elseif ($include == 'client') {
$data[] = 'client.contacts'; $data[] = 'client.contacts';
$data[] = 'client.user';
} elseif ($include == 'clients') { } elseif ($include == 'clients') {
$data[] = 'clients.contacts'; $data[] = 'clients.contacts';
$data[] = 'clients.user';
} elseif ($include == 'vendors') { } elseif ($include == 'vendors') {
$data[] = 'vendors.vendorcontacts'; $data[] = 'vendors.vendorcontacts';
$data[] = 'vendors.user'; } elseif ($include) {
}
elseif ($include) {
$data[] = $include; $data[] = $include;
} }
} }

View File

@ -19,6 +19,11 @@ class InvoiceItem extends EntityModel
return $this->belongsTo('App\Models\Invoice'); return $this->belongsTo('App\Models\Invoice');
} }
public function user()
{
return $this->belongsTo('App\Models\User')->withTrashed();
}
public function product() public function product()
{ {
return $this->belongsTo('App\Models\Product'); return $this->belongsTo('App\Models\Product');

View File

@ -26,6 +26,11 @@ class Product extends EntityModel
return Product::scope()->where('product_key', '=', $key)->first(); return Product::scope()->where('product_key', '=', $key)->first();
} }
public function user()
{
return $this->belongsTo('App\Models\User')->withTrashed();
}
public function default_tax_rate() public function default_tax_rate()
{ {
return $this->belongsTo('App\Models\TaxRate'); return $this->belongsTo('App\Models\TaxRate');

View File

@ -17,4 +17,9 @@ class TaxRate extends EntityModel
{ {
return ENTITY_TAX_RATE; return ENTITY_TAX_RATE;
} }
public function user()
{
return $this->belongsTo('App\Models\User')->withTrashed();
}
} }

View File

@ -77,13 +77,11 @@ class ClientTransformer extends EntityTransformer
public function transform(Client $client) public function transform(Client $client)
{ {
return [ return array_merge($this->getDefaults($client), [
'id' => (int) $client->public_id, 'id' => (int) $client->public_id,
'name' => $client->name, 'name' => $client->name,
'balance' => (float) $client->balance, 'balance' => (float) $client->balance,
'paid_to_date' => (float) $client->paid_to_date, 'paid_to_date' => (float) $client->paid_to_date,
'user_id' => (int) $client->user->public_id + 1,
'account_key' => $this->account->account_key,
'updated_at' => $this->getTimestamp($client->updated_at), 'updated_at' => $this->getTimestamp($client->updated_at),
'archived_at' => $this->getTimestamp($client->deleted_at), 'archived_at' => $this->getTimestamp($client->deleted_at),
'address1' => $client->address1, 'address1' => $client->address1,
@ -106,6 +104,6 @@ class ClientTransformer extends EntityTransformer
'currency_id' => (int) $client->currency_id, 'currency_id' => (int) $client->currency_id,
'custom_value1' => $client->custom_value1, 'custom_value1' => $client->custom_value1,
'custom_value2' => $client->custom_value2, 'custom_value2' => $client->custom_value2,
]; ]);
} }
} }

View File

@ -8,7 +8,7 @@ class ContactTransformer extends EntityTransformer
{ {
public function transform(Contact $contact) public function transform(Contact $contact)
{ {
return [ return array_merge($this->getDefaults($contact), [
'id' => (int) $contact->public_id, 'id' => (int) $contact->public_id,
'first_name' => $contact->first_name, 'first_name' => $contact->first_name,
'last_name' => $contact->last_name, 'last_name' => $contact->last_name,
@ -18,8 +18,7 @@ class ContactTransformer extends EntityTransformer
'is_primary' => (bool) $contact->is_primary, 'is_primary' => (bool) $contact->is_primary,
'phone' => $contact->phone, 'phone' => $contact->phone,
'last_login' => $contact->last_login, 'last_login' => $contact->last_login,
'account_key' => $this->account->account_key,
'send_invoice' => (bool) $contact->send_invoice, 'send_invoice' => (bool) $contact->send_invoice,
]; ]);
} }
} }

View File

@ -8,17 +8,16 @@ class CreditTransformer extends EntityTransformer
{ {
public function transform(Credit $credit) public function transform(Credit $credit)
{ {
return [ return array_merge($this->getDefaults($credit), [
'id' => (int) $credit->public_id, 'id' => (int) $credit->public_id,
'amount' => (float) $credit->amount, 'amount' => (float) $credit->amount,
'balance' => (float) $credit->balance, 'balance' => (float) $credit->balance,
'updated_at' => $this->getTimestamp($credit->updated_at), 'updated_at' => $this->getTimestamp($credit->updated_at),
'archived_at' => $this->getTimestamp($credit->deleted_at), 'archived_at' => $this->getTimestamp($credit->deleted_at),
'is_deleted' => (bool) $credit->is_deleted, 'is_deleted' => (bool) $credit->is_deleted,
'account_key' => $this->account->account_key,
'credit_date' => $credit->credit_date, 'credit_date' => $credit->credit_date,
'credit_number' => $credit->credit_number, 'credit_number' => $credit->credit_number,
'private_notes' => $credit->private_notes, 'private_notes' => $credit->private_notes,
]; ]);
} }
} }

View File

@ -8,14 +8,12 @@ class DocumentTransformer extends EntityTransformer
{ {
public function transform(Document $document) public function transform(Document $document)
{ {
return array_merge($this->getDefaults($document), [
return [
'id' => (int) $document->public_id, 'id' => (int) $document->public_id,
'name' => $document->name, 'name' => $document->name,
'account_key' => $this->account->account_key,
'type' => $document->type, 'type' => $document->type,
'invoice_id' => isset($document->invoice->public_id) ? (int) $document->invoice->public_id : null, 'invoice_id' => isset($document->invoice->public_id) ? (int) $document->invoice->public_id : null,
'expense_id' => isset($document->expense->public_id) ? (int) $document->expense->public_id : null, 'expense_id' => isset($document->expense->public_id) ? (int) $document->expense->public_id : null,
]; ]);
} }
} }

View File

@ -1,5 +1,6 @@
<?php namespace App\Ninja\Transformers; <?php namespace App\Ninja\Transformers;
use Auth;
use App\Models\Account; use App\Models\Account;
use App\Models\Client; use App\Models\Client;
use League\Fractal\TransformerAbstract; use League\Fractal\TransformerAbstract;
@ -42,4 +43,18 @@ class EntityTransformer extends TransformerAbstract
{ {
return $this->defaultIncludes; return $this->defaultIncludes;
} }
protected function getDefaults($entity)
{
$data = [
'account_key' => $this->account->account_key,
'is_owner' => (bool) Auth::user()->owns($entity),
];
if ($entity->relationLoaded('user')) {
$data['user_id'] = (int) $entity->user->public_id + 1;
}
return $data;
}
} }

View File

@ -15,7 +15,7 @@ class ExpenseTransformer extends EntityTransformer
public function transform(Expense $expense) public function transform(Expense $expense)
{ {
return [ return array_merge($this->getDefaults($expense), [
'id' => (int) $expense->public_id, 'id' => (int) $expense->public_id,
'private_notes' => $expense->private_notes, 'private_notes' => $expense->private_notes,
'public_notes' => $expense->public_notes, 'public_notes' => $expense->public_notes,
@ -25,7 +25,6 @@ class ExpenseTransformer extends EntityTransformer
'transaction_id' => $expense->transaction_id, 'transaction_id' => $expense->transaction_id,
'bank_id' => $expense->bank_id, 'bank_id' => $expense->bank_id,
'expense_currency_id' => (int) $expense->expense_currency_id, 'expense_currency_id' => (int) $expense->expense_currency_id,
'account_key' => $this->account->account_key,
'amount' => (float) $expense->amount, 'amount' => (float) $expense->amount,
'expense_date' => $expense->expense_date, 'expense_date' => $expense->expense_date,
'exchange_rate' => (float) $expense->exchange_rate, 'exchange_rate' => (float) $expense->exchange_rate,
@ -34,6 +33,6 @@ class ExpenseTransformer extends EntityTransformer
'client_id' => $this->client ? $this->client->public_id : (isset($expense->client->public_id) ? (int) $expense->client->public_id : null), 'client_id' => $this->client ? $this->client->public_id : (isset($expense->client->public_id) ? (int) $expense->client->public_id : null),
'invoice_id' => isset($expense->invoice->public_id) ? (int) $expense->invoice->public_id : null, 'invoice_id' => isset($expense->invoice->public_id) ? (int) $expense->invoice->public_id : null,
'vendor_id' => isset($expense->vendor->public_id) ? (int) $expense->vendor->public_id : null, 'vendor_id' => isset($expense->vendor->public_id) ? (int) $expense->vendor->public_id : null,
]; ]);
} }
} }

View File

@ -8,11 +8,9 @@ class InvoiceItemTransformer extends EntityTransformer
{ {
public function transform(InvoiceItem $item) public function transform(InvoiceItem $item)
{ {
return [ return array_merge($this->getDefaults($item), [
'id' => (int) $item->public_id, 'id' => (int) $item->public_id,
'product_key' => $item->product_key, 'product_key' => $item->product_key,
'account_key' => $this->account->account_key,
'user_id' => (int) $item->user_id,
'updated_at' => $this->getTimestamp($item->updated_at), 'updated_at' => $this->getTimestamp($item->updated_at),
'archived_at' => $this->getTimestamp($item->deleted_at), 'archived_at' => $this->getTimestamp($item->deleted_at),
'product_key' => $item->product_key, 'product_key' => $item->product_key,
@ -23,6 +21,6 @@ class InvoiceItemTransformer extends EntityTransformer
'tax_rate1' => (float) $item->tax_rate1, 'tax_rate1' => (float) $item->tax_rate1,
'tax_name2' => $item->tax_name2 ? $item->tax_name1 : '', 'tax_name2' => $item->tax_name2 ? $item->tax_name1 : '',
'tax_rate2' => (float) $item->tax_rate2, 'tax_rate2' => (float) $item->tax_rate2,
]; ]);
} }
} }

View File

@ -71,7 +71,7 @@ class InvoiceTransformer extends EntityTransformer
public function transform(Invoice $invoice) public function transform(Invoice $invoice)
{ {
return [ return array_merge($this->getDefaults($invoice), [
'id' => (int) $invoice->public_id, 'id' => (int) $invoice->public_id,
'amount' => (float) $invoice->amount, 'amount' => (float) $invoice->amount,
'balance' => (float) $invoice->balance, 'balance' => (float) $invoice->balance,
@ -105,8 +105,6 @@ class InvoiceTransformer extends EntityTransformer
'partial' => (float) $invoice->partial, 'partial' => (float) $invoice->partial,
'has_tasks' => (bool) $invoice->has_tasks, 'has_tasks' => (bool) $invoice->has_tasks,
'auto_bill' => (bool) $invoice->auto_bill, 'auto_bill' => (bool) $invoice->auto_bill,
'account_key' => $this->account->account_key,
'user_id' => (int) $invoice->user->public_id + 1,
'custom_value1' => (float) $invoice->custom_value1, 'custom_value1' => (float) $invoice->custom_value1,
'custom_value2' => (float) $invoice->custom_value2, 'custom_value2' => (float) $invoice->custom_value2,
'custom_taxes1' => (bool) $invoice->custom_taxes1, 'custom_taxes1' => (bool) $invoice->custom_taxes1,
@ -115,6 +113,6 @@ class InvoiceTransformer extends EntityTransformer
'quote_invoice_id' => (int) $invoice->quote_invoice_id, 'quote_invoice_id' => (int) $invoice->quote_invoice_id,
'custom_text_value1' => $invoice->custom_text_value1, 'custom_text_value1' => $invoice->custom_text_value1,
'custom_text_value2' => $invoice->custom_text_value2, 'custom_text_value2' => $invoice->custom_text_value2,
]; ]);
} }
} }

View File

@ -47,11 +47,9 @@ class PaymentTransformer extends EntityTransformer
public function transform(Payment $payment) public function transform(Payment $payment)
{ {
return [ return array_merge($this->getDefaults($payment), [
'id' => (int) $payment->public_id, 'id' => (int) $payment->public_id,
'amount' => (float) $payment->amount, 'amount' => (float) $payment->amount,
'account_key' => $this->account->account_key,
'user_id' => (int) $payment->user->public_id + 1,
'transaction_reference' => $payment->transaction_reference, 'transaction_reference' => $payment->transaction_reference,
'payment_date' => $payment->payment_date, 'payment_date' => $payment->payment_date,
'updated_at' => $this->getTimestamp($payment->updated_at), 'updated_at' => $this->getTimestamp($payment->updated_at),
@ -59,6 +57,6 @@ class PaymentTransformer extends EntityTransformer
'is_deleted' => (bool) $payment->is_deleted, 'is_deleted' => (bool) $payment->is_deleted,
'payment_type_id' => (int) $payment->payment_type_id, 'payment_type_id' => (int) $payment->payment_type_id,
'invoice_id' => (int) ($this->invoice ? $this->invoice->public_id : $payment->invoice->public_id), 'invoice_id' => (int) ($this->invoice ? $this->invoice->public_id : $payment->invoice->public_id),
]; ]);
} }
} }

View File

@ -7,16 +7,15 @@ class ProductTransformer extends EntityTransformer
{ {
public function transform(Product $product) public function transform(Product $product)
{ {
return [ return array_merge($this->getDefaults(), [
'id' => (int) $product->public_id, 'id' => (int) $product->public_id,
'product_key' => $product->product_key, 'product_key' => $product->product_key,
'notes' => $product->notes, 'notes' => $product->notes,
'cost' => $product->cost, 'cost' => $product->cost,
'qty' => $product->qty, 'qty' => $product->qty,
'account_key' =>$this->account->account_key,
'default_tax_rate_id' =>$product->default_tax_rate_id, 'default_tax_rate_id' =>$product->default_tax_rate_id,
'updated_at' =>$this->getTimestamp($product->updated_at), 'updated_at' =>$this->getTimestamp($product->updated_at),
'archived_at' => $this->getTimestamp($product->deleted_at), 'archived_at' => $this->getTimestamp($product->deleted_at),
]; ]);
} }
} }

View File

@ -39,12 +39,10 @@ class TaskTransformer extends EntityTransformer
public function transform(Task $task) public function transform(Task $task)
{ {
return [ return array_merge($this->getDefaults($task), [
'id' => (int) $task->public_id, 'id' => (int) $task->public_id,
'account_key' => $this->account->account_key,
'user_id' => (int) $task->user->public_id + 1,
'description' => $task->description, 'description' => $task->description,
'duration' => $task->getDuration() 'duration' => $task->getDuration()
]; ]);
} }
} }

View File

@ -21,13 +21,12 @@ class TaxRateTransformer extends EntityTransformer
public function transform(TaxRate $taxRate) public function transform(TaxRate $taxRate)
{ {
return [ return array_merge($this->getDefaults($taxRate), [
'id' => (int) $taxRate->public_id, 'id' => (int) $taxRate->public_id,
'name' => $taxRate->name, 'name' => $taxRate->name,
'rate' => (float) $taxRate->rate, 'rate' => (float) $taxRate->rate,
'updated_at' => $this->getTimestamp($taxRate->updated_at), 'updated_at' => $this->getTimestamp($taxRate->updated_at),
'archived_at' => $this->getTimestamp($taxRate->deleted_at), 'archived_at' => $this->getTimestamp($taxRate->deleted_at),
'account_key' => $this->account->account_key, ]);
];
} }
} }

View File

@ -8,7 +8,7 @@ class VendorContactTransformer extends EntityTransformer
{ {
public function transform(VendorContact $contact) public function transform(VendorContact $contact)
{ {
return [ return array_merge($this->getDefaults($contact), [
'id' => (int) $contact->public_id, 'id' => (int) $contact->public_id,
'first_name' => $contact->first_name, 'first_name' => $contact->first_name,
'last_name' => $contact->last_name, 'last_name' => $contact->last_name,
@ -17,7 +17,6 @@ class VendorContactTransformer extends EntityTransformer
'archived_at' => $this->getTimestamp($contact->deleted_at), 'archived_at' => $this->getTimestamp($contact->deleted_at),
'is_primary' => (bool) $contact->is_primary, 'is_primary' => (bool) $contact->is_primary,
'phone' => $contact->phone, 'phone' => $contact->phone,
'account_key' => $this->account->account_key, ]);
];
} }
} }

View File

@ -61,13 +61,11 @@ class VendorTransformer extends EntityTransformer
public function transform(Vendor $vendor) public function transform(Vendor $vendor)
{ {
return [ return array_merge($this->getDefaults($vendor), [
'id' => (int) $vendor->public_id, 'id' => (int) $vendor->public_id,
'name' => $vendor->name, 'name' => $vendor->name,
'balance' => (float) $vendor->balance, 'balance' => (float) $vendor->balance,
'paid_to_date' => (float) $vendor->paid_to_date, 'paid_to_date' => (float) $vendor->paid_to_date,
'user_id' => (int) $vendor->user->public_id + 1,
'account_key' => $this->account->account_key,
'updated_at' => $this->getTimestamp($vendor->updated_at), 'updated_at' => $this->getTimestamp($vendor->updated_at),
'archived_at' => $this->getTimestamp($vendor->deleted_at), 'archived_at' => $this->getTimestamp($vendor->deleted_at),
'address1' => $vendor->address1, 'address1' => $vendor->address1,
@ -84,6 +82,6 @@ class VendorTransformer extends EntityTransformer
'vat_number' => $vendor->vat_number, 'vat_number' => $vendor->vat_number,
'id_number' => $vendor->id_number, 'id_number' => $vendor->id_number,
'currency_id' => (int) $vendor->currency_id 'currency_id' => (int) $vendor->currency_id
]; ]);
} }
} }