Commit a430e44f authored by ovchinnikov_av's avatar ovchinnikov_av
Browse files

Логика для аналитики;

Showing with 75 additions and 0 deletions
......@@ -46,4 +46,26 @@ class StatsService
return $results;
}
public function widgetStats(string $keyword, int $nm_id, int $range)
{
$db = DB::connection('clickhouse')->getClient();
$rawQuery
= "SELECT MAX(created_at) AS created_at, cpm, promo_position, position
FROM parser.products
WHERE keyword = :keyword AND id = :nm_id
GROUP BY cpm, promo_position, position
ORDER BY created_at ASC
LIMIT 30;";
$bindings = [
'keyword' => $keyword,
'nm_id' => $nm_id,
];
$results = $db->select($rawQuery, $bindings);
return $results;
}
}
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Bidder;
use App\Application\Services\StatsService;
use App\Domain\Bidder\Bidder;
use App\Domain\Search\SearchResult;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class WidgetStatsController
{
public function __construct()
{
}
public function getStats(Request $request, StatsService $statsService, SearchResult $searchResult) : JsonResponse
{
$validator = Validator::make($request->json()->all(), [
'advert_id' => 'required|integer',
'nm_id' => 'required|integer',
'range' => 'integer',
]);
if ($validator->fails()) {
return response()->json(['success' => false, 'errors' => $validator->errors()], 400);
}
$requestData = $validator->validated();
$advert_id = $requestData['advert_id'];
$nm_id = $requestData['nm_id'];
$range = $requestData['range'] ?? 24;
$bidder = Bidder::where('advert_id', $advert_id)->firstOrFail();
$stats = $statsService->widgetStats($bidder->masterPhrase->first()->keyword, $nm_id, $range);
$res = [];
foreach ($stats as $k => $stat) {
$res[$k] = $stat;
}
if ($stats) {
return response()->json(['success' => true, 'stats' => $res], 200);
} else {
return response()->json(['success' => false], 404);
}
}
}
......@@ -5,6 +5,7 @@ use App\Http\Controllers\Bidder\BidderParametersController;
use App\Http\Controllers\Bidder\BidderStateController;
use App\Http\Controllers\Bidder\BidderStatsController;
use App\Http\Controllers\Bidder\BidderStatusInfoController;
use App\Http\Controllers\Bidder\WidgetStatsController;
use App\Http\Controllers\Stats\BidStatsController;
use App\Http\Controllers\Stats\PaymentStatsController;
use Illuminate\Http\Request;
......@@ -34,6 +35,7 @@ Route::prefix('v0')->group(function () {
Route::post('/keyword-exclude', [BidderStateController::class, 'keywordExclude']);
Route::post('/set-master-phrase', [BidderStateController::class, 'setMasterPhrase']);
Route::post('/stats', [BidderStatsController::class, 'getStats']);
Route::post('/stats-widget', [WidgetStatsController::class, 'getStats']);
Route::post('/get-financial-parameters/{bidder}', [BidderFinancialParametersController::class, 'getParameters']);
Route::post('/set-financial-parameters/{bidder}', [BidderFinancialParametersController::class, 'setParameters']);
Route::post('/make-payment/{bidder}', [BidderFinancialParametersController::class, 'makePayment']);
......
Supports Markdown
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