diff --git a/.env.example b/.env.example index 39da784..ea9258c 100755 --- a/.env.example +++ b/.env.example @@ -18,7 +18,7 @@ DB_PASSWORD=vps@2017GA CACHE_DRIVER=file QUEUE_CONNECTION=sync -ACCEPTED_KEYS=yhSTSSqIO1uSE1icu09edPOeSFGxIDjo +ACCEPTED_KEYS=yhSTSSqIO1uSE1icu09edPOeSFGxIDjo,fywRtXSwEhHncwXaqn10wa9bJU9a63r2 TWILIO_ACCOUNT_SID="ACacdb9c9601741af001ebbc7eca4969cd" TWILIO_AUTH_TOKEN="e0e2f1176c09b3980c9ecf967187191b" @@ -39,4 +39,4 @@ NOTIFICATION_SERVICE_URL=localhost:8083 NOTIFICATION_SERVICE_KEY=RfXvPQzQRgwpzQYPnLfWpZzgx4QseHlg SWAGGER_GENERATE_ALWAYS=true -SWAGGER_DOCS_TOKEN= +SWAGGER_DOCS_TOKEN=ZfMqCAdHHrSH8ADdXreIejgjJtOwsH4K diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 2d79694..bda7588 100755 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -6,13 +6,15 @@ use Laravel\Lumen\Routing\Controller as BaseController; /** * @OA\Info( - * title="Your Awesome Modules's API", + * title="Wallet Service API", * version="1.0.0", * @OA\Contact( - * email="developers@module.com", + * email="administrateur@ilink-app.com", + * url = "https://ilink-app.com/", * name="Developer Team" * ) * ) + * */ class Controller extends BaseController { diff --git a/app/Http/Controllers/TransmittingNetworksController.php b/app/Http/Controllers/TransmittingNetworksController.php index dc8d8ca..19db76c 100755 --- a/app/Http/Controllers/TransmittingNetworksController.php +++ b/app/Http/Controllers/TransmittingNetworksController.php @@ -16,35 +16,6 @@ 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; @@ -60,28 +31,7 @@ class TransmittingNetworksController extends Controller // } - /** - * @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)); diff --git a/app/Http/Controllers/WalletController.php b/app/Http/Controllers/WalletController.php index 3ae79fd..793e50f 100755 --- a/app/Http/Controllers/WalletController.php +++ b/app/Http/Controllers/WalletController.php @@ -36,38 +36,39 @@ class WalletController extends Controller // Create wallet if is not exist $category = null; - if($networks){ + if ($networks) { $reload = false; $id = $id_agent; - foreach ($networks as $network){ + foreach ($networks as $network) { $category = $network->category; // Create wallet if is not exist - if(!$network->id){ + if (!$network->id) { DB::insert('INSERT INTO wallets (id_networkAgent) VALUES (?);', [$network->id_networkAgent]); $reload = true; } } - if($reload) + if ($reload) return $this->activated($id); } // Return only single wallet if it is hypervisor or supervisor - if(in_array( $category , ['hyper','super'])){ + if (in_array($category, ['hyper', 'super'])) { // Remove unnecessary fields - $networks = $this->array_except($networks,['id_networkAgent','category']); + $networks = $this->array_except($networks, ['id_networkAgent', 'category']); return $this->successResponse(collect($networks)->first()); - }else{ + } else { // Remove unnecessary fields - $networks = $this->array_except($networks,['id_networkAgent','category','balance_princ','balance_com','created_date','taux_com_client_depot']); + $networks = $this->array_except($networks, ['id_networkAgent', 'category', 'balance_princ', 'balance_com', 'created_date', 'taux_com_client_depot']); return $this->successResponse($networks); } } - private function array_except($array, $keys){ - foreach ($array as $row){ - foreach($keys as $key){ + private function array_except($array, $keys) + { + foreach ($array as $row) { + foreach ($keys as $key) { unset($row->$key); } } @@ -80,20 +81,20 @@ class WalletController extends Controller $wallet = collect(DB::select('SELECT wa.wallet_id AS id, wa.balance_princ, wa.balance_com, wa.created_date, wa.network , cw.taux_com_client_depot, c.name AS country, cw.type, c.currency_code , cw.id_network FROM wallet_agent wa INNER JOIN configWallet cw ON wa.network_id = cw.id_network INNER JOIN networks n ON n.id = wa.network_id INNER JOIN countries_currencies c ON c.id = n.country_id - WHERE wa.wallet_id = :id',['id' => $id_wallet]))->first(); - if($wallet) + WHERE wa.wallet_id = :id', ['id' => $id_wallet]))->first(); + if ($wallet) return $this->successResponse($wallet); else - return $this->errorResponse(trans('errors.model_not_found',['model'=>'wallet']),Response::HTTP_BAD_REQUEST); + return $this->errorResponse(trans('errors.model_not_found', ['model' => 'wallet']), Response::HTTP_BAD_REQUEST); } public function create(Request $request) { $rules = [ - 'id_networkAgent'=>'required|integer|min:1' + 'id_networkAgent' => 'required|integer|min:1' ]; - $this->validate($request,$rules); + $this->validate($request, $rules); DB::insert('INSERT INTO wallets (id_networkAgent) VALUES (?);', [$request->id_networkAgent]); return $this->successResponse(trans('messages.new_wallet_added')); @@ -101,7 +102,8 @@ class WalletController extends Controller } // Wallets users iLink - public function showWalletUser($id_user){ + public function showWalletUser($id_user) + { $wallet = collect(DB::select('SELECT wu.*, u.user_code , u.numero_carte , u.expiration_date ,n2.id as id_wallet_network, n2.name as network , cc.name as country, cc.currency_code from wallets_users wu INNER JOIN users u ON u.id = wu.idUser INNER JOIN networks n1 ON n1.id = u.network_id @@ -348,6 +350,54 @@ class WalletController extends Controller return $this->successResponse($result); } + /** + * @OA\Get( + * path="/wallets/users/operators/{type_operator}/{id_wallet_network}", + * summary="Afficher la liste des operateurs d'un reseau", + * tags={"Liste des operateurs d'un reseau"}, + * security={{"api_key":{}}}, + * @OA\Parameter( + * parameter="type_operator", + * name="type_operator", + * description="Type d'operateur", + * in="path", + * required=true, + * @OA\Schema( + * type="string", + * enum={"bank", "electricity", "phone" , "tv" ,"school" , "water"}, + * default="bank" + * ) + * ), + * @OA\Parameter( + * parameter="id_wallet_network", + * name="id_wallet_network", + * description="ID du reseau auquel appartient le wallet", + * in="path", + * required=true, + * @OA\Schema( + * type="integer", default=101 + * ) + * ), + * @OA\Response( + * response=200, + * description="OK", + * @OA\JsonContent( + * ref="#/components/schemas/ApiResponse", + * example = { + * "status" : 200, + * "response" : {{ + * "id_operator" : 1, + * "operator_name" : "ENEO", + * "operator_address" : "Bonamoussadi", + * "country": "Cameroon" + * }}, + * "error":null + * } + * ) + * ) + * ) + */ + public function getWalletOperators($id_wallet_network, $type_operator) { $operators = DB::select("SELECT oc.id as id_operator, o.nom as operator_name , oc.adresse as operator_address, c.name as country FROM networks_operators nop INNER JOIN operators_countries oc ON oc.id = nop.id_operator_country INNER JOIN operators o ON o.id = oc.id_operator diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php index 4c1be31..6dc4d52 100755 --- a/app/Http/Controllers/iLinkTransactionController.php +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -1145,6 +1145,76 @@ class iLinkTransactionController extends Controller $this->sendMail($agent->email, trans('messages.successful_transaction'), $message); return $this->successResponse($message . trans('messages.sent_by_mail')); + /** + * @OA\Post( + * path="/transactions/ilink", + * summary="Payer une facture chez un operateur donné", + * tags={"Paiement d'une facture chez un operateur"}, + * security={{"api_key":{}}}, + * @OA\RequestBody( + * description="Corps de la requete", + * required=true, + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema( + * @OA\Property(property="type", + * type="integer", + * enum = {19}, + * default = 19, + * description="Type de la transaction" + * ), + * @OA\Property(property="id_wallet_user", + * type="integer", + * example=9, + * description="ID du wallet de l'utilisateur" + * ), + * @OA\Property(property="id_wallet_network", + * type="integer", + * example=101, + * description="ID du reseau auquel appartient le wallet" + * ), + * @OA\Property(property="no_facture", + * type="string", + * description="Numero de la facture" + * ), + * @OA\Property(property="type_operator", + * type="string", + * enum={"electricity", "phone" , "tv" ,"school" , "water"}, + * default="electricity", + * description="Type d'operateur" + * ), + * @OA\Property(property="id_operator", + * type="integer", + * example = 16, + * description="ID de l'operateur" + * ), + * @OA\Property(property="montant", + * type="number", + * example = 10000, + * description="Montant de la transaction" + * ), + * @OA\Property(property="password", + * type="string", + * description="Mot de passe" + * ) + * ) + * ) + * ), + * @OA\Response( + * response=200, + * description="OK", + * @OA\JsonContent( + * ref="#/components/schemas/ApiResponse", + * example = { + * "status" : 200, + * "response" : "Paiement d'une facture chez un operateur\nInformations de la transaction :\n - Numéro : 7S9PZO26VAQ3\n - Montant de la transaction : 100 000 FCFA\n + - Frais : 0 FCFA\n - Montant net payé: 100 000 FCFA\n - Compte émetteur : s6LD9PmCJC\n - Operateur : CDE\n - Type d'operateur : Opérateur d'eau\n - No facture : CDE1425533\n\nCe message a été envoyé dans le mail de l'émetteur", + * "error":null + * } + * ) + * ) + * ) + */ case 19: // User - Payer un operateur $this->validate($request, [ 'id_operator' => 'required|integer|min:0|not_in:0', diff --git a/app/Traits/ApiResponser.php b/app/Traits/ApiResponser.php index a4cf8b7..ff4f5f0 100755 --- a/app/Traits/ApiResponser.php +++ b/app/Traits/ApiResponser.php @@ -4,14 +4,35 @@ namespace App\Traits; use Illuminate\Http\Response; +// Api Response schema + +/** + * @OA\Schema( + * schema="ApiResponse", + * title="API Response", + * description="Format d'un message de reponse", + * @OA\Property( + * property="status", description="Code de la requete", + * @OA\Schema(type="number", example=200) + * ), + * @OA\Property( + * property="response", description="Resultat de la requete si pas d'erreur", + * @OA\Schema(type="object", example="{name : 'Djery'}") + * ), + * @OA\Property( + * property="error", description="Message d'erreur si erreur", + * @OA\Schema(type="string", example="There is an error") + * ) + * ) + */ trait ApiResponser { - public function successResponse($data , $code = Response::HTTP_OK) + public function successResponse($data, $code = Response::HTTP_OK) { - return response($this->formatResponse($code,$data,null) , $code)->header('Content-Type', 'application/json'); + return response($this->formatResponse($code, $data, null), $code)->header('Content-Type', 'application/json'); } - public function errorResponse($message , $code = Response::HTTP_BAD_REQUEST) + public function errorResponse($message, $code = Response::HTTP_BAD_REQUEST) { return response()->json($this->formatResponse($code,null,$message), $code); } diff --git a/config/swagger-lume.php b/config/swagger-lume.php index 9589af0..3c28a02 100644 --- a/config/swagger-lume.php +++ b/config/swagger-lume.php @@ -142,6 +142,12 @@ return [ ], ], */ + 'api_key' => [ // Unique name of security + 'type' => 'apiKey', // Valid values are "basic", "apiKey" or "oauth2". + 'description' => "Api Key", + 'name' => 'Authorization', // The name of the header or query parameter to be used. + 'in' => 'header', // The location of the API key. Valid values are "query" or "header". + ], ], /*