diff --git a/app/Http/Controllers/Api/Assets/AssetsController.php b/app/Http/Controllers/Api/Assets/AssetsController.php new file mode 100644 index 0000000..e494423 --- /dev/null +++ b/app/Http/Controllers/Api/Assets/AssetsController.php @@ -0,0 +1,31 @@ +model = $model; + } + + + public function update(Request $request, $uuid): JsonResponse { + $model = $this->model->byUuid($uuid)->firstOrFail(); + $model->update($request->only('name', 'description')); + return fractal($model, new AssetTransformer())->respond(); + } + + public function destroy(Request $request, $uuid): JsonResponse { + $model = $this->model->byUuid($uuid)->firstOrFail(); + $model->delete(); + return response()->json(null, 204); + } + +} diff --git a/app/Models/Asset.php b/app/Models/Asset.php index 8c9a03d..1a75c2c 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -8,64 +8,38 @@ use App\Support\RelationValuesTrait; use App\Support\UuidScopeTrait; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; -/** - * Class Asset. - */ class Asset extends Model { use UuidScopeTrait, HasFactory, RelationValuesTrait; - /** - * @var array - */ protected $guarded = ['id']; - public function user() - { + public function user(): BelongsTo { return $this->belongsTo(User::class); } - public function links() - { - $result = [ + + public function getIsImageAttribute(): bool { + return $this->type === 'image'; + } + + + public function links(): array { + return [ 'open' => asset("/api/assets/{$this->uuid}"), 'download' => asset("/api/assets/{$this->uuid}/download"), - 'direct' => asset("storage/{$this->path}") - ]; - if ($this->type == 'image') { - $result['full'] = asset("/api/assets/{$this->uuid}/render"); - $result['thumb'] = asset("/api/assets/{$this->uuid}/render?width=300"); - } - return $result; - } - - public function coordinates() - { - return [ - 'latitude' => $this->latitude, - 'longitude' => $this->longitude, - 'accuracy' => $this->accuracy + 'direct' => asset("storage/{$this->path}"), + 'full' => $this->isImage ? asset("/api/assets/{$this->uuid}/render") : null, + 'thumb' => $this->isImage ? asset("/api/assets/{$this->uuid}/render?width=300") : null ]; } - public function output() - { - return [ - 'id' => $this->uuid, - 'type' => $this->type, - 'mime' => $this->mime, - 'filename' => $this->filename, - 'extension' => $this->extension, - 'links' => $this->links(), - 'user' => $this->user->output(), - 'coordinates' => $this->coordinates(), - 'created_at' => $this->created_at->toIso8601String(), - 'created_by' => $this->user->name, - ]; + public function coordinates(): array { + return ['latitude' => $this->latitude, 'longitude' => $this->longitude, 'accuracy' => $this->accuracy]; } - public function saveValue($fieldName, $object) - { + public function saveValue($fieldName, $object) { $field = Field::byUuidOrName($fieldName)->first(); $relationValue = RelationValue::create(); $relationValue->set($this); diff --git a/app/Transformers/Assets/AssetTransformer.php b/app/Transformers/Assets/AssetTransformer.php index 338e989..035f8c8 100644 --- a/app/Transformers/Assets/AssetTransformer.php +++ b/app/Transformers/Assets/AssetTransformer.php @@ -23,6 +23,7 @@ class AssetTransformer extends TransformerAbstract { 'path' => $model->path, 'mime' => $model->mime, 'name' => $model->name, + 'description' => $model->description, 'filename' => $model->filename, 'extension' => $model->extension, 'links' => $model->links(), diff --git a/database/migrations/2017_08_08_193843_create_assets_table.php b/database/migrations/2017_08_08_193843_create_assets_table.php index aaa8d3f..ded1c74 100644 --- a/database/migrations/2017_08_08_193843_create_assets_table.php +++ b/database/migrations/2017_08_08_193843_create_assets_table.php @@ -11,13 +11,13 @@ class CreateAssetsTable extends Migration * * @return void */ - public function up() - { + public function up() { Schema::create('assets', function (Blueprint $table) { $table->id(); $table->char('uuid', 36)->index()->unique(); $table->bigInteger('user_id')->unsigned()->index()->nullable(); $table->string('name')->index()->nullable(); + $table->text('description')->nullable(); $table->string('type', 45)->index()->nullable(); $table->string('path')->nullable(); $table->string('mime')->nullable(); @@ -28,7 +28,7 @@ class CreateAssetsTable extends Migration $table->float('accuracy')->nullable(); $table->timestamps(); $table->softDeletes(); - $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + //$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); }); } diff --git a/routes/api.php b/routes/api.php index 09bb448..3ec655b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -15,6 +15,8 @@ Route::group(['prefix' => 'assets'], function() { Route::get('/{uuid}/download', 'Api\Assets\RenderFileController@download'); Route::group(['middleware' => ['auth:api']], function() { Route::post('/', 'Api\Assets\UploadFileController@store'); + Route::put('/{uuid}', 'Api\Assets\AssetsController@update'); + Route::delete('/uuid', 'Api\Assets\AssetsController@destroy'); }); });