From 441d52523dd41db23d3ff113028b89bf1f1ff24f Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 27 Sep 2019 14:31:13 +1000 Subject: [PATCH] Add activities to API --- app/Http/Controllers/ActivityController.php | 47 +++++++++++++++++++ app/Http/Controllers/BaseController.php | 13 ++++- .../Requests/Activity/ShowActivityRequest.php | 30 ++++++++++++ app/Models/Activity.php | 4 ++ app/Models/StaticModel.php | 2 + app/Policies/ActivityPolicy.php | 24 ++++++++++ app/Providers/AuthServiceProvider.php | 3 ++ app/Transformers/ActivityTransformer.php | 46 ++++++++++++++++++ routes/api.php | 2 + 9 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/ActivityController.php create mode 100644 app/Http/Requests/Activity/ShowActivityRequest.php create mode 100644 app/Policies/ActivityPolicy.php create mode 100644 app/Transformers/ActivityTransformer.php diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php new file mode 100644 index 000000000000..ca24f947b11a --- /dev/null +++ b/app/Http/Controllers/ActivityController.php @@ -0,0 +1,47 @@ +user()->company()->id) + ->orderBy('created_at', 'DESC') + ->take(50); + + return $this->listResponse($activities); + + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index 6eeaa13e16e9..1b448f55c1b1 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -11,12 +11,13 @@ namespace App\Http\Controllers; +use App\Models\User; use App\Transformers\ArraySerializer; use App\Transformers\EntityTransformer; use App\Utils\Statics; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Request as Input; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Request as Input; use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection; @@ -145,6 +146,16 @@ class BaseController extends Controller $query->with($includes); + + if (auth()->user()->cannot('view_'.$this->entity_type)) + { + if ($this->entity_type == User::class) { + $query->where('id', '=', auth()->user()->id); + } else { + $query->where('user_id', '=', auth()->user()->id); + } + } + $data = $this->createCollection($query, $transformer, $this->entity_type); return $this->response($data); diff --git a/app/Http/Requests/Activity/ShowActivityRequest.php b/app/Http/Requests/Activity/ShowActivityRequest.php new file mode 100644 index 000000000000..525be51acb1a --- /dev/null +++ b/app/Http/Requests/Activity/ShowActivityRequest.php @@ -0,0 +1,30 @@ +user()->can('view', Activity::class); + } + +} \ No newline at end of file diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 614bf7df5826..b90a895760df 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -130,4 +130,8 @@ class Activity extends StaticModel return $this->belongsTo(Expense::class)->withTrashed(); } + public function company() + { + return $this->belongsTo(Company::class)->withTrashed(); + } } diff --git a/app/Models/StaticModel.php b/app/Models/StaticModel.php index e3784fca6bf6..6eb46c56f505 100644 --- a/app/Models/StaticModel.php +++ b/app/Models/StaticModel.php @@ -22,6 +22,8 @@ class StaticModel extends Model 'deleted_at' => 'timestamp', ]; + protected $dateFormat = 'Y-m-d H:i:s.u'; + public function getIdAttribute() { return (string)$this->attributes['id']; diff --git a/app/Policies/ActivityPolicy.php b/app/Policies/ActivityPolicy.php new file mode 100644 index 000000000000..b535a76d9987 --- /dev/null +++ b/app/Policies/ActivityPolicy.php @@ -0,0 +1,24 @@ + ActivityPolicy::class, Client::class => ClientPolicy::class, Company::class => CompanyPolicy::class, Product::class => ProductPolicy::class, diff --git a/app/Transformers/ActivityTransformer.php b/app/Transformers/ActivityTransformer.php new file mode 100644 index 000000000000..ea72b7528583 --- /dev/null +++ b/app/Transformers/ActivityTransformer.php @@ -0,0 +1,46 @@ + (string) $this->encodePrimaryKey($activity->id), + 'activity_type_id' => (string) $activity->activity_type_id, + 'client_id' => $activity->client ? (string) $activity->client->id : '', + 'company_id' => $activity->company ? (string) $activity->company->id : '', + 'user_id' => (string) $activity->user_id, + 'invoice_id' => $activity->invoice ? (string) $activity->invoice->id : '', + 'payment_id' => $activity->payment ? (string) $activity->payment->id : '', + 'credit_id' => $activity->credit ? (string) $activity->credit->id : '', + 'updated_at' => $activity->updated_at, + 'expense_id' => $activity->expense_id ? (string) $activity->expense->id : '', + 'is_system' => (bool) $activity->is_system, + 'contact_id' => $activity->contact_id ? (string) $activity->contact->id : '', + 'task_id' => $activity->task_id ? (string) $activity->task->id : '', + 'notes' => $activity->notes ? (string) $activity->notes : '', + 'ip' => (string) $activity->ip, + + ]; + } +} diff --git a/routes/api.php b/routes/api.php index 87d078e10d4a..f1f95af809fa 100644 --- a/routes/api.php +++ b/routes/api.php @@ -34,6 +34,8 @@ Route::group(['api_secret_check','domain_db'], function () { Route::group(['middleware' => ['api_db','api_secret_check','token_auth'], 'prefix' =>'api/v1', 'as' => 'api.'], function () { + Route::resource('activities', 'ActivityController'); // name = (clients. index / create / show / update / destroy / edit + Route::resource('clients', 'ClientController'); // name = (clients. index / create / show / update / destroy / edit Route::post('clients/bulk', 'ClientController@bulk')->name('clients.bulk');