From 8affdbe955b3452bef766fd1c09ea90a1650a6aa Mon Sep 17 00:00:00 2001 From: Michal Feher Date: Fri, 10 Mar 2023 10:02:25 +0100 Subject: [PATCH] no message --- be/app/Http/Controllers/BlockerController.php | 77 +++++++++++++++++++ be/app/Http/Resources/BlockerResource.php | 27 +++++++ be/app/Models/Blocker.php | 26 +++++++ be/app/Services/Karat/Api.php | 5 +- be/app/Services/Karat/KaratService.php | 48 ++++++++++-- be/app/Services/Karat/Project.php | 8 +- ..._144116_nullable_client_id_in_projects.php | 32 ++++++++ ...023_03_10_080442_create_blockers_table.php | 36 +++++++++ be/routes/api.php | 10 +++ 9 files changed, 257 insertions(+), 12 deletions(-) create mode 100644 be/app/Http/Controllers/BlockerController.php create mode 100644 be/app/Http/Resources/BlockerResource.php create mode 100644 be/app/Models/Blocker.php create mode 100644 be/database/migrations/2023_03_06_144116_nullable_client_id_in_projects.php create mode 100644 be/database/migrations/2023_03_10_080442_create_blockers_table.php diff --git a/be/app/Http/Controllers/BlockerController.php b/be/app/Http/Controllers/BlockerController.php new file mode 100644 index 0000000..fa967ad --- /dev/null +++ b/be/app/Http/Controllers/BlockerController.php @@ -0,0 +1,77 @@ +all(), [ + 'data.start' => 'required', + 'data.end' => 'required', + 'data.employee_id' => 'required', + 'data.name' => 'required', + ]); + + if ($validator->fails()){ + return response()->json($validator->errors(), 400); + } + + $blocker = Blocker::create([ + 'start' => $request->all()['data']['start'], + 'end' => $request->all()['data']['end'], + 'user_id' => $request->all()['data']['employee_id'], + 'name' => $request->all()['data']['name'], + 'type' => 'adhoc' + ]); + + return response()->json($blocker, 201); + } + + public function update($id, Request $request) + { + $validator = Validator::make($request->all(), [ + 'data.start' => 'required', + 'data.end' => 'required', + 'data.employee_id' => 'required', + 'data.name' => 'required', + ]); + + if ($validator->fails()){ + return response()->json($validator->errors(), 400); + } + + // upratanie requestu, pretoze frontend pouziva inu nomenklaturu fieldov ako appka + $data['data'] = $request->all()['data']; + $data['data']['user_id'] = $request->all()['data']['employee_id']; + + $request->merge($data); + + $blocker = Blocker::find($id); + + $blocker->update($request->all()['data']); + + return response()->json([ + 'message' => 'Blocker updated successfully', + 'blocker' => $blocker + ]); + } + + + public function delete($id) + { + $blocker = Blocker::find($id); + $blocker->delete(); + + return response()->json([ + 'message' => 'Blocker deleted successfully', + 'team' => $blocker + ]); + } + +} diff --git a/be/app/Http/Resources/BlockerResource.php b/be/app/Http/Resources/BlockerResource.php new file mode 100644 index 0000000..2c6c986 --- /dev/null +++ b/be/app/Http/Resources/BlockerResource.php @@ -0,0 +1,27 @@ + $this->id, + 'name' => $this->name, + 'employee' => UserResource::make($this->user), + 'start' => $this->start, + 'end' => $this->end, + 'type' => $this->type, + 'color' => $this->color, + ]; + } +} diff --git a/be/app/Models/Blocker.php b/be/app/Models/Blocker.php new file mode 100644 index 0000000..212fe7a --- /dev/null +++ b/be/app/Models/Blocker.php @@ -0,0 +1,26 @@ +belongsTo(User::class); + } + + public function getColorAttribute() + { + // TODO - zistit ci sa maju lisit farby + return $this->type == 'adhoc' ? '#B00020' : '#B00020'; + } +} diff --git a/be/app/Services/Karat/Api.php b/be/app/Services/Karat/Api.php index 91c57c9..a976d18 100644 --- a/be/app/Services/Karat/Api.php +++ b/be/app/Services/Karat/Api.php @@ -29,7 +29,8 @@ class Api private static function doRequest($command) { - $response = Http::withOptions([ + $response = Http::timeout(60) + ->withOptions([ 'debug' => true, 'verify' => false, ])->withBasicAuth(self::$username, self::$password) @@ -52,6 +53,6 @@ class Api public static function getProjects() { - return self::doRequest('TM_GET_CLIENTS')['projects']; + return self::doRequest('TM_GET_PROJECTS')['projects']; } } diff --git a/be/app/Services/Karat/KaratService.php b/be/app/Services/Karat/KaratService.php index fe024aa..0174b51 100644 --- a/be/app/Services/Karat/KaratService.php +++ b/be/app/Services/Karat/KaratService.php @@ -35,8 +35,8 @@ class KaratService })->map(function ($item) { $arrayToInsert = $item->toArray(); - $arrayToInsert['created_at'] = Carbon::now(); - $arrayToInsert['updated_at'] = Carbon::now(); + $arrayToInsert['created_at'] = Carbon::now()->toDateTimeString(); + $arrayToInsert['updated_at'] = Carbon::now()->toDateTimeString(); return $arrayToInsert; }); @@ -71,8 +71,8 @@ class KaratService })->map(function ($item) { $arrayToInsert = $item->toArray(); - $arrayToInsert['created_at'] = Carbon::now(); - $arrayToInsert['updated_at'] = Carbon::now(); + $arrayToInsert['created_at'] = Carbon::now()->toDateTimeString(); + $arrayToInsert['updated_at'] = Carbon::now()->toDateTimeString(); return $arrayToInsert; }); @@ -82,19 +82,55 @@ class KaratService private function removeClientsThatAreNotInKaratAnymore( Collection $karatClients, Collection $dbClients ) { - dd('finish me'); + $codesInDbThatAreNotInKaratAnymore = $dbClients->pluck('code' )->diff( $karatClients->pluck('code')); + + \App\Models\Client::whereIn('code', $codesInDbThatAreNotInKaratAnymore)->delete(); } public function syncProjects() { $karatProjects = Project::all(); + + $array = []; + foreach ( $karatProjects as $project ) { + $array[$project->code][] = $project->code; + } + + foreach ( $array as $key => $item ) { + if ( count($item) > 1 ) echo ($key) . PHP_EOL; + } + + dd('here'); + $dbProjects = \App\Models\Project::all(); - $this->insertProjectsFromKarat($karatProjects, $dbProjects); + $this->insertProjectsFromKarat($karatProjects->take(200), $dbProjects); + dd('here'); $this->removeProjectsThatAreNotInKaratAnymore($karatProjects, $dbProjects); } + private function insertProjectsFromKarat( Collection $karatProjects, Collection $dbProjects ) + { + $projectsToSkip = $dbProjects->pluck('code' )->intersect( $karatProjects->pluck('code')); + + $karatProjectsToInsert = $karatProjects->reject(function ($item) use ($projectsToSkip) { + return $projectsToSkip->contains($item->code); + })->map(function ($item) { + $arrayToInsert = $item->toArray(); + + $dbClient = \App\Models\Client::where('code', $item->client_id)->first(); + + $arrayToInsert['created_at'] = Carbon::now()->toDateTimeString(); + $arrayToInsert['updated_at'] = Carbon::now()->toDateTimeString(); + $arrayToInsert['client_id'] = ($dbClient) ? $dbClient->id : null; +// $arrayToInsert['client_id'] = 12; + + return $arrayToInsert; + }); + + \App\Models\Project::insert($karatProjectsToInsert->toArray()); + } } diff --git a/be/app/Services/Karat/Project.php b/be/app/Services/Karat/Project.php index eae095d..f206ada 100644 --- a/be/app/Services/Karat/Project.php +++ b/be/app/Services/Karat/Project.php @@ -5,12 +5,12 @@ namespace App\Services\Karat; class Project extends Api { public $code; public $name; - public $client; + public $client_id; - public function __construct($code, $name, $client) { + public function __construct($code, $name, $client_id) { $this->code = $code; $this->name = $name; - $this->client = $client; + $this->client_id = $client_id; } public static function all() { @@ -25,7 +25,7 @@ class Project extends Api { return [ 'code' => $this->code, 'name' => $this->name, - 'client' => $this->client, + 'client_id' => $this->client_id, ]; } diff --git a/be/database/migrations/2023_03_06_144116_nullable_client_id_in_projects.php b/be/database/migrations/2023_03_06_144116_nullable_client_id_in_projects.php new file mode 100644 index 0000000..e5f44ce --- /dev/null +++ b/be/database/migrations/2023_03_06_144116_nullable_client_id_in_projects.php @@ -0,0 +1,32 @@ +foreignIdFor(\App\Models\Client::class)->nullable(-1)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('projects', function (Blueprint $table) { + // + }); + } +}; diff --git a/be/database/migrations/2023_03_10_080442_create_blockers_table.php b/be/database/migrations/2023_03_10_080442_create_blockers_table.php new file mode 100644 index 0000000..c44e170 --- /dev/null +++ b/be/database/migrations/2023_03_10_080442_create_blockers_table.php @@ -0,0 +1,36 @@ +id(); + $table->foreignIdFor(\App\Models\User::class); + $table->string('name'); + $table->string('type'); + $table->timestamp( 'start'); + $table->timestamp( 'end'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('blockers'); + } +}; diff --git a/be/routes/api.php b/be/routes/api.php index 0e6fcd4..a800a99 100644 --- a/be/routes/api.php +++ b/be/routes/api.php @@ -1,9 +1,11 @@ group(function () { Route::get('/v1/subtasks',SubTaskController::class . '@index'); Route::delete('/v1/subtasks/{id}', SubTaskController::class . '@delete'); + + Route::get('/v1/blockers/{id}', function ($id) { + return new BlockerResource( Blocker::find($id)); + }); + Route::post('/v1/blockers', BlockerController::class . '@store'); + Route::put('/v1/blockers/{id}', BlockerController::class . '@update'); + Route::delete('/v1/blockers/{id}', BlockerController::class . '@delete'); }); Route::post('/v1/tokens/create', function (Request $request) {