+ Implements Swagger documentation

This commit is contained in:
Djery-Tom 2020-11-11 15:37:26 +01:00
parent 5cbf539346
commit 1f38606b7f
7 changed files with 174 additions and 75 deletions

View File

@ -18,7 +18,7 @@ DB_PASSWORD=vps@2017GA
CACHE_DRIVER=file CACHE_DRIVER=file
QUEUE_CONNECTION=sync QUEUE_CONNECTION=sync
ACCEPTED_KEYS=yhSTSSqIO1uSE1icu09edPOeSFGxIDjo ACCEPTED_KEYS=yhSTSSqIO1uSE1icu09edPOeSFGxIDjo,fywRtXSwEhHncwXaqn10wa9bJU9a63r2
TWILIO_ACCOUNT_SID="ACacdb9c9601741af001ebbc7eca4969cd" TWILIO_ACCOUNT_SID="ACacdb9c9601741af001ebbc7eca4969cd"
TWILIO_AUTH_TOKEN="e0e2f1176c09b3980c9ecf967187191b" TWILIO_AUTH_TOKEN="e0e2f1176c09b3980c9ecf967187191b"
@ -39,4 +39,4 @@ NOTIFICATION_SERVICE_URL=localhost:8083
NOTIFICATION_SERVICE_KEY=RfXvPQzQRgwpzQYPnLfWpZzgx4QseHlg NOTIFICATION_SERVICE_KEY=RfXvPQzQRgwpzQYPnLfWpZzgx4QseHlg
SWAGGER_GENERATE_ALWAYS=true SWAGGER_GENERATE_ALWAYS=true
SWAGGER_DOCS_TOKEN=<some_strong_token> SWAGGER_DOCS_TOKEN=ZfMqCAdHHrSH8ADdXreIejgjJtOwsH4K

View File

@ -6,13 +6,15 @@ use Laravel\Lumen\Routing\Controller as BaseController;
/** /**
* @OA\Info( * @OA\Info(
* title="Your Awesome Modules's API", * title="Wallet Service API",
* version="1.0.0", * version="1.0.0",
* @OA\Contact( * @OA\Contact(
* email="developers@module.com", * email="administrateur@ilink-app.com",
* url = "https://ilink-app.com/",
* name="Developer Team" * name="Developer Team"
* ) * )
* ) * )
*
*/ */
class Controller extends BaseController class Controller extends BaseController
{ {

View File

@ -16,35 +16,6 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; 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 class TransmittingNetworksController extends Controller
{ {
use ApiResponser; 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) public function index(Request $request)
{ {
$users = User::paginate($request->get("limit", 10)); $users = User::paginate($request->get("limit", 10));

View File

@ -65,7 +65,8 @@ class WalletController extends Controller
} }
private function array_except($array, $keys){ private function array_except($array, $keys)
{
foreach ($array as $row) { foreach ($array as $row) {
foreach ($keys as $key) { foreach ($keys as $key) {
unset($row->$key); unset($row->$key);
@ -101,7 +102,8 @@ class WalletController extends Controller
} }
// Wallets users iLink // 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 $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 users u ON u.id = wu.idUser
INNER JOIN networks n1 ON n1.id = u.network_id INNER JOIN networks n1 ON n1.id = u.network_id
@ -348,6 +350,54 @@ class WalletController extends Controller
return $this->successResponse($result); 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) 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 $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

View File

@ -1145,6 +1145,76 @@ class iLinkTransactionController extends Controller
$this->sendMail($agent->email, trans('messages.successful_transaction'), $message); $this->sendMail($agent->email, trans('messages.successful_transaction'), $message);
return $this->successResponse($message . trans('messages.sent_by_mail')); 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 : 100000 FCFA\n
- Frais : 0 FCFA\n - Montant net payé: 100000 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 case 19: // User - Payer un operateur
$this->validate($request, [ $this->validate($request, [
'id_operator' => 'required|integer|min:0|not_in:0', 'id_operator' => 'required|integer|min:0|not_in:0',

View File

@ -4,6 +4,27 @@ namespace App\Traits;
use Illuminate\Http\Response; 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 trait ApiResponser
{ {
public function successResponse($data, $code = Response::HTTP_OK) public function successResponse($data, $code = Response::HTTP_OK)

View File

@ -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".
],
], ],
/* /*