Moved mouser info provider config to settings-bundle

This commit is contained in:
Jan Böhmer 2024-05-05 23:34:06 +02:00
parent 5a4b7c525b
commit 5a563e4f8f
8 changed files with 621 additions and 509 deletions

View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -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' => [

View file

@ -34,4 +34,7 @@ class InfoProviderSettings
#[EmbeddedSettings] #[EmbeddedSettings]
public LCSCSettings $lcsc; public LCSCSettings $lcsc;
#[EmbeddedSettings]
public MouserSettings $mouser;
} }

View 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";
}

View 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;
}
}

View file

@ -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": {