110 lines
3.7 KiB
PHP
110 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace Modules\IntegrationHub\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Modules\IntegrationHub\Models\IhOdataToken;
|
|
use Modules\IntegrationHub\Services\ODataExportService;
|
|
|
|
class ODataController extends Controller
|
|
{
|
|
public function datasets(ODataExportService $odataService)
|
|
{
|
|
return response()->json([
|
|
'value' => collect($odataService->availableDatasets())->map(fn ($dataset) => [
|
|
'name' => $dataset,
|
|
'url' => url("/integrationhub/api/odata/{$dataset}"),
|
|
])->values(),
|
|
]);
|
|
}
|
|
|
|
public function show(Request $request, string $dataset, ODataExportService $odataService)
|
|
{
|
|
$businessId = (int) $request->attributes->get('ih_business_id');
|
|
|
|
if (! in_array($dataset, $odataService->availableDatasets(), true)) {
|
|
return response()->json(['error' => 'Dataset not found'], 404);
|
|
}
|
|
|
|
$filters = $request->only(['start_date', 'end_date', 'location_id', 'low_stock_only', '$top']);
|
|
|
|
try {
|
|
$payload = $odataService->dataset($businessId, $dataset, $filters);
|
|
|
|
return response()->json($payload);
|
|
} catch (\InvalidArgumentException $e) {
|
|
return response()->json(['error' => $e->getMessage()], 404);
|
|
}
|
|
}
|
|
|
|
public function indexTokens(Request $request)
|
|
{
|
|
if (! auth()->user()->can('integrationhub.manage_tokens')) {
|
|
abort(403);
|
|
}
|
|
|
|
$business_id = (int) $request->session()->get('user.business_id');
|
|
$tokens = IhOdataToken::forBusiness($business_id)->latest('id')->paginate(20);
|
|
$datasets = app(ODataExportService::class)->availableDatasets();
|
|
|
|
return view('integrationhub::odata_tokens.index', compact('tokens', 'datasets'));
|
|
}
|
|
|
|
public function createToken(Request $request)
|
|
{
|
|
if (! auth()->user()->can('integrationhub.manage_tokens')) {
|
|
abort(403);
|
|
}
|
|
|
|
$datasets = app(ODataExportService::class)->availableDatasets();
|
|
|
|
return view('integrationhub::odata_tokens.create', compact('datasets'));
|
|
}
|
|
|
|
public function storeToken(Request $request)
|
|
{
|
|
if (! auth()->user()->can('integrationhub.manage_tokens')) {
|
|
abort(403);
|
|
}
|
|
|
|
$validated = $request->validate([
|
|
'name' => 'required|string|max:191',
|
|
'scopes' => 'nullable|array',
|
|
'scopes.*' => 'string',
|
|
'expires_at' => 'nullable|date|after:now',
|
|
]);
|
|
|
|
$business_id = (int) $request->session()->get('user.business_id');
|
|
$plainToken = IhOdataToken::generatePlainToken();
|
|
|
|
IhOdataToken::create([
|
|
'business_id' => $business_id,
|
|
'name' => $validated['name'],
|
|
'token_hash' => IhOdataToken::hashToken($plainToken),
|
|
'scopes' => $validated['scopes'] ?? ['*'],
|
|
'expires_at' => $validated['expires_at'] ?? null,
|
|
]);
|
|
|
|
return redirect()
|
|
->action([self::class, 'indexTokens'])
|
|
->with('status', ['success' => 1, 'msg' => __('integrationhub::lang.token_created')])
|
|
->with('plain_token', $plainToken);
|
|
}
|
|
|
|
public function destroyToken(Request $request, $id)
|
|
{
|
|
if (! auth()->user()->can('integrationhub.manage_tokens')) {
|
|
abort(403);
|
|
}
|
|
|
|
$business_id = (int) $request->session()->get('user.business_id');
|
|
$token = IhOdataToken::forBusiness($business_id)->findOrFail($id);
|
|
$token->delete();
|
|
|
|
return redirect()
|
|
->action([self::class, 'indexTokens'])
|
|
->with('status', ['success' => 1, 'msg' => __('integrationhub::lang.token_deleted')]);
|
|
}
|
|
}
|