update .
This commit is contained in:
parent
c333e3bc38
commit
c277f8b310
@ -20,13 +20,12 @@ class AuthController extends Controller
|
|||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
// test
|
// test
|
||||||
$handle = new \App\Jobs\Remote\PushHost();
|
// $handle = new \App\Jobs\Remote\PushHost();
|
||||||
$handle->handle();
|
// $handle->handle();
|
||||||
|
|
||||||
$handle = new \App\Jobs\Remote\PushWorkOrder();
|
// $handle = new \App\Jobs\Remote\PushWorkOrder();
|
||||||
$handle->handle();
|
// $handle->handle();
|
||||||
|
|
||||||
// if logged in
|
// if logged in
|
||||||
if (Auth::check()) {
|
if (Auth::check()) {
|
||||||
|
@ -87,6 +87,8 @@ public function destroy(Host $host)
|
|||||||
//
|
//
|
||||||
$host->delete();
|
$host->delete();
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
return $this->deleted($host);
|
return $this->deleted($host);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,35 +2,30 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers\Remote\Host;
|
namespace App\Http\Controllers\Remote\Host;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Models\Host;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Cache;
|
|
||||||
use Ramsey\Uuid\Uuid;
|
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
|
class TaskController extends Controller
|
||||||
{
|
{
|
||||||
public $user_id, $host_id;
|
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.
|
* Display a listing of the resource.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\Response
|
* @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([
|
$request->validate([
|
||||||
|
'host_id' => 'required|exists:hosts,id',
|
||||||
'title' => 'required|max:255',
|
'title' => 'required|max:255',
|
||||||
'progress' => 'sometimes|integer|max:100',
|
'progress' => 'sometimes|integer|max:100',
|
||||||
'status' => 'required|in:pending,processing,need_operation,done,success,failed,error,canceled',
|
'status' => 'required|in:pending,processing,need_operation,done,success,failed,error,canceled',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$task = Task::create($request->all());
|
||||||
|
|
||||||
return $this->created($this->pushTask([
|
return $this->success($task);
|
||||||
'title' => $request->title,
|
|
||||||
'progress' => $request->progress,
|
|
||||||
'status' => $request->status,
|
|
||||||
]));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the specified resource in storage.
|
* Update the specified resource in storage.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @param int $id
|
* @param Task $task
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\Response
|
||||||
*/
|
*/
|
||||||
public function update(Request $request, $id)
|
public function update(Request $request, Task $task)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
$request->validate([
|
$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
|
return $this->updated($task);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Models\Module\Module;
|
use App\Models\Module\Module;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
class HostController extends Controller
|
class HostController extends Controller
|
||||||
{
|
{
|
||||||
@ -36,6 +37,33 @@ public function store(Request $request, Module $module)
|
|||||||
'configuration' => 'required|json',
|
'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
|
// // post to module
|
||||||
// $host = $module->hosts()->create([
|
// $host = $module->hosts()->create([
|
||||||
// 'name' => $request->name,
|
// 'name' => $request->name,
|
||||||
@ -51,7 +79,6 @@ public function store(Request $request, Module $module)
|
|||||||
*/
|
*/
|
||||||
public function show()
|
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)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
@ -43,6 +43,11 @@ public function handle()
|
|||||||
if (!$response->successful()) {
|
if (!$response->successful()) {
|
||||||
$host->status = 'error';
|
$host->status = 'error';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dd($response);
|
||||||
|
$response_json = $response->json();
|
||||||
|
|
||||||
|
$host->price = $response_json['data']['price'];
|
||||||
|
|
||||||
$host->save();
|
$host->save();
|
||||||
|
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
use App\Models\WorkOrder\WorkOrder;
|
use App\Models\WorkOrder\WorkOrder;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
// use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
|
||||||
class Host extends Model
|
class Host extends Model
|
||||||
{
|
{
|
||||||
use HasFactory, SoftDeletes;
|
use HasFactory;
|
||||||
|
|
||||||
protected $table = 'hosts';
|
protected $table = 'hosts';
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ public function cost($price = null)
|
|||||||
if ($price !== null) {
|
if ($price !== null) {
|
||||||
$this->managed_price = $price;
|
$this->managed_price = $price;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->managed_price) {
|
if ($this->managed_price) {
|
||||||
$this->price = $this->managed_price;
|
$this->price = $this->managed_price;
|
||||||
}
|
}
|
||||||
@ -125,6 +125,9 @@ protected static function boot()
|
|||||||
throw_if(!User::find($model->user_id), CommonException::class, 'user is not exists');
|
throw_if(!User::find($model->user_id), CommonException::class, 'user is not exists');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set price to 0
|
||||||
|
$model->price = 0;
|
||||||
|
|
||||||
// $model->load('module');
|
// $model->load('module');
|
||||||
// $model->module->load(['provider', 'module']);
|
// $model->module->load(['provider', 'module']);
|
||||||
|
|
||||||
@ -139,7 +142,7 @@ protected static function boot()
|
|||||||
|
|
||||||
// when delete
|
// when delete
|
||||||
static::deleting(function ($model) {
|
static::deleting(function ($model) {
|
||||||
return false;
|
// return false;
|
||||||
|
|
||||||
dispatch(new \App\Jobs\Remote\Host($model, 'delete'));
|
dispatch(new \App\Jobs\Remote\Host($model, 'delete'));
|
||||||
});
|
});
|
||||||
|
@ -48,6 +48,17 @@ public function remote($func, $requests)
|
|||||||
return [$json, $status];
|
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()
|
protected static function boot()
|
||||||
{
|
{
|
||||||
parent::boot();
|
parent::boot();
|
||||||
|
@ -2,10 +2,66 @@
|
|||||||
|
|
||||||
namespace App\Models\User;
|
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\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Ramsey\Uuid\Uuid;
|
||||||
|
|
||||||
class Task extends Model
|
class Task extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
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\User;
|
||||||
use App\Http\Controllers\Remote;
|
use App\Http\Controllers\Remote;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
use App\Http\Controllers\User\TaskController;
|
||||||
|
|
||||||
Route::name('client.')->middleware(['api', 'auth:sanctum'])->group(function () {
|
Route::name('client.')->middleware(['api', 'auth:sanctum'])->group(function () {
|
||||||
// Route::apiResource('users', Controllers\User\UserController::class);
|
// Route::apiResource('users', Controllers\User\UserController::class);
|
||||||
@ -11,6 +12,10 @@
|
|||||||
|
|
||||||
Route::apiResource('drops', User\DropController::class);
|
Route::apiResource('drops', User\DropController::class);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Route::get('tasks', [TaskController::class, 'index']);
|
||||||
|
|
||||||
Route::apiResource('work-orders', User\WorkOrder\WorkOrderController::class);
|
Route::apiResource('work-orders', User\WorkOrder\WorkOrderController::class);
|
||||||
Route::apiResource('work-orders.replies', User\WorkOrder\ReplyController::class);
|
Route::apiResource('work-orders.replies', User\WorkOrder\ReplyController::class);
|
||||||
|
|
||||||
|
@ -7,8 +7,9 @@
|
|||||||
Route::apiResource('modules', Remote\ModuleController::class)->only(['index']);
|
Route::apiResource('modules', Remote\ModuleController::class)->only(['index']);
|
||||||
Route::apiResource('servers', Remote\ServerController::class);
|
Route::apiResource('servers', Remote\ServerController::class);
|
||||||
Route::apiResource('hosts', Remote\Host\HostController::class);
|
Route::apiResource('hosts', Remote\Host\HostController::class);
|
||||||
// Route::patch('hosts/{host}', [Remote\Host\DropController::class, 'update']);
|
Route::patch('hosts/{host}', [Remote\Host\DropController::class, 'update']);
|
||||||
Route::apiResource('hosts.tasks', Remote\Host\TaskController::class);
|
// 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', Remote\WorkOrder\WorkOrderController::class);
|
||||||
Route::apiResource('work-orders.replies', Remote\WorkOrder\ReplyController::class);
|
Route::apiResource('work-orders.replies', Remote\WorkOrder\ReplyController::class);
|
||||||
|
Loading…
Reference in New Issue
Block a user