mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-07-03 06:54:34 +02:00
Moved mouser info provider config to settings-bundle
This commit is contained in:
parent
5a4b7c525b
commit
5a563e4f8f
8 changed files with 621 additions and 509 deletions
|
@ -29,7 +29,7 @@
|
||||||
"hshn/base64-encoded-file": "^5.0",
|
"hshn/base64-encoded-file": "^5.0",
|
||||||
"jbtronics/2fa-webauthn": "^v2.2.0",
|
"jbtronics/2fa-webauthn": "^v2.2.0",
|
||||||
"jbtronics/dompdf-font-loader-bundle": "^1.0.0",
|
"jbtronics/dompdf-font-loader-bundle": "^1.0.0",
|
||||||
"jbtronics/settings-bundle": "^2.0",
|
"jbtronics/settings-bundle": "dev-master",
|
||||||
"jfcherng/php-diff": "^6.14",
|
"jfcherng/php-diff": "^6.14",
|
||||||
"knpuniversity/oauth2-client-bundle": "^2.15",
|
"knpuniversity/oauth2-client-bundle": "^2.15",
|
||||||
"league/csv": "^9.8.0",
|
"league/csv": "^9.8.0",
|
||||||
|
|
1004
composer.lock
generated
1004
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -300,12 +300,6 @@ services:
|
||||||
$search_limit: '%env(int:PROVIDER_OCTOPART_SEARCH_LIMIT)%'
|
$search_limit: '%env(int:PROVIDER_OCTOPART_SEARCH_LIMIT)%'
|
||||||
$onlyAuthorizedSellers: '%env(bool:PROVIDER_OCTOPART_ONLY_AUTHORIZED_SELLERS)%'
|
$onlyAuthorizedSellers: '%env(bool:PROVIDER_OCTOPART_ONLY_AUTHORIZED_SELLERS)%'
|
||||||
|
|
||||||
App\Services\InfoProviderSystem\Providers\MouserProvider:
|
|
||||||
arguments:
|
|
||||||
$api_key: '%env(string:PROVIDER_MOUSER_KEY)%'
|
|
||||||
$language: '%env(string:PROVIDER_MOUSER_SEARCH_WITH_SIGNUP_LANGUAGE)%'
|
|
||||||
$options: '%env(string:PROVIDER_MOUSER_SEARCH_OPTION)%'
|
|
||||||
$search_limit: '%env(int:PROVIDER_MOUSER_SEARCH_LIMIT)%'
|
|
||||||
|
|
||||||
####################################################################################################################
|
####################################################################################################################
|
||||||
# API system
|
# API system
|
||||||
|
|
|
@ -37,6 +37,7 @@ use App\Services\InfoProviderSystem\DTOs\FileDTO;
|
||||||
use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
|
use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
|
||||||
use App\Services\InfoProviderSystem\DTOs\PriceDTO;
|
use App\Services\InfoProviderSystem\DTOs\PriceDTO;
|
||||||
use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
|
use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
|
||||||
|
use App\Settings\InfoProviderSystem\MouserSettings;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
use Symfony\Contracts\HttpClient\ResponseInterface;
|
use Symfony\Contracts\HttpClient\ResponseInterface;
|
||||||
|
|
||||||
|
@ -50,10 +51,7 @@ class MouserProvider implements InfoProviderInterface
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly HttpClientInterface $mouserClient,
|
private readonly HttpClientInterface $mouserClient,
|
||||||
private readonly string $api_key,
|
private readonly MouserSettings $settings,
|
||||||
private readonly string $language,
|
|
||||||
private readonly string $options,
|
|
||||||
private readonly int $search_limit
|
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +72,7 @@ class MouserProvider implements InfoProviderInterface
|
||||||
|
|
||||||
public function isActive(): bool
|
public function isActive(): bool
|
||||||
{
|
{
|
||||||
return !empty($this->api_key);
|
return !empty($this->settings->apiKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function searchByKeyword(string $keyword): array
|
public function searchByKeyword(string $keyword): array
|
||||||
|
@ -119,15 +117,15 @@ class MouserProvider implements InfoProviderInterface
|
||||||
|
|
||||||
$response = $this->mouserClient->request('POST', self::ENDPOINT_URL."/keyword", [
|
$response = $this->mouserClient->request('POST', self::ENDPOINT_URL."/keyword", [
|
||||||
'query' => [
|
'query' => [
|
||||||
'apiKey' => $this->api_key,
|
'apiKey' => $this->settings->apiKey
|
||||||
],
|
],
|
||||||
'json' => [
|
'json' => [
|
||||||
'SearchByKeywordRequest' => [
|
'SearchByKeywordRequest' => [
|
||||||
'keyword' => $keyword,
|
'keyword' => $keyword,
|
||||||
'records' => $this->search_limit, //self::NUMBER_OF_RESULTS,
|
'records' => $this->settings->searchLimit, //self::NUMBER_OF_RESULTS,
|
||||||
'startingRecord' => 0,
|
'startingRecord' => 0,
|
||||||
'searchOptions' => $this->options,
|
'searchOptions' => $this->settings->searchOption->value,
|
||||||
'searchWithYourSignUpLanguage' => $this->language,
|
'searchWithYourSignUpLanguage' => $this->settings->searchWithSignUpLanguage ? 'true' : 'false',
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
@ -160,7 +158,7 @@ class MouserProvider implements InfoProviderInterface
|
||||||
|
|
||||||
$response = $this->mouserClient->request('POST', self::ENDPOINT_URL."/partnumber", [
|
$response = $this->mouserClient->request('POST', self::ENDPOINT_URL."/partnumber", [
|
||||||
'query' => [
|
'query' => [
|
||||||
'apiKey' => $this->api_key,
|
'apiKey' => $this->settings->apiKey,
|
||||||
],
|
],
|
||||||
'json' => [
|
'json' => [
|
||||||
'SearchByPartRequest' => [
|
'SearchByPartRequest' => [
|
||||||
|
|
|
@ -34,4 +34,7 @@ class InfoProviderSettings
|
||||||
|
|
||||||
#[EmbeddedSettings]
|
#[EmbeddedSettings]
|
||||||
public LCSCSettings $lcsc;
|
public LCSCSettings $lcsc;
|
||||||
|
|
||||||
|
#[EmbeddedSettings]
|
||||||
|
public MouserSettings $mouser;
|
||||||
}
|
}
|
32
src/Settings/InfoProviderSystem/MouserSearchOptions.php
Normal file
32
src/Settings/InfoProviderSystem/MouserSearchOptions.php
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 - 2024 Jan Böhmer (https://github.com/jbtronics)
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published
|
||||||
|
* by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Settings\InfoProviderSystem;
|
||||||
|
|
||||||
|
enum MouserSearchOptions: string
|
||||||
|
{
|
||||||
|
case NONE = "None";
|
||||||
|
case ROHS = "Rohs";
|
||||||
|
case IN_STOCK = "InStock";
|
||||||
|
case ROHS_AND_INSTOCK = "RohsAndInStock";
|
||||||
|
}
|
59
src/Settings/InfoProviderSystem/MouserSettings.php
Normal file
59
src/Settings/InfoProviderSystem/MouserSettings.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 - 2024 Jan Böhmer (https://github.com/jbtronics)
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published
|
||||||
|
* by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Settings\InfoProviderSystem;
|
||||||
|
|
||||||
|
use Jbtronics\SettingsBundle\Settings\Settings;
|
||||||
|
use Jbtronics\SettingsBundle\Settings\SettingsParameter;
|
||||||
|
use Symfony\Component\Validator\Constraints as Assert;
|
||||||
|
|
||||||
|
#[Settings]
|
||||||
|
class MouserSettings
|
||||||
|
{
|
||||||
|
#[SettingsParameter(envVar: "PROVIDER_MOUSER_KEY")]
|
||||||
|
public ?string $apiKey = null;
|
||||||
|
|
||||||
|
/** @var int The number of results to get from Mouser while searching (please note that this value is max 50) */
|
||||||
|
#[SettingsParameter(envVar: "int:PROVIDER_MOUSER_SEARCH_LIMIT")]
|
||||||
|
#[Assert\Range(min: 1, max: 50)]
|
||||||
|
public int $searchLimit = 50;
|
||||||
|
|
||||||
|
/** @var MouserSearchOptions Filter search results by RoHS compliance and stock availability */
|
||||||
|
#[SettingsParameter(envVar: "PROVIDER_MOUSER_SEARCH_OPTION", envVarMapper: [self::class, "mapSearchOptionEnvVar"])]
|
||||||
|
public MouserSearchOptions $searchOption = MouserSearchOptions::NONE;
|
||||||
|
|
||||||
|
/** @var bool It is recommended to leave this set to 'true'. The option is not really documented by Mouser:
|
||||||
|
* Used when searching for keywords in the language specified when you signed up for Search API. */
|
||||||
|
#[SettingsParameter(envVar: "bool:PROVIDER_MOUSER_SEARCH_WITH_SIGNUP_LANGUAGE")]
|
||||||
|
public bool $searchWithSignUpLanguage = true;
|
||||||
|
|
||||||
|
public static function mapSearchOptionEnvVar(?string $value): MouserSearchOptions
|
||||||
|
{
|
||||||
|
if (!$value) {
|
||||||
|
return MouserSearchOptions::NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MouserSearchOptions::tryFrom($value) ?? MouserSearchOptions::NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -297,12 +297,6 @@
|
||||||
"./config/packages/datatables.yaml"
|
"./config/packages/datatables.yaml"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"phenx/php-font-lib": {
|
|
||||||
"version": "0.5.1"
|
|
||||||
},
|
|
||||||
"phenx/php-svg-lib": {
|
|
||||||
"version": "v0.3.3"
|
|
||||||
},
|
|
||||||
"php-http/discovery": {
|
"php-http/discovery": {
|
||||||
"version": "1.18",
|
"version": "1.18",
|
||||||
"recipe": {
|
"recipe": {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue