Commit e5f58c8f authored by Michael Ngei's avatar Michael Ngei

Updates search quota plugin

parent 3d3139d4
......@@ -6,12 +6,13 @@ use App\Http\Controllers\Controller;
use App\Models\Docum;
use App\Models\Human;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class BirthRecord extends Controller
{
public function birth_check(Request $request): \Illuminate\Http\JsonResponse
public function birth_check(Request $request): JsonResponse
{
// Validate incoming JSON data
$validatedData = $request->validate([
......
......@@ -15,7 +15,6 @@ use Firebase\JWT\JWT;
class PaymentsAPI extends Controller
{
public $apiDetails='';
public $jsonData;
......@@ -30,8 +29,8 @@ class PaymentsAPI extends Controller
]
]);
}
public function store(StoreContractAPIRequest $request)
// wOLD VERSION WITH NO TOKEN ADDED
/* public function store(StoreContractAPIRequest $request)
{
try {
$validated = $request->validated();
......@@ -96,11 +95,74 @@ class PaymentsAPI extends Controller
'error' => $e->getMessage(),
], 500);
}
}
}*/
/*private function apiContract($consumerName, $tokens, $cid)
public function store(StoreContractAPIRequest $request)
{
$validated = $request->validated();
$contract= Contract::where('RID',$validated['contract_id'])->with('client')->first();
$consumer_name = str_replace( ' ', '_', strtoupper($contract->client->name_sh));
//$res=Redis::set('name', 'mikee');
//$checkKey = Redis::get('search_quota:countsse:user23');
try{
if (Redis::exists("search_quota:max:".$consumer_name)) {
$tokens = $validated['tokens'];
$maxToken = Redis::get("search_quota:max:".$consumer_name);
//$currentToken = Redis::get("search_quota:count:".$consumer_name);
// added tokens
$newMax = $tokens + $maxToken;
//set tokens
$tokenRes = Redis::set("search_quota:max:".$consumer_name, $newMax);
// Attempt to insert the payment
if($tokenRes){
$payment = Payments::create([
'PAYMENT_REF' => $validated['payment_ref'],
'PAYMENT_MODE' => $validated['payment_mode'],
'AMOUNT' => $validated['amount'],
'TOKENS' => $tokens,
'contract_id' => $validated['contract_id'],
'USER_ID' => $validated['user_id'],
]);
// Return success JSON response
return response()->json([
'success' => true,
'message' => 'Payment created successfully',
$this->jsonData,
], 201);
}
}else{
//create new
$this->apiContract($consumer_name, $validated['tokens'], $validated['contract_id']);
$payment = Payments::create([
'PAYMENT_REF' => $validated['payment_ref'],
'PAYMENT_MODE' => $validated['payment_mode'],
'AMOUNT' => $validated['amount'],
'TOKENS' => $validated['tokens'],
'contract_id' => $validated['contract_id'],
'USER_ID' => $validated['user_id'],
]);
// Return success JSON response
return response()->json([
'success' => true,
'message' => 'Payment created successfully',
$this->jsonData,
], 201);
}
}catch (\Predis\Connection\ConnectionException $redisException) {
return response()->json([
'success' => false,
'message' => 'Failed to update search quota',
'error' => $redisException->getMessage(),
], 500);
}
return response()->json([
'success' => false,
'message' => 'Failed to create payment',
], 500);
}
private function apiContractCon($consumerName, $tokens, $cid)
{
$apiGateway = config('services.api_gateway.api_gateway_host').':'.
config('services.api_gateway.api_gateway_port').'/'.
config('services.api_gateway.api_gateway_admin').'/consumers';
......@@ -114,30 +176,38 @@ class PaymentsAPI extends Controller
"secret" => $consumerName,
"exp" => 172800
],
"search-quota-redis" => [
"redis_host" => 'redis',
"limit-count" => [
"count" => $tokens,
"time_window"=> 30,
"rejected_code"=>503,
"key"=> base64_encode($consumerName),
"policy"=> "redis",
"redis_host"=> "redis",
"redis_password"=> env('REDIS_PASSWORD'),
"redis_port" => (int)env('REDIS_PORT'),
"redis_password" => env('REDIS_PASSWORD'),
"default_max_queries" => $tokens
"redis_timeout" => 1000,
"rejected_msg" =>"You have reached your token limit.",
"show_limit_quota_header" => true
]
]
]);
// var_dump($response->status(), $response->headers(), $response->body());
//var_dump($response->successful()); //return true or false
if ($response->successful()) {
//save it locally
$tokens = Tokens::create([
'TOTAL_TOKENS' => $tokens,
'contract_id' => $cid,
]);
return $response;
return ['status'=>$response->successful() ,'body'=>$response->body()];
// return response()->json(["message" => "Consumer created successfully.", "data" => $response->json()]);
} else {
//return response()->json(["error" => "Failed to create consumer.", "details" => $response->body()], $response->status());
return $response;
return ['status'=>false ,'body'=>''];
}
}
}*/
private function apiContractCon($consumerName, $tokens, $cid)
private function apiContract($consumerName, $tokens, $cid)
{
$apiGateway = config('services.api_gateway.api_gateway_host').':'.
config('services.api_gateway.api_gateway_port').'/'.
......@@ -152,23 +222,14 @@ class PaymentsAPI extends Controller
"secret" => $consumerName,
"exp" => 172800
],
"limit-count" => [
"count" => $tokens,
"time_window"=> 30,
"rejected_code"=>503,
"key"=> base64_encode($consumerName),
"policy"=> "redis",
"redis_host"=> "redis",
"redis_password"=> env('REDIS_PASSWORD'),
"search-quota-redis" => [
"redis_host" => 'redis',
"redis_port" => (int)env('REDIS_PORT'),
"redis_timeout" => 1000,
"rejected_msg" =>"You have reached your token limit.",
"show_limit_quota_header" => true
"redis_password" => env('REDIS_PASSWORD'),
"default_max_queries" => $tokens
]
]
]);
// var_dump($response->status(), $response->headers(), $response->body());
//var_dump($response->successful()); //return true or false
if ($response->successful()) {
//save it locally
$tokens = Tokens::create([
......@@ -184,5 +245,4 @@ class PaymentsAPI extends Controller
}
}
......@@ -184,6 +184,7 @@ return [
'aliases' => Facade::defaultAliases()->merge([
// 'Example' => App\Facades\Example::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
])->toArray(),
];
......@@ -155,14 +155,15 @@ return [
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
//'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
//'url' => env('REDIS_URL'),
'url' => 'tcp://127.0.0.1:6379?database=0',
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment