asset edit functionality
parent
7804991c4e
commit
9911f60b85
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Assets;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Asset;
|
||||
use App\Transformers\Assets\AssetTransformer;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AssetsController extends Controller {
|
||||
protected Asset $model;
|
||||
|
||||
public function __construct(Asset $model) {
|
||||
$this->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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue