From a86dd0f956dd76f265e889489f6aa946b961f31f Mon Sep 17 00:00:00 2001 From: "iVampireSP.com" Date: Fri, 12 Aug 2022 16:51:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20Drops?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Admin/Product/ProductController.php | 64 ++++++++++++++ .../Controllers/Admin/User/DropController.php | 84 +++++++++++++++++++ app/Http/Controllers/User/DropController.php | 77 +++++++++++++++++ app/Models/User/Drop.php | 50 +++++++++++ app/Models/User/Transcation.php | 11 +++ app/Policies/User/Drop.php | 31 +++++++ .../2022_08_12_081236_create_drops_table.php | 50 +++++++++++ ...08_12_082631_create_transcations_table.php | 46 ++++++++++ ..._08_12_084822_add_type_to_drops_table.php} | 10 ++- routes/api/admin.php | 4 + routes/api/client.php | 12 ++- 11 files changed, 428 insertions(+), 11 deletions(-) create mode 100644 app/Http/Controllers/Admin/Product/ProductController.php create mode 100644 app/Http/Controllers/Admin/User/DropController.php create mode 100644 app/Http/Controllers/User/DropController.php create mode 100644 app/Models/User/Drop.php create mode 100644 app/Models/User/Transcation.php create mode 100644 app/Policies/User/Drop.php create mode 100644 database/migrations/2022_08_12_081236_create_drops_table.php create mode 100644 database/migrations/2022_08_12_082631_create_transcations_table.php rename database/migrations/{2022_08_11_102622_create_products_table.php => 2022_08_12_084822_add_type_to_drops_table.php} (64%) diff --git a/app/Http/Controllers/Admin/Product/ProductController.php b/app/Http/Controllers/Admin/Product/ProductController.php new file mode 100644 index 0000000..6c987fe --- /dev/null +++ b/app/Http/Controllers/Admin/Product/ProductController.php @@ -0,0 +1,64 @@ +simplePaginate(10); + return $this->success($drop); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + $request->validate([ + 'amount' => 'integer|required|min:1|max:1000', + ]); + + $data = [ + 'payment' => 'admin', + 'amount' => $request->amount, + 'status' => 1, + 'user_id' => $request->route('user'), + 'type' => 'add', + ]; + + $drop = Drop::create($data); + + return $this->success($drop); + } + + /** + * Display the specified resource. + * + * @param \App\Models\User\Drop $drop + * @return \Illuminate\Http\Response + */ + public function show(Drop $drop) + { + // + $this->authorize('show', $drop); + + return $drop; + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\User\Drop $drop + * @return \Illuminate\Http\Response + */ + public function update(Request $request, Drop $drop) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\User\Drop $drop + * @return \Illuminate\Http\Response + */ + public function destroy(Drop $drop) + { + // + } +} diff --git a/app/Http/Controllers/User/DropController.php b/app/Http/Controllers/User/DropController.php new file mode 100644 index 0000000..f49b53e --- /dev/null +++ b/app/Http/Controllers/User/DropController.php @@ -0,0 +1,77 @@ +simplePaginate(10); + return $this->success($drop); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + $request->validate([ + 'payment' => 'required', + 'amount' => 'integer|required|min:1|max:1000', + ]); + + $drop = Drop::create($request->all()); + + return $this->success($drop); + } + + /** + * Display the specified resource. + * + * @param \App\Models\User\Drop $drop + * @return \Illuminate\Http\Response + */ + public function show(Drop $drop) + { + // + $this->authorize('show', $drop); + + return $drop; + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\User\Drop $drop + * @return \Illuminate\Http\Response + */ + public function update(Request $request, Drop $drop) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\User\Drop $drop + * @return \Illuminate\Http\Response + */ + public function destroy(Drop $drop) + { + // + } +} diff --git a/app/Models/User/Drop.php b/app/Models/User/Drop.php new file mode 100644 index 0000000..5ca2040 --- /dev/null +++ b/app/Models/User/Drop.php @@ -0,0 +1,50 @@ +belongsTo(User::class); + } + + // before create + public static function boot() + { + parent::boot(); + self::creating(function ($drops) { + // if not admin auth guard + if (!auth()->guard('admin')->check()) { + $drops->user_id = auth()->id(); + } + + + $rate = Cache::get('drops_rate', 100); + $drops->total = $drops->amount * $rate; + }); + + // created + self::created(function ($drops) { + $drop = new self(); + $drop->await('user_drops_' . $drops->user_id, function () use ($drops) { + $drops->user->drops += $drops->total; + $drops->user->save(); + }); + }); + } +} diff --git a/app/Models/User/Transcation.php b/app/Models/User/Transcation.php new file mode 100644 index 0000000..415aea6 --- /dev/null +++ b/app/Models/User/Transcation.php @@ -0,0 +1,11 @@ +isAdmin() && $user->is($drop)) { + return false; + } + return true; + } +} diff --git a/database/migrations/2022_08_12_081236_create_drops_table.php b/database/migrations/2022_08_12_081236_create_drops_table.php new file mode 100644 index 0000000..74557e5 --- /dev/null +++ b/database/migrations/2022_08_12_081236_create_drops_table.php @@ -0,0 +1,50 @@ +id(); + + // payment + $table->string('payment')->index(); + + // amount + $table->decimal('amount', 8, 2)->default(0); + + // 汇率 + $table->integer('rate')->default(1); + + // 实际收入 + $table->decimal('total', 8, 2)->default(1); + + $table->boolean('status')->default(0)->index(); + + + $table->foreignIdFor(User::class)->index(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('drops'); + } +}; diff --git a/database/migrations/2022_08_12_082631_create_transcations_table.php b/database/migrations/2022_08_12_082631_create_transcations_table.php new file mode 100644 index 0000000..b5c03d2 --- /dev/null +++ b/database/migrations/2022_08_12_082631_create_transcations_table.php @@ -0,0 +1,46 @@ +id(); + + // remote transaction id + $table->string('remote_id')->index(); + + // drops id + $table->foreignIdFor(Drop::class)->index(); + + // payment + $table->string('payment')->index(); + + // amount + $table->decimal('amount', 8, 2)->default(0); + + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('transcations'); + } +}; diff --git a/database/migrations/2022_08_11_102622_create_products_table.php b/database/migrations/2022_08_12_084822_add_type_to_drops_table.php similarity index 64% rename from database/migrations/2022_08_11_102622_create_products_table.php rename to database/migrations/2022_08_12_084822_add_type_to_drops_table.php index eb7bdda..e2863cc 100644 --- a/database/migrations/2022_08_11_102622_create_products_table.php +++ b/database/migrations/2022_08_12_084822_add_type_to_drops_table.php @@ -13,9 +13,9 @@ */ public function up() { - Schema::create('products', function (Blueprint $table) { - $table->id(); - $table->timestamps(); + Schema::table('drops', function (Blueprint $table) { + // + $table->string('type')->index()->after('status'); }); } @@ -26,6 +26,8 @@ public function up() */ public function down() { - Schema::dropIfExists('products'); + Schema::table('drops', function (Blueprint $table) { + // + }); } }; diff --git a/routes/api/admin.php b/routes/api/admin.php index 1a018ff..f0b02b3 100644 --- a/routes/api/admin.php +++ b/routes/api/admin.php @@ -7,6 +7,10 @@ Route::apiResource('admins', Admin\Admin\AdminController::class); Route::apiResource('users', Admin\User\UserController::class); + Route::apiResource('users.drops', Admin\User\DropController::class); + + Route::apiResource('drops', Admin\User\DropController::class); + // Route::resource('users.fields', v1\User\FieldsController::class)->only(['index']); diff --git a/routes/api/client.php b/routes/api/client.php index e3c62f3..0bc497e 100644 --- a/routes/api/client.php +++ b/routes/api/client.php @@ -1,15 +1,13 @@ middleware(['api'])->group(function () { - Route::apiResource('users', Admin\User\UserController::class); - // Route::resource('users.fields', v1\User\FieldsController::class)->only(['index']); + // Route::apiResource('users', Controllers\User\UserController::class); - // sub routes for clients - Route::apiResource('clients', Admin\Client\ClientController::class); + Route::apiResource('drops', DropController::class); - // clients.balance - Route::apiResource('clients.balances', Admin\Client\BalanceController::class); });