From 0d9df1f29075432945e755bb884066c82eaf155a Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 24 Aug 2020 08:20:57 +1000 Subject: [PATCH 1/7] Fixes for incorrect name spacing of validation rules --- app/Http/Controllers/MigrationController.php | 4 ++-- .../Credit/UniqueCreditNumberRule.php | 0 .../Quote/UniqueQuoteNumberRule.php | 0 app/Transformers/CompanyGatewayTransformer.php | 3 ++- 4 files changed, 4 insertions(+), 3 deletions(-) rename app/Http/{Requests => ValidationRules}/Credit/UniqueCreditNumberRule.php (100%) rename app/Http/{Requests => ValidationRules}/Quote/UniqueQuoteNumberRule.php (100%) diff --git a/app/Http/Controllers/MigrationController.php b/app/Http/Controllers/MigrationController.php index 1e1b363c6d25..4b4c755cb3df 100644 --- a/app/Http/Controllers/MigrationController.php +++ b/app/Http/Controllers/MigrationController.php @@ -146,8 +146,8 @@ class MigrationController extends BaseController public function purgeCompanySaveSettings(Request $request, Company $company) { - $company->clients()->delete(); - $company->products()->delete(); + $company->clients()->forceDelete(); + $company->products()->forceDelete(); $company->save(); diff --git a/app/Http/Requests/Credit/UniqueCreditNumberRule.php b/app/Http/ValidationRules/Credit/UniqueCreditNumberRule.php similarity index 100% rename from app/Http/Requests/Credit/UniqueCreditNumberRule.php rename to app/Http/ValidationRules/Credit/UniqueCreditNumberRule.php diff --git a/app/Http/Requests/Quote/UniqueQuoteNumberRule.php b/app/Http/ValidationRules/Quote/UniqueQuoteNumberRule.php similarity index 100% rename from app/Http/Requests/Quote/UniqueQuoteNumberRule.php rename to app/Http/ValidationRules/Quote/UniqueQuoteNumberRule.php diff --git a/app/Transformers/CompanyGatewayTransformer.php b/app/Transformers/CompanyGatewayTransformer.php index 8261d2d4ec54..e14c9ffa0d81 100644 --- a/app/Transformers/CompanyGatewayTransformer.php +++ b/app/Transformers/CompanyGatewayTransformer.php @@ -27,7 +27,6 @@ class CompanyGatewayTransformer extends EntityTransformer * @var array */ protected $defaultIncludes = [ - 'gateway' ]; /** @@ -63,6 +62,8 @@ class CompanyGatewayTransformer extends EntityTransformer 'custom_value2' => $company_gateway->custom_value2 ?: '', 'custom_value3' => $company_gateway->custom_value3 ?: '', 'custom_value4' => $company_gateway->custom_value4 ?: '', + 'label' => (string)$company_gateway->label ?: '', + 'token_billing' => (string)$company_gateway->token_billing, ]; } From ffdfaefd804576f275eceea722597ad66be6dbed Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 24 Aug 2020 12:45:53 +1000 Subject: [PATCH 2/7] Working on system logs --- app/Filters/SystemLogFilters.php | 105 +++++++++++++++++++ app/Filters/VendorFilters.php | 26 ----- app/Http/Controllers/SystemLogController.php | 95 +++++++++++++++++ app/Models/Client.php | 5 + app/Models/Company.php | 5 + app/Transformers/ClientTransformer.php | 11 ++ app/Transformers/CompanyTransformer.php | 19 +++- app/Transformers/SystemLogTransformer.php | 39 +++++++ 8 files changed, 277 insertions(+), 28 deletions(-) create mode 100644 app/Filters/SystemLogFilters.php create mode 100644 app/Http/Controllers/SystemLogController.php create mode 100644 app/Transformers/SystemLogTransformer.php diff --git a/app/Filters/SystemLogFilters.php b/app/Filters/SystemLogFilters.php new file mode 100644 index 000000000000..2f467502e0e3 --- /dev/null +++ b/app/Filters/SystemLogFilters.php @@ -0,0 +1,105 @@ +builder->where('type_id', $type_id); + } + + public function category_id(int $category_id) :Builder + { + return $this->builder->where('category_id', $category_id); + } + + public function event_id(int $event_id) :Builder + { + return $this->builder->where('event_id', $event_id); + } + + /** + * Filter based on search text + * + * @param string query filter + * @return Illuminate\Database\Query\Builder + * @deprecated + * + */ + public function filter(string $filter = '') : Builder + { + if (strlen($filter) == 0) { + return $this->builder; + } + + return $this->builder; + + // return $this->builder->where(function ($query) use ($filter) { + // $query->where('vendors.name', 'like', '%'.$filter.'%') + // ->orWhere('vendors.id_number', 'like', '%'.$filter.'%') + // ->orWhere('vendor_contacts.first_name', 'like', '%'.$filter.'%') + // ->orWhere('vendor_contacts.last_name', 'like', '%'.$filter.'%') + // ->orWhere('vendor_contacts.email', 'like', '%'.$filter.'%') + // ->orWhere('vendors.custom_value1', 'like', '%'.$filter.'%') + // ->orWhere('vendors.custom_value2', 'like', '%'.$filter.'%') + // ->orWhere('vendors.custom_value3', 'like', '%'.$filter.'%') + // ->orWhere('vendors.custom_value4', 'like', '%'.$filter.'%'); + // }); + } + + /** + * Sorts the list based on $sort + * + * @param string sort formatted as column|asc + * @return Illuminate\Database\Query\Builder + */ + public function sort(string $sort) : Builder + { + $sort_col = explode("|", $sort); + return $this->builder->orderBy($sort_col[0], $sort_col[1]); + } + + /** + * Returns the base query + * + * @param int company_id + * @return Illuminate\Database\Query\Builder + * @deprecated + */ + public function baseQuery(int $company_id, User $user) : Builder + { + } + + /** + * Filters the query by the users company ID + * + * @param $company_id The company Id + * @return Illuminate\Database\Query\Builder + */ + public function entityFilter() + { + + //return $this->builder->whereCompanyId(auth()->user()->company()->id); + return $this->builder->company(); + } +} diff --git a/app/Filters/VendorFilters.php b/app/Filters/VendorFilters.php index 183232a1ec0a..769608d49c28 100644 --- a/app/Filters/VendorFilters.php +++ b/app/Filters/VendorFilters.php @@ -23,32 +23,6 @@ use Illuminate\Support\Facades\Gate; class VendorFilters extends QueryFilters { - /** - * Filter by balance - * - * @param string $balance - * @return Illuminate\Database\Query\Builder - */ - public function balance(string $balance): Builder - { - $parts = $this->split($balance); - - return $this->builder->where('balance', $parts->operator, $parts->value); - } - - /** - * Filter between balances - * - * @param string balance - * @return Illuminate\Database\Query\Builder - */ - public function between_balance(string $balance): Builder - { - $parts = explode(":", $balance); - - return $this->builder->whereBetween('balance', [$parts[0], $parts[1]]); - } - /** * Filter based on search text * diff --git a/app/Http/Controllers/SystemLogController.php b/app/Http/Controllers/SystemLogController.php new file mode 100644 index 000000000000..22658a66a8b6 --- /dev/null +++ b/app/Http/Controllers/SystemLogController.php @@ -0,0 +1,95 @@ +belongsTo(Country::class, 'shipping_country_id', 'id'); } + public function system_logs() + { + return $this->hasMany(SystemLog::class); + } + public function timezone() { return Timezone::find($this->getSetting('timezone_id')); diff --git a/app/Models/Company.php b/app/Models/Company.php index d54f712a93db..9027999579bd 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -391,6 +391,11 @@ class Company extends BaseModel return $this->hasMany(CompanyToken::class); } + public function system_logs() + { + return $this->hasMany(SystemLog::class); + } + public function tokens_hashed() { return $this->hasMany(CompanyToken::class); diff --git a/app/Transformers/ClientTransformer.php b/app/Transformers/ClientTransformer.php index 0f06ab572f8b..cc533fc253c3 100644 --- a/app/Transformers/ClientTransformer.php +++ b/app/Transformers/ClientTransformer.php @@ -17,10 +17,12 @@ use App\Models\ClientContact; use App\Models\ClientGatewayToken; use App\Models\CompanyLedger; use App\Models\Document; +use App\Models\SystemLog; use App\Transformers\ActivityTransformer; use App\Transformers\ClientGatewayTokenTransformer; use App\Transformers\CompanyLedgerTransformer; use App\Transformers\DocumentTransformer; +use App\Transformers\SystemLogTransformer; use App\Utils\Traits\MakesHash; /** @@ -44,6 +46,7 @@ class ClientTransformer extends EntityTransformer 'gateway_tokens', 'activities', 'ledger', + 'system_logs', ]; @@ -91,6 +94,14 @@ class ClientTransformer extends EntityTransformer return $this->includeCollection($client->ledger, $transformer, CompanyLedger::class); } + + public function includeSystemLogs(Client $client) + { + $transformer = new SystemLogTransformer($this->serializer); + + return $this->includeCollection($client->system_logs, $transformer, SystemLog::class); + } + /** * @param Client $client * diff --git a/app/Transformers/CompanyTransformer.php b/app/Transformers/CompanyTransformer.php index 513aa56876d4..afdccec116d3 100644 --- a/app/Transformers/CompanyTransformer.php +++ b/app/Transformers/CompanyTransformer.php @@ -29,8 +29,14 @@ use App\Models\PaymentTerm; use App\Models\Product; use App\Models\Project; use App\Models\Quote; +use App\Models\SystemLog; use App\Models\Task; -use App\Models\TaxRate; +use App\Models\TaxRate; public function includeSystemLogs(Company $company) + { + $transformer = new SystemLogTransformer($this->serializer); + + return $this->includeCollection($company->system_logs, $transformer, SystemLog::class); + } use App\Models\User; use App\Models\Webhook; use App\Transformers\CompanyLedgerTransformer; @@ -39,6 +45,7 @@ use App\Transformers\CompanyTokenTransformer; use App\Transformers\CreditTransformer; use App\Transformers\DocumentTransformer; use App\Transformers\PaymentTermTransformer; +use App\Transformers\SystemLogTransformer; use App\Transformers\TaskTransformer; use App\Transformers\WebhookTransformer; use App\Utils\Traits\MakesHash; @@ -88,7 +95,8 @@ class CompanyTransformer extends EntityTransformer 'ledger', 'webhooks', 'tokens', - 'tokens_hashed' + 'tokens_hashed', + 'system_logs', ]; @@ -307,4 +315,11 @@ class CompanyTransformer extends EntityTransformer return $this->includeCollection($company->payment_terms()->get(), $transformer, PaymentTerm::class); } + + public function includeSystemLogs(Company $company) + { + $transformer = new SystemLogTransformer($this->serializer); + + return $this->includeCollection($company->system_logs, $transformer, SystemLog::class); + } } diff --git a/app/Transformers/SystemLogTransformer.php b/app/Transformers/SystemLogTransformer.php new file mode 100644 index 000000000000..1e286d3ff3ed --- /dev/null +++ b/app/Transformers/SystemLogTransformer.php @@ -0,0 +1,39 @@ + (string) $this->encodePrimaryKey($system_log->id), + 'company_id' => (string) $this->encodePrimaryKey($system_log->company_id), + 'user_id' => (string) $this->encodePrimaryKey($system_log->user_id), + 'client_id' => (string) $this->encodePrimaryKey($system_log->client_id), + 'event_id' => (int) $system_log->event_id, + 'category_id' => (int) $system_log->category_id, + 'type_id' => (int) $system_log->type_id, + 'log' => (string) $system_log->log, + 'updated_at' => (int)$system_log->updated_at, + 'created_at' => (int)$system_log->created_at, + ]; + } +} From 66499a9a3144cb294bfaa0edf4adda5270f91eb3 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 24 Aug 2020 15:08:49 +1000 Subject: [PATCH 3/7] System Logs --- app/Filters/SystemLogFilters.php | 5 +++ .../Controllers/OpenAPI/SystemLogSchema.php | 17 ++++++++ app/Http/Controllers/SystemLogController.php | 42 ++++++++++++++++++- routes/api.php | 2 + 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/OpenAPI/SystemLogSchema.php diff --git a/app/Filters/SystemLogFilters.php b/app/Filters/SystemLogFilters.php index 2f467502e0e3..57c9f06cd7af 100644 --- a/app/Filters/SystemLogFilters.php +++ b/app/Filters/SystemLogFilters.php @@ -38,6 +38,11 @@ class SystemLogFilters extends QueryFilters return $this->builder->where('event_id', $event_id); } + public function client_id(int $client_id) :Builder + { + return $this->builder->where('client_id', $client_id); + } + /** * Filter based on search text * diff --git a/app/Http/Controllers/OpenAPI/SystemLogSchema.php b/app/Http/Controllers/OpenAPI/SystemLogSchema.php new file mode 100644 index 000000000000..6e800ca4f0e9 --- /dev/null +++ b/app/Http/Controllers/OpenAPI/SystemLogSchema.php @@ -0,0 +1,17 @@ +listResponse($system_logs); } /** diff --git a/routes/api.php b/routes/api.php index cf06aa78eba3..536fc19347e8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -146,6 +146,8 @@ Route::group(['middleware' => ['api_db', 'token_auth', 'locale'], 'prefix' => 'a // Route::delete('hooks/{subscription_id}', 'SubscriptionController@unsubscribe')->name('hooks.unsubscribe'); Route::resource('webhooks', 'WebhookController'); + Route::resource('system_logs', 'SystemLogController'); + Route::post('webhooks/bulk', 'WebhookController@bulk')->name('webhooks.bulk'); /*Company Ledger */ From eef91513d0915d659f85ca0bac626d2812b22fa7 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 24 Aug 2020 15:19:58 +1000 Subject: [PATCH 4/7] fix for regression --- app/Transformers/CompanyTransformer.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/Transformers/CompanyTransformer.php b/app/Transformers/CompanyTransformer.php index afdccec116d3..1863a6a780b8 100644 --- a/app/Transformers/CompanyTransformer.php +++ b/app/Transformers/CompanyTransformer.php @@ -31,12 +31,7 @@ use App\Models\Project; use App\Models\Quote; use App\Models\SystemLog; use App\Models\Task; -use App\Models\TaxRate; public function includeSystemLogs(Company $company) - { - $transformer = new SystemLogTransformer($this->serializer); - - return $this->includeCollection($company->system_logs, $transformer, SystemLog::class); - } +use App\Models\TaxRate; use App\Models\User; use App\Models\Webhook; use App\Transformers\CompanyLedgerTransformer; From d7dd54427106d9236f04cf2b7e98abf58ca7ff16 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 24 Aug 2020 19:51:19 +1000 Subject: [PATCH 5/7] System logs --- .../Controllers/OpenAPI/SystemLogSchema.php | 2 +- app/Http/Controllers/SystemLogController.php | 94 +++++++++++++++++-- app/Models/SystemLog.php | 10 ++ .../2014_10_13_000000_create_users_table.php | 10 +- 4 files changed, 102 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/OpenAPI/SystemLogSchema.php b/app/Http/Controllers/OpenAPI/SystemLogSchema.php index 6e800ca4f0e9..dd1a1cb18517 100644 --- a/app/Http/Controllers/OpenAPI/SystemLogSchema.php +++ b/app/Http/Controllers/OpenAPI/SystemLogSchema.php @@ -10,7 +10,7 @@ * @OA\Property(property="event_id", type="int", example="1", description="The Log Type ID"), * @OA\Property(property="category_id", type="int", example="1", description="The Category Type ID"), * @OA\Property(property="type_id", type="int", example="1", description="The Type Type ID"), - * @OA\Property(property="log", type="object", example="{"key":"value"}", description="The json object of the error"), + * @OA\Property(property="log", type="object", example="{'key':'value'}", description="The json object of the error"), * @OA\Property(property="updated_at", type="string", example="2", description="______"), * @OA\Property(property="created_at", type="string", example="2", description="______"), * ) diff --git a/app/Http/Controllers/SystemLogController.php b/app/Http/Controllers/SystemLogController.php index de17eba8d089..ae4e83ae461b 100644 --- a/app/Http/Controllers/SystemLogController.php +++ b/app/Http/Controllers/SystemLogController.php @@ -72,7 +72,13 @@ class SystemLogController extends Controller */ public function create() { - // + $error = [ + 'message' => 'Cannot create system log', + 'errors' => new \stdClass + ]; + + + return response()->json($error, 400); } /** @@ -83,18 +89,72 @@ class SystemLogController extends Controller */ public function store(Request $request) { - // + + $error = [ + 'message' => 'Cannot store system log', + 'errors' => new \stdClass + ]; + + + return response()->json($error, 400); + } /** * Display the specified resource. * - * @param int $id + * @param \App\Http\Requests\Invoice\ShowInvoiceRequest $request The request + * @param \App\Models\SystemLog $system_logs The system logs + * * @return \Illuminate\Http\Response + * + * + * @OA\Get( + * path="/api/v1/system_logs/{id}", + * operationId="showSystemLogs", + * tags={"system_logs"}, + * summary="Shows a system_logs", + * description="Displays a system_logs by id", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The system_logs Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the system_logs object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/SystemLog"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + * */ - public function show($id) + public function show(Request $request, SystemLog $system_log) { - // + return $this->itemResponse($system_log); } /** @@ -105,7 +165,13 @@ class SystemLogController extends Controller */ public function edit($id) { - // + $error = [ + 'message' => 'Cannot edit system log', + 'errors' => new \stdClass + ]; + + + return response()->json($error, 400); } /** @@ -117,7 +183,13 @@ class SystemLogController extends Controller */ public function update(Request $request, $id) { - // + $error = [ + 'message' => 'Cannot update system log', + 'errors' => new \stdClass + ]; + + + return response()->json($error, 400); } /** @@ -128,6 +200,12 @@ class SystemLogController extends Controller */ public function destroy($id) { - // + $error = [ + 'message' => 'Cannot destroy system log', + 'errors' => new \stdClass + ]; + + + return response()->json($error, 400); } } diff --git a/app/Models/SystemLog.php b/app/Models/SystemLog.php index f7b517314226..490a4c104b17 100644 --- a/app/Models/SystemLog.php +++ b/app/Models/SystemLog.php @@ -54,4 +54,14 @@ class SystemLog extends Model protected $casts = [ 'log' => 'array' ]; + + public function resolveRouteBinding($value) + { + if (is_numeric($value)) { + throw new ModelNotFoundException("Record with value {$value} not found"); + } + + return $this + ->where('id', $this->decodePrimaryKey($value))->firstOrFail(); + } } diff --git a/database/migrations/2014_10_13_000000_create_users_table.php b/database/migrations/2014_10_13_000000_create_users_table.php index 1141ee17b48d..2dda97aaabdf 100644 --- a/database/migrations/2014_10_13_000000_create_users_table.php +++ b/database/migrations/2014_10_13_000000_create_users_table.php @@ -481,7 +481,7 @@ class CreateUsersTable extends Migration $t->boolean('custom_surcharge_tax3')->default(false); $t->boolean('custom_surcharge_tax4')->default(false); - $t->decimal('exchange_rate', 16, 4); + $t->decimal('exchange_rate', 13, 6)->default(1); $t->decimal('amount', 16, 4); $t->decimal('balance', 16, 4); $t->decimal('partial', 16, 4)->nullable(); @@ -559,7 +559,7 @@ class CreateUsersTable extends Migration $t->boolean('custom_surcharge_tax3')->default(false); $t->boolean('custom_surcharge_tax4')->default(false); - $t->decimal('exchange_rate', 16, 4); + $t->decimal('exchange_rate', 13, 6)->default(1); $t->decimal('amount', 16, 4); $t->decimal('balance', 16, 4); $t->decimal('partial', 16, 4)->nullable(); @@ -803,7 +803,7 @@ class CreateUsersTable extends Migration $t->boolean('custom_surcharge_tax3')->default(false); $t->boolean('custom_surcharge_tax4')->default(false); - $t->decimal('exchange_rate', 16, 4); + $t->decimal('exchange_rate', 13, 6)->default(1); $t->decimal('amount', 16, 4); $t->decimal('balance', 16, 4); $t->decimal('partial', 16, 4)->nullable(); @@ -964,7 +964,7 @@ class CreateUsersTable extends Migration $t->softDeletes('deleted_at', 6); $t->boolean('is_deleted')->default(false); $t->boolean('is_manual')->default(false); - $t->decimal('exchange_rate', 16, 6)->default(1); + $t->decimal('exchange_rate', 13, 6)->default(1); $t->unsignedInteger('currency_id'); $t->unsignedInteger('exchange_currency_id'); @@ -1297,7 +1297,7 @@ class CreateUsersTable extends Migration $table->boolean('is_deleted')->default(false); $table->decimal('amount', 13, 2); $table->decimal('foreign_amount', 13, 2); - $table->decimal('exchange_rate', 13, 4); + $table->decimal('exchange_rate', 13, 6)->default(1); $table->string('tax_name1')->nullable(); $table->decimal('tax_rate1', 13, 3)->default(0); $table->string('tax_name2')->nullable(); From 4c3f466d58dbb27a44de43ff4fc589ad0a2d4b1d Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 24 Aug 2020 20:28:47 +1000 Subject: [PATCH 6/7] Tests for system log routes --- app/Http/Controllers/SystemLogController.php | 2 +- app/Models/SystemLog.php | 30 ++++- ...40557_add_is_public_to_documents_table.php | 5 + tests/Feature/SystemLogApiTest.php | 127 ++++++++++++++++++ 4 files changed, 159 insertions(+), 5 deletions(-) create mode 100644 tests/Feature/SystemLogApiTest.php diff --git a/app/Http/Controllers/SystemLogController.php b/app/Http/Controllers/SystemLogController.php index ae4e83ae461b..1b7a0b5e6ff9 100644 --- a/app/Http/Controllers/SystemLogController.php +++ b/app/Http/Controllers/SystemLogController.php @@ -8,7 +8,7 @@ use App\Transformers\SystemLogTransformer; use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; -class SystemLogController extends Controller +class SystemLogController extends BaseController { use MakesHash; diff --git a/app/Models/SystemLog.php b/app/Models/SystemLog.php index 490a4c104b17..25d082952709 100644 --- a/app/Models/SystemLog.php +++ b/app/Models/SystemLog.php @@ -11,10 +11,26 @@ namespace App\Models; +use App\Models\Filterable; +use App\Utils\Traits\MakesHash; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; class SystemLog extends Model { + use Filterable; + use SoftDeletes; + use MakesHash; + + protected $casts = [ + 'updated_at' => 'timestamp', + 'created_at' => 'timestamp', + 'deleted_at' => 'timestamp', + 'log' => 'array' + ]; + + protected $dateFormat = 'Y-m-d H:i:s.u'; + /* Category IDs */ const CATEGORY_GATEWAY_RESPONSE = 1; const CATEGORY_MAIL = 2; @@ -51,10 +67,6 @@ class SystemLog extends Model 'type_id', ]; - protected $casts = [ - 'log' => 'array' - ]; - public function resolveRouteBinding($value) { if (is_numeric($value)) { @@ -64,4 +76,14 @@ class SystemLog extends Model return $this ->where('id', $this->decodePrimaryKey($value))->firstOrFail(); } + + /* + V2 type of scope + */ + public function scopeCompany($query) + { + $query->where('company_id', auth()->user()->companyId()); + + return $query; + } } diff --git a/database/migrations/2020_08_18_140557_add_is_public_to_documents_table.php b/database/migrations/2020_08_18_140557_add_is_public_to_documents_table.php index 1079ab6c688b..784db3ae356f 100644 --- a/database/migrations/2020_08_18_140557_add_is_public_to_documents_table.php +++ b/database/migrations/2020_08_18_140557_add_is_public_to_documents_table.php @@ -31,6 +31,11 @@ class AddIsPublicToDocumentsTable extends Migration $table->text('meta')->nullable(); }); + Schema::table('system_logs', function (Blueprint $table) { + $table->softDeletes('deleted_at', 6); + }); + + } /** diff --git a/tests/Feature/SystemLogApiTest.php b/tests/Feature/SystemLogApiTest.php new file mode 100644 index 000000000000..4eeada3ed084 --- /dev/null +++ b/tests/Feature/SystemLogApiTest.php @@ -0,0 +1,127 @@ +makeTestData(); + + } + + + public function testSystemLogRoutes() + { + + $sl = [ + 'client_id' => $this->client->id, + 'company_id' => $this->company->id, + 'user_id' => $this->client->user_id, + 'log' => 'thelog', + 'category_id' => 1, + 'event_id' => 1, + 'type_id' => 1, + ]; + + SystemLog::create($sl); + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token + ])->get('/api/v1/system_logs'); + + + $response->assertStatus(200); + + $arr = $response->json(); + + $this->assertTrue(count($arr['data']) >=1); + + $hashed_id = $arr['data'][0]['id']; + + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token + ])->get('/api/v1/system_logs/' . $hashed_id); + + $response->assertStatus(200); + + $arr = $response->json(); + + $this->assertEquals($hashed_id, $arr['data']['id']); + + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token + ])->put('/api/v1/system_logs/' . $hashed_id, $sl)->assertStatus(400); + + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token + ])->delete('/api/v1/system_logs/' . $hashed_id)->assertStatus(400); + } + + public function testStoreRouteFails() + { + + $sl = [ + 'client_id' => $this->client->id, + 'company_id' => $this->company->id, + 'user_id' => $this->client->user_id, + 'log' => 'thelog', + 'category_id' => 1, + 'event_id' => 1, + 'type_id' => 1, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token + ])->post('/api/v1/system_logs', $sl)->assertStatus(400); + + } + + public function testCreateRouteFails() + { + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token + ])->get('/api/v1/system_logs/create')->assertStatus(400); + + } + +} From e6de7c96615c25070dfae47f12cbab1f93ca3703 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 24 Aug 2020 21:16:35 +1000 Subject: [PATCH 7/7] Logging for webhook handler --- app/Jobs/Util/WebhookHandler.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Jobs/Util/WebhookHandler.php b/app/Jobs/Util/WebhookHandler.php index e691a0773a72..a8f5f4795fcc 100644 --- a/app/Jobs/Util/WebhookHandler.php +++ b/app/Jobs/Util/WebhookHandler.php @@ -64,7 +64,6 @@ class WebhookHandler implements ShouldQueue // generate JSON data $manager = new Manager(); $manager->setSerializer(new ArraySerializer()); - // $manager->parseIncludes($include); $transformer = new $this->getTransformerClassName(); @@ -101,7 +100,8 @@ class WebhookHandler implements ShouldQueue public function failed($exception) { - $exception->getMessage(); - // etc... + + info(print_r($exception->getMessage(),1)); + } }