Files
orderPRO/routes/web.php

139 lines
7.3 KiB
PHP

<?php
declare(strict_types=1);
use App\Core\Application;
use App\Core\Http\Request;
use App\Core\Http\Response;
use App\Core\Security\Csrf;
use App\Modules\Auth\AuthController;
use App\Modules\Auth\AuthMiddleware;
use App\Modules\ProductLinks\ChannelOffersRepository;
use App\Modules\ProductLinks\LinkMatcherService;
use App\Modules\ProductLinks\OfferImportService;
use App\Modules\ProductLinks\ProductLinksController;
use App\Modules\ProductLinks\ProductLinksRepository;
use App\Modules\ProductLinks\ProductLinksService;
use App\Modules\Products\ProductRepository;
use App\Modules\Products\ProductsController;
use App\Modules\Products\ProductService;
use App\Modules\Products\ProductValidator;
use App\Modules\Settings\IntegrationRepository;
use App\Modules\Settings\SettingsController;
use App\Modules\Settings\ShopProClient;
use App\Modules\Users\UsersController;
return static function (Application $app): void {
$router = $app->router();
$template = $app->template();
$auth = $app->auth();
$translator = $app->translator();
$authController = new AuthController($template, $auth, $translator);
$usersController = new UsersController($template, $translator, $auth, $app->users());
$integrationRepository = new IntegrationRepository(
$app->db(),
(string) $app->config('app.integrations.secret', '')
);
$shopProClient = new ShopProClient();
$channelOffersRepository = new ChannelOffersRepository($app->db());
$productLinksRepository = new ProductLinksRepository($app->db());
$linkMatcherService = new LinkMatcherService();
$productLinksService = new ProductLinksService(
$productLinksRepository,
$channelOffersRepository,
$integrationRepository,
$linkMatcherService,
$app->db()
);
$productLinksController = new ProductLinksController($translator, $auth, $productLinksService);
$offerImportService = new OfferImportService($shopProClient, $channelOffersRepository, $app->db());
$productRepository = new ProductRepository($app->db());
$settingsController = new SettingsController(
$template,
$translator,
$auth,
$app->migrator(),
$integrationRepository,
$shopProClient,
$offerImportService,
$productRepository,
$app->db()
);
$productValidator = new ProductValidator();
$productService = new ProductService($app->db(), $productRepository, $productValidator);
$productsController = new ProductsController(
$template,
$translator,
$auth,
$productRepository,
$productService,
$integrationRepository,
$productLinksService
);
$authMiddleware = new AuthMiddleware($auth);
$router->get('/health', static fn (Request $request): Response => Response::json([
'status' => 'ok',
'app' => (string) $app->config('app.name', 'orderPRO'),
'timestamp' => date(DATE_ATOM),
]));
$router->get('/', static function (Request $request) use ($auth): Response {
return $auth->check()
? Response::redirect('/dashboard')
: Response::redirect('/login');
});
$router->get('/login', [$authController, 'showLogin']);
$router->post('/login', [$authController, 'login']);
$router->post('/logout', [$authController, 'logout'], [$authMiddleware]);
$router->get('/dashboard', static function (Request $request) use ($template, $auth, $translator): Response {
$user = $auth->user();
$html = $template->render('dashboard/index', [
'title' => $translator->get('dashboard.title'),
'activeMenu' => 'dashboard',
'user' => $user,
'csrfToken' => Csrf::token(),
], 'layouts/app');
return Response::html($html);
}, [$authMiddleware]);
$router->get('/users', [$usersController, 'index'], [$authMiddleware]);
$router->post('/users', [$usersController, 'store'], [$authMiddleware]);
$router->get('/products', [$productsController, 'index'], [$authMiddleware]);
$router->get('/products/show', [$productsController, 'show'], [$authMiddleware]);
$router->get('/products/{id}', [$productsController, 'show'], [$authMiddleware]);
$router->get('/products/links', [$productsController, 'links'], [$authMiddleware]);
$router->get('/products/{id}/links', [$productsController, 'links'], [$authMiddleware]);
$router->get('/products/{id}/links/suggestions', [$productsController, 'linkSuggestions'], [$authMiddleware]);
$router->get('/products/create', [$productsController, 'create'], [$authMiddleware]);
$router->post('/products', [$productsController, 'store'], [$authMiddleware]);
$router->get('/products/edit', [$productsController, 'edit'], [$authMiddleware]);
$router->post('/products/update', [$productsController, 'update'], [$authMiddleware]);
$router->post('/products/delete', [$productsController, 'destroy'], [$authMiddleware]);
$router->post('/products/images/upload', [$productsController, 'uploadImage'], [$authMiddleware]);
$router->post('/products/images/set-main', [$productsController, 'setMainImage'], [$authMiddleware]);
$router->post('/products/images/delete', [$productsController, 'deleteImage'], [$authMiddleware]);
$router->post('/products/links/create', [$productLinksController, 'create'], [$authMiddleware]);
$router->post('/products/links/relink', [$productLinksController, 'relink'], [$authMiddleware]);
$router->post('/products/links/unlink', [$productLinksController, 'unlink'], [$authMiddleware]);
$router->post('/products/{id}/links', [$productLinksController, 'create'], [$authMiddleware]);
$router->post('/products/{id}/links/{mapId}/relink', [$productLinksController, 'relink'], [$authMiddleware]);
$router->post('/products/{id}/links/{mapId}/unlink', [$productLinksController, 'unlink'], [$authMiddleware]);
$router->post('/products/import/shoppro', [$settingsController, 'importProducts'], [$authMiddleware]);
$router->get('/settings/integrations', static fn (Request $request): Response => Response::redirect('/settings/integrations/shoppro'), [$authMiddleware]);
$router->get('/settings/integrations/shoppro', [$settingsController, 'integrations'], [$authMiddleware]);
$router->post('/settings/integrations/save', [$settingsController, 'saveIntegration'], [$authMiddleware]);
$router->post('/settings/integrations/shoppro/save', [$settingsController, 'saveIntegration'], [$authMiddleware]);
$router->post('/settings/integrations/test', [$settingsController, 'testIntegration'], [$authMiddleware]);
$router->post('/settings/integrations/shoppro/test', [$settingsController, 'testIntegration'], [$authMiddleware]);
$router->post('/settings/integrations/import-one-product', [$settingsController, 'importOneProduct'], [$authMiddleware]);
$router->post('/settings/integrations/shoppro/import-one-product', [$settingsController, 'importOneProduct'], [$authMiddleware]);
$router->post('/settings/integrations/import-offers-cache', [$settingsController, 'importOffersCache'], [$authMiddleware]);
$router->post('/settings/integrations/shoppro/import-offers-cache', [$settingsController, 'importOffersCache'], [$authMiddleware]);
$router->get('/settings/database', [$settingsController, 'database'], [$authMiddleware]);
$router->post('/settings/database/migrate', [$settingsController, 'migrate'], [$authMiddleware]);
};