增加 Drops

This commit is contained in:
iVampireSP.com 2022-08-12 16:51:55 +08:00
parent 75b5803285
commit a86dd0f956
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
11 changed files with 428 additions and 11 deletions

View File

@ -0,0 +1,64 @@
<?php
namespace App\Http\Controllers\Admin\Product;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* 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)
{
//
}
}

View File

@ -0,0 +1,84 @@
<?php
namespace App\Http\Controllers\Admin\User;
use App\Http\Controllers\Controller;
use App\Models\User\Drop;
use Illuminate\Http\Request;
class DropController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Drop $drop)
{
$drop = $drop->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)
{
//
}
}

View File

@ -0,0 +1,77 @@
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\User\Drop;
use Illuminate\Http\Request;
class DropController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Drop $drop)
{
$drop = $drop->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)
{
//
}
}

50
app/Models/User/Drop.php Normal file
View File

@ -0,0 +1,50 @@
<?php
namespace App\Models\User;
use App\Models\User;
use App\Helpers\Lock;
use Illuminate\Support\Facades\Cache;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Drop extends Model
{
use HasFactory, Lock;
protected $fillable = [
'payment', 'amount', 'user_id', 'type'
];
// user
public function user()
{
return $this->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();
});
});
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models\User;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Transcation extends Model
{
use HasFactory;
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\Policies\User;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class Drop
{
use HandlesAuthorization;
/**
* Create a new policy instance.
*
* @return void
*/
public function __construct()
{
//
}
// show
public function show(User $user, Drop $drop)
{
// if not admin guard and not the same user
if (!$user->isAdmin() && $user->is($drop)) {
return false;
}
return true;
}
}

View File

@ -0,0 +1,50 @@
<?php
use App\Models\User;
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::create('drops', function (Blueprint $table) {
$table->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');
}
};

View File

@ -0,0 +1,46 @@
<?php
use App\Models\User\Drop;
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::create('transcations', function (Blueprint $table) {
$table->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');
}
};

View File

@ -13,9 +13,9 @@
*/ */
public function up() public function up()
{ {
Schema::create('products', function (Blueprint $table) { Schema::table('drops', function (Blueprint $table) {
$table->id(); //
$table->timestamps(); $table->string('type')->index()->after('status');
}); });
} }
@ -26,6 +26,8 @@ public function up()
*/ */
public function down() public function down()
{ {
Schema::dropIfExists('products'); Schema::table('drops', function (Blueprint $table) {
//
});
} }
}; };

View File

@ -7,6 +7,10 @@
Route::apiResource('admins', Admin\Admin\AdminController::class); Route::apiResource('admins', Admin\Admin\AdminController::class);
Route::apiResource('users', Admin\User\UserController::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']); // Route::resource('users.fields', v1\User\FieldsController::class)->only(['index']);

View File

@ -1,15 +1,13 @@
<?php <?php
use App\Http\Controllers\Admin; use App\Http\Controllers;
use App\Http\Controllers\Admin\User\DropController;
use App\Models\Admin\Admin;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
Route::name('client.')->middleware(['api'])->group(function () { Route::name('client.')->middleware(['api'])->group(function () {
Route::apiResource('users', Admin\User\UserController::class); // Route::apiResource('users', Controllers\User\UserController::class);
// Route::resource('users.fields', v1\User\FieldsController::class)->only(['index']);
// sub routes for clients Route::apiResource('drops', DropController::class);
Route::apiResource('clients', Admin\Client\ClientController::class);
// clients.balance
Route::apiResource('clients.balances', Admin\Client\BalanceController::class);
}); });