114 lines
3.5 KiB
PHP
114 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\User\Controllers;
|
|
|
|
use App\Enums\BusinessTypeEnum;
|
|
use App\Facades\DataTable\DataTableFacade;
|
|
use App\Facades\File\FileFacade;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\UserGateway;
|
|
use App\Traits\ApiResponse;
|
|
use App\User\Requests\Gateway\StoreRequest;
|
|
use App\User\Requests\Gateway\UpdateRequest;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Laravel\Passport\ClientRepository;
|
|
use Throwable;
|
|
|
|
class GatewayManagementController extends Controller
|
|
{
|
|
use ApiResponse;
|
|
|
|
public function index(Request $request)
|
|
{
|
|
return DataTableFacade::run(
|
|
UserGateway::query()->where('user_id', '=', Auth::guard('web')->id()),
|
|
$request,
|
|
allowedFilters: ['*'],
|
|
allowedSortings: ['*'],
|
|
allowedSelects: ['*'],
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @throws Throwable
|
|
*/
|
|
public function store(StoreRequest $request): JsonResponse
|
|
{
|
|
$user = Auth::guard('web')->user();
|
|
|
|
$logo = $request->hasFile('logo')
|
|
? FileFacade::save($request->file('logo'), "user_gateway/{$user->id}")
|
|
: null;
|
|
|
|
$passportClient = DB::transaction(function () use ($user, $logo, $request) {
|
|
|
|
$clientName = "Gateway {$request->name} - User {$user->id}";
|
|
$client = app(ClientRepository::class)->createPasswordGrantClient($clientName, 'users', true);
|
|
$client->Fill([
|
|
'owner_type' => get_class($user),
|
|
'owner_id' => $user->id,
|
|
])->save();
|
|
|
|
UserGateway::query()->create([
|
|
'user_id' => $user->id,
|
|
'username' => $user->username,
|
|
'name' => $request->name,
|
|
'domain' => $request->domain,
|
|
'tax_id' => $request->tax_id,
|
|
'bank_name' => $request->bank_name,
|
|
'account_holder' => $request->account_holder,
|
|
'iban' => $request->iban,
|
|
'business_type_id' => $request->business_type_id,
|
|
'business_type_name' => BusinessTypeEnum::name($request->business_type_id),
|
|
'logo' => $logo,
|
|
'client_id' => $client->id,
|
|
'client_secret' => $client->secret,
|
|
]);
|
|
|
|
$user->update(['authority_level' => 1]);
|
|
|
|
return $client;
|
|
});
|
|
|
|
return $this->successResponse([
|
|
'client_id' => $passportClient->id,
|
|
'client_secret' => $passportClient->secret,
|
|
]);
|
|
}
|
|
public function show(UserGateway $gateway): JsonResponse
|
|
{
|
|
return $this->successResponse($gateway);
|
|
}
|
|
|
|
public function update(UpdateRequest $request, UserGateway $gateway): JsonResponse
|
|
{
|
|
$logo = null;
|
|
$user = Auth::guard('web')->user();
|
|
|
|
if ($request->has('logo'))
|
|
{
|
|
FileFacade::delete($gateway->logo, true);
|
|
$logo = FileFacade::save(request()->file('logo'), "{$user->id}");
|
|
}
|
|
|
|
$gateway->update([
|
|
'name' => $request->name,
|
|
'domain' => $request->domain,
|
|
'business_type_id' => $request->business_type_id,
|
|
'business_type_name' => BusinessTypeEnum::name($request->business_type_id),
|
|
'logo' => $logo,
|
|
]);
|
|
|
|
return $this->successResponse();
|
|
}
|
|
|
|
public function destroy(UserGateway $gateway): JsonResponse
|
|
{
|
|
$gateway->delete();
|
|
return $this->successResponse();
|
|
}
|
|
}
|