update .
This commit is contained in:
parent
c333e3bc38
commit
c277f8b310
@ -20,13 +20,12 @@ class AuthController extends Controller
|
||||
public function index(Request $request)
|
||||
{
|
||||
|
||||
|
||||
// test
|
||||
$handle = new \App\Jobs\Remote\PushHost();
|
||||
$handle->handle();
|
||||
// $handle = new \App\Jobs\Remote\PushHost();
|
||||
// $handle->handle();
|
||||
|
||||
$handle = new \App\Jobs\Remote\PushWorkOrder();
|
||||
$handle->handle();
|
||||
// $handle = new \App\Jobs\Remote\PushWorkOrder();
|
||||
// $handle->handle();
|
||||
|
||||
// if logged in
|
||||
if (Auth::check()) {
|
||||
|
@ -87,6 +87,8 @@ public function destroy(Host $host)
|
||||
//
|
||||
$host->delete();
|
||||
|
||||
//
|
||||
|
||||
return $this->deleted($host);
|
||||
}
|
||||
}
|
||||
|
@ -2,35 +2,30 @@
|
||||
|
||||
namespace App\Http\Controllers\Remote\Host;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use App\Models\Host;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
use App\Models\User\Task;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class TaskController extends Controller
|
||||
{
|
||||
public $user_id, $host_id;
|
||||
|
||||
|
||||
public function __construct(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'host_id' => 'sometimes|integer|exists:hosts,id',
|
||||
// 'user_id' => 'integer|exists:users,id',
|
||||
]);
|
||||
|
||||
// $this->user_id = $request->user_id;
|
||||
$this->host_id = $request->host_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
public function index(Request $request)
|
||||
{
|
||||
//
|
||||
// $this->assignId($request);
|
||||
|
||||
// return $this->getTasks();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -43,80 +38,34 @@ public function store(Request $request)
|
||||
{
|
||||
//
|
||||
$request->validate([
|
||||
'host_id' => 'required|exists:hosts,id',
|
||||
'title' => 'required|max:255',
|
||||
'progress' => 'sometimes|integer|max:100',
|
||||
'status' => 'required|in:pending,processing,need_operation,done,success,failed,error,canceled',
|
||||
]);
|
||||
|
||||
return $this->created($this->pushTask([
|
||||
'title' => $request->title,
|
||||
'progress' => $request->progress,
|
||||
'status' => $request->status,
|
||||
]));
|
||||
$task = Task::create($request->all());
|
||||
|
||||
return $this->success($task);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @param Task $task
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
public function update(Request $request, Task $task)
|
||||
{
|
||||
//
|
||||
$request->validate([
|
||||
'id' => 'max:40|required',
|
||||
'progress' => 'sometimes|integer|max:100',
|
||||
'status' => 'sometimes|in:pending,processing,need_operation,done,success,failed,error,canceled',
|
||||
]);
|
||||
|
||||
$tasks = $this->getTasks();
|
||||
$task->update($request->all());
|
||||
|
||||
// check if task exists
|
||||
if (!isset($tasks[$id])) {
|
||||
// create task
|
||||
$task = [
|
||||
'title' => $request->title,
|
||||
'progress' => 0,
|
||||
'status' => $request->status,
|
||||
];
|
||||
$this->pushTask($task, $request->id);
|
||||
} else {
|
||||
$task = $tasks[$id];
|
||||
}
|
||||
|
||||
// patch task
|
||||
$task = array_merge($task, $request->only(['title', 'progress', 'status']));
|
||||
|
||||
// update task
|
||||
$this->pushTask($task, $request->id);
|
||||
}
|
||||
|
||||
public function getTasks()
|
||||
{
|
||||
$cache_key = 'user_tasks_' . $this->user_id;
|
||||
return Cache::get($cache_key, []);
|
||||
}
|
||||
|
||||
public function pushTask($task, $id = null)
|
||||
{
|
||||
$cache_key = 'user_tasks_' . $this->user_id;
|
||||
$data = [
|
||||
// 'user_id' => $this->user_id,
|
||||
'done_at' => null,
|
||||
'host_id' => $this->host_id
|
||||
];
|
||||
|
||||
if ($id === null) {
|
||||
$data['id'] = Uuid::uuid6()->toString();
|
||||
} else {
|
||||
$data['id'] = $id;
|
||||
}
|
||||
|
||||
$task = array_merge($task, $data);
|
||||
|
||||
$tasks = $this->getTasks();
|
||||
$tasks[] = $task;
|
||||
|
||||
Cache::put($cache_key, $tasks, 600);
|
||||
return $task;
|
||||
return $this->updated($task);
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Module\Module;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class HostController extends Controller
|
||||
{
|
||||
@ -36,6 +37,33 @@ public function store(Request $request, Module $module)
|
||||
'configuration' => 'required|json',
|
||||
]);
|
||||
|
||||
$data = [
|
||||
'name' => $request->name,
|
||||
'module_id' => $module->id,
|
||||
'configuration' => $request->configuration ?? [],
|
||||
];
|
||||
|
||||
|
||||
// if (!$data['confirm']) {
|
||||
// $data['confirm'] = false;
|
||||
|
||||
// }
|
||||
|
||||
// $calc = $module->remotePost('/hosts', ['data' => $data]);
|
||||
// $data['price'] = $calc[0]['data']['price'];
|
||||
|
||||
$host = Host::create($data);
|
||||
return $this->created($host);
|
||||
|
||||
// if ($request->confirm) {
|
||||
// $host = Host::create($data);
|
||||
// return $this->created($host);
|
||||
// } else {
|
||||
// // return $this->apiResponse($calc[0]['data'], $calc[1]);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// // post to module
|
||||
// $host = $module->hosts()->create([
|
||||
// 'name' => $request->name,
|
||||
@ -51,7 +79,6 @@ public function store(Request $request, Module $module)
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
68
app/Http/Controllers/User/TaskController.php
Normal file
68
app/Http/Controllers/User/TaskController.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use App\Models\User\Task;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class TaskController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
//
|
||||
$tasks = Task::user()->get();
|
||||
|
||||
return $this->success($tasks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
@ -44,6 +44,11 @@ public function handle()
|
||||
$host->status = 'error';
|
||||
}
|
||||
|
||||
// dd($response);
|
||||
$response_json = $response->json();
|
||||
|
||||
$host->price = $response_json['data']['price'];
|
||||
|
||||
$host->save();
|
||||
|
||||
}
|
||||
|
@ -7,12 +7,12 @@
|
||||
use App\Models\WorkOrder\WorkOrder;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
// use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
|
||||
class Host extends Model
|
||||
{
|
||||
use HasFactory, SoftDeletes;
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'hosts';
|
||||
|
||||
@ -125,6 +125,9 @@ protected static function boot()
|
||||
throw_if(!User::find($model->user_id), CommonException::class, 'user is not exists');
|
||||
}
|
||||
|
||||
// set price to 0
|
||||
$model->price = 0;
|
||||
|
||||
// $model->load('module');
|
||||
// $model->module->load(['provider', 'module']);
|
||||
|
||||
@ -139,7 +142,7 @@ protected static function boot()
|
||||
|
||||
// when delete
|
||||
static::deleting(function ($model) {
|
||||
return false;
|
||||
// return false;
|
||||
|
||||
dispatch(new \App\Jobs\Remote\Host($model, 'delete'));
|
||||
});
|
||||
|
@ -48,6 +48,17 @@ public function remote($func, $requests)
|
||||
return [$json, $status];
|
||||
}
|
||||
|
||||
public function remotePost($path = '', $data = [])
|
||||
{
|
||||
$http = Http::remote($this->api_token, $this->url);
|
||||
$response = $http->post($path, $data);
|
||||
|
||||
$json = $response->json();
|
||||
$status = $response->status();
|
||||
|
||||
return [$json, $status];
|
||||
}
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
@ -2,10 +2,66 @@
|
||||
|
||||
namespace App\Models\User;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use App\Models\Host;
|
||||
use App\Exceptions\CommonException;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
|
||||
class Task extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = [
|
||||
'host_id',
|
||||
'title',
|
||||
'progress',
|
||||
'status',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'id' => 'string',
|
||||
'progress' => 'integer',
|
||||
];
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
public function scopeUser($query) {
|
||||
return $query->where('user_id', auth()->id());
|
||||
}
|
||||
|
||||
|
||||
public function host() {
|
||||
return $this->belongsTo(Host::class);
|
||||
}
|
||||
|
||||
// before create
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
static::creating(function ($model) {
|
||||
// id 为 uuid
|
||||
$model->id = Uuid::uuid4()->toString();
|
||||
|
||||
// host_id 和 user_id 至少存在一个
|
||||
if (!$model->host_id && !$model->user_id) {
|
||||
throw new CommonException('host_id 和 user_id 至少存在一个');
|
||||
}
|
||||
|
||||
// if host_id
|
||||
if ($model->host_id) {
|
||||
$model->load('host');
|
||||
// dd($model);
|
||||
|
||||
|
||||
// dd($model->host_id);
|
||||
// $host = Host::where('id', $model->host_id)->first();
|
||||
|
||||
// dd($host);
|
||||
|
||||
$model->user_id = $model->host->user_id;
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::dropIfExists('tasks');
|
||||
|
||||
Schema::create(
|
||||
'tasks',
|
||||
function (Blueprint $table) {
|
||||
$table->uuid('id')->primary()->unique();
|
||||
|
||||
$table->string('title');
|
||||
|
||||
// progress (max 100)
|
||||
$table->integer('progress')->default(0);
|
||||
|
||||
// status
|
||||
$table->enum('status', ['pending', 'done', 'success', 'failed', 'error', 'cancelled', 'processing', 'need_operation'])->index();
|
||||
|
||||
// user id
|
||||
$table->unsignedBigInteger('user_id')->index();
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
|
||||
// host id
|
||||
$table->unsignedBigInteger('host_id')->index();
|
||||
$table->foreign('host_id')->references('id')->on('hosts')->onDelete('cascade');
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
Schema::dropIfExists('tasks');
|
||||
}
|
||||
};
|
@ -3,6 +3,7 @@
|
||||
use App\Http\Controllers\User;
|
||||
use App\Http\Controllers\Remote;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\User\TaskController;
|
||||
|
||||
Route::name('client.')->middleware(['api', 'auth:sanctum'])->group(function () {
|
||||
// Route::apiResource('users', Controllers\User\UserController::class);
|
||||
@ -11,6 +12,10 @@
|
||||
|
||||
Route::apiResource('drops', User\DropController::class);
|
||||
|
||||
|
||||
|
||||
Route::get('tasks', [TaskController::class, 'index']);
|
||||
|
||||
Route::apiResource('work-orders', User\WorkOrder\WorkOrderController::class);
|
||||
Route::apiResource('work-orders.replies', User\WorkOrder\ReplyController::class);
|
||||
|
||||
|
@ -7,8 +7,9 @@
|
||||
Route::apiResource('modules', Remote\ModuleController::class)->only(['index']);
|
||||
Route::apiResource('servers', Remote\ServerController::class);
|
||||
Route::apiResource('hosts', Remote\Host\HostController::class);
|
||||
// Route::patch('hosts/{host}', [Remote\Host\DropController::class, 'update']);
|
||||
Route::apiResource('hosts.tasks', Remote\Host\TaskController::class);
|
||||
Route::patch('hosts/{host}', [Remote\Host\DropController::class, 'update']);
|
||||
// Route::patch('tasks', Remote\Host\TaskController::class);
|
||||
Route::apiResource('tasks', Remote\Host\TaskController::class);
|
||||
|
||||
Route::apiResource('work-orders', Remote\WorkOrder\WorkOrderController::class);
|
||||
Route::apiResource('work-orders.replies', Remote\WorkOrder\ReplyController::class);
|
||||
|
Loading…
Reference in New Issue
Block a user