Browse Source

Merge branch 'create-asset-action' into dev

kely 9 months ago
parent
commit
8a00266a7d

+ 10 - 3
app/Http/Controllers/API/AssetController.php

@@ -7,9 +7,13 @@ use App\Http\Requests\API\Asset\CreateOrUpdateRequest;
 use App\Http\Resources\API\AssetReportResource;
 use App\Http\Resources\API\AssetResource;
 use App\Models\Asset;
+use App\Models\Enums\ActionObjectType;
+use App\Models\Enums\ObjectAction;
 use App\Models\File;
 use App\Models\User;
+use App\Repositories\ActionRepository;
 use App\Services\File\ImageUrlService;
+use App\Services\History\ModelChangeDetector;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 
@@ -61,7 +65,7 @@ class AssetController extends Controller
 
         $asset->path = $parentAsset ? $parentAsset?->path . $asset->id . "," : sprintf(",%s,", $asset->id);
         $asset->save();
-
+        ActionRepository::createByAsset($asset,ObjectAction::CREATED);
         return $this->created();
     }
 
@@ -110,8 +114,11 @@ class AssetController extends Controller
         }
 
         $asset->fill($formData);
+        $changes = ModelChangeDetector::detector(ActionObjectType::ASSET, $asset);
         $asset->save();
-
+        ActionRepository::createByAsset(
+            $asset, ObjectAction::EDITED,objectChanges: $changes
+        );
         return $this->noContent();
     }
 
@@ -126,7 +133,7 @@ class AssetController extends Controller
         }
 
         $asset->delete();
-
+        ActionRepository::createByAsset($asset,ObjectAction::DELETED);
         return $this->noContent();
     }
 

+ 2 - 0
app/Models/Enums/ActionObjectType.php

@@ -8,6 +8,7 @@ use App\Models\Plan;
 use App\Models\Project;
 use App\Models\Requirement;
 use App\Models\Task;
+use App\Services\History\Detector\AssetDetector;
 use App\Services\History\Detector\ContainerContentDetector;
 use App\Services\History\Detector\ContainerDetector;
 use App\Services\History\Detector\ProjectDetector;
@@ -66,6 +67,7 @@ enum ActionObjectType: string
     public function detectorClassName(): ?string
     {
         return match ($this) {
+            ActionObjectType::ASSET => AssetDetector::class,
             ActionObjectType::PROJECT => ProjectDetector::class,
             ActionObjectType::REQUIREMENT => RequirementDetector::class,
             ActionObjectType::TASK => TaskDetector::class,

+ 20 - 0
app/Repositories/ActionRepository.php

@@ -4,6 +4,7 @@ namespace App\Repositories;
 
 use App\Events\ObjectActionCreate;
 use App\Models\Action;
+use App\Models\Asset;
 use App\Models\Container;
 use App\Models\Enums\ActionObjectType;
 use App\Models\Enums\ObjectAction;
@@ -128,6 +129,25 @@ class ActionRepository
         );
     }
 
+    public static function createByAsset(
+        Asset  $asset,
+        ObjectAction $action,
+        string       $comment = null,
+        array        $extraFields = [],
+        array        $objectChanges = [],
+    ): \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Builder
+    {
+        return self::create(
+            $asset->id,
+            ActionObjectType::ASSET,
+            $action,
+            null,
+            $comment,
+            $extraFields,
+            $objectChanges,
+        );
+    }
+
     public static function latestDynamic(Project $project)
     {
         $actions = Action::query()

+ 10 - 0
app/Services/History/Converter/AssetGroupConverter.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Services\History\Converter;
+
+use App\Models\AssetGroup;
+
+class AssetGroupConverter extends ModelConverter
+{
+    protected static string $modelClassName = AssetGroup::class;
+}

+ 64 - 0
app/Services/History/Detector/AssetDetector.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace App\Services\History\Detector;
+
+use App\Services\History\Converter\AssetConverter;
+use App\Services\History\Converter\AssetGroupConverter;
+use App\Services\History\Converter\ConverterContact;
+use App\Services\History\Converter\EmailConverter;
+use App\Services\History\Converter\ModelConverter;
+use App\Services\History\Converter\ModelEnumConverter;
+use App\Services\History\Converter\PlanConverter;
+use App\Services\History\Converter\RequirementGroupConverter;
+use App\Services\History\Converter\UserConverter;
+use App\Services\History\Converter\WhitelistConverter;
+
+class AssetDetector extends DetectorAbstract
+{
+    public static function fields(): array
+    {
+        return [
+            'name',
+            'code',
+            'status',
+            'address',
+            'geo_address_code',
+            'latitude',
+            'longitude',
+            'acl',
+            'whitelist',
+            'equity_interest',
+            'developer',
+            'date_completed',
+            'total_floor_area',
+            'contact_person',
+            'contact_phone',
+            'contact_email',
+            'property',
+            'building_type_description',
+        ];
+    }
+
+    public static function diffFields(): array
+    {
+        return [
+            'description',
+        ];
+    }
+
+    public static function converters():array
+    {
+        return [
+            "whitelist" => new WhitelistConverter(),
+            "status" => new ModelEnumConverter("asset.status"),
+            "group_id" => new AssetGroupConverter(),
+        ];
+    }
+
+    public static function arrayFields(): array
+    {
+        return [
+
+        ];
+    }
+}