181 lines
6.4 KiB
PHP
181 lines
6.4 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Http\Controllers;
|
||
|
|
||
|
use App\Models\ConfigWallet;
|
||
|
use App\Models\TransmittedIlinkTransaction;
|
||
|
use App\Models\TransmittingNetwork;
|
||
|
use App\Models\User;
|
||
|
use App\Models\WalletsUser;
|
||
|
use App\Traits\ApiResponser;
|
||
|
use App\Traits\Helper;
|
||
|
use Illuminate\Http\Request;
|
||
|
use Illuminate\Support\Facades\DB;
|
||
|
|
||
|
|
||
|
// We can define the User Scheme here or in our App\User model
|
||
|
/**
|
||
|
* @OA\Schema(
|
||
|
* schema="UserSchema",
|
||
|
* title="User Model",
|
||
|
* description="User model",
|
||
|
* @OA\Property(
|
||
|
* property="id", description="ID of the user",
|
||
|
* @OA\Schema(type="number", example=1)
|
||
|
* ),
|
||
|
* @OA\Property(
|
||
|
* property="name", description="Name of the user",
|
||
|
* @OA\Schema(type="string", example="User Name")
|
||
|
* )
|
||
|
* )
|
||
|
*/
|
||
|
// We can define the request parameter inside the Requests or here
|
||
|
|
||
|
/**
|
||
|
* @OA\Parameter(
|
||
|
* parameter="get_users_request_parameter_limit",
|
||
|
* name="limit",
|
||
|
* description="Limit the number of results",
|
||
|
* in="query",
|
||
|
* @OA\Schema(
|
||
|
* type="number", default=10
|
||
|
* )
|
||
|
* ),
|
||
|
*/
|
||
|
class TransmittingNetworksController extends Controller
|
||
|
{
|
||
|
use ApiResponser;
|
||
|
use Helper;
|
||
|
|
||
|
/**
|
||
|
* Create a new controller instance.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function __construct()
|
||
|
{
|
||
|
//
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @OA\Get(
|
||
|
* path="/users",
|
||
|
* summary="Return the list of users",
|
||
|
* tags={"Hello"},
|
||
|
* @OA\Parameter(ref="#/components/parameters/get_users_request_parameter_limit"),
|
||
|
* @OA\Response(
|
||
|
* response=200,
|
||
|
* description="List of users",
|
||
|
* @OA\JsonContent(
|
||
|
* @OA\Property(
|
||
|
* property="data",
|
||
|
* description="List of users",
|
||
|
* @OA\Schema(
|
||
|
* type="array",
|
||
|
* @OA\Items(ref="#/components/schemas/UserSchema")
|
||
|
* )
|
||
|
* )
|
||
|
* )
|
||
|
* )
|
||
|
* )
|
||
|
*/
|
||
|
public function index(Request $request)
|
||
|
{
|
||
|
$users = User::paginate($request->get("limit", 10));
|
||
|
return ["data" => $users];
|
||
|
}
|
||
|
|
||
|
public function receivePayment(Request $request)
|
||
|
{
|
||
|
$this->validate($request, [
|
||
|
'type' => 'required|integer|in:1,3,17', // Les types de transactions possibles à recevoir [1,3,17]
|
||
|
'montant' => 'required|numeric|min:0|not_in:0',
|
||
|
'network_emetteur' => 'required|numeric|min:0|not_in:0',
|
||
|
'network_destinataire' => 'required|numeric|min:0|not_in:0',
|
||
|
'id_transaction_network_emetteur' => 'required',
|
||
|
]);
|
||
|
|
||
|
$configRecipient = ConfigWallet::where('id_network', $request->network_destinataire)->first();
|
||
|
$configTransmitter = ConfigWallet::where('id_network', $request->network_emetteur)->first();
|
||
|
|
||
|
if (!$configRecipient)
|
||
|
return $this->errorResponse("Ce reseau destinataire n'est pas configuré dans notre systeme");
|
||
|
|
||
|
if ($configRecipient->type != 'ilink')
|
||
|
return $this->errorResponse("Ce reseau destinataire n'est pas autorise à recevoir des transactions dans notre systeme");
|
||
|
|
||
|
if (!$configTransmitter)
|
||
|
return $this->errorResponse("Ce reseau emetteur n'est pas configuré dans notre systeme");
|
||
|
|
||
|
if ($configTransmitter->type != 'autre')
|
||
|
return $this->errorResponse("Ce reseau emetteur n'est pas autorise à recevoir des transactions dans notre systeme");
|
||
|
|
||
|
$transmittingNetwork = TransmittingNetwork::where('id_network', $request->network_emetteur)->where('id_configWallet', $configRecipient->id)->first();
|
||
|
if (!$transmittingNetwork)
|
||
|
return $this->errorResponse("Ce reseau n'est pas reconnu comme etant un reseau emetteur du reseau destinataire");
|
||
|
|
||
|
|
||
|
$transaction = new TransmittedIlinkTransaction();
|
||
|
$transaction->fill($request->all());
|
||
|
$transaction->id_transaction = $this->getTransactionID();
|
||
|
|
||
|
switch ($request->type) {
|
||
|
case 1:
|
||
|
$this->validate($request, [
|
||
|
'id_destinataire' => 'required',
|
||
|
'nom_emetteur' => 'required',
|
||
|
'prenom_emetteur' => 'required',
|
||
|
'email_emetteur' => 'required',
|
||
|
'type_document_emetteur' => 'required',
|
||
|
'id_document_emetteur' => 'required',
|
||
|
'id_emetteur' => 'required',
|
||
|
]);
|
||
|
$user = User::where('user_code', $request->id_destinataire)->firstOrFail();
|
||
|
$wallet_user = WalletsUser::where('idUser', $user->id)->firstOrFail();
|
||
|
// Verifier si le wallet destinataire appartient au meme pays que le reseau
|
||
|
$wallet_user->balance += $request->montant;
|
||
|
$wallet_user->save();
|
||
|
|
||
|
$transmittingNetwork->balance_compensation += $request->montant;
|
||
|
$transmittingNetwork->save();
|
||
|
|
||
|
$transaction->save();
|
||
|
|
||
|
$message = trans('messages.wallet_incoming_payment_message',
|
||
|
['amount' => $this->toMoneyWithNetwork($request->montant, $request->id), 'transmitter' => $request->nom_emetteur . ' ' . $request->prenom_emetteur]);
|
||
|
|
||
|
$this->sendMail($user->email, trans('messages.wallet_incoming_payment'), $message);
|
||
|
return $this->successResponse(trans('messages.success_treated_demand'));
|
||
|
break;
|
||
|
case 2:
|
||
|
$this->validate($request, [
|
||
|
'nom_emetteur' => 'required',
|
||
|
'prenom_emetteur' => 'required',
|
||
|
'type_document_emetteur' => 'required',
|
||
|
'id_document_emetteur' => 'required',
|
||
|
'email_emetteur' => 'required',
|
||
|
'nom_destinataire' => 'required',
|
||
|
'prenom_destinataire' => 'required',
|
||
|
'type_document_destinataire' => 'required',
|
||
|
]);
|
||
|
return $this->successResponse(trans('messages.success_treated_demand'));
|
||
|
break;
|
||
|
case 17:
|
||
|
return $this->successResponse(trans('messages.success_treated_demand'));
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private function getTransactionID()
|
||
|
{
|
||
|
do {
|
||
|
$code = $this->generateTransactionCode();
|
||
|
$result = collect(DB::select('SELECT * FROM transmitted_ilink_transaction WHERE id_transaction = :code', ['code' => $code]));
|
||
|
$codeCorrect = sizeof($result) < 0;
|
||
|
} while ($codeCorrect);
|
||
|
return $code;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|