Михаил
Рома
оказалось всё проще
я забыл точку
Рома
symfony var:export --multiline > .env.local
Magzhan
Коллеги, есть у меня много внешних api реализация в проекте по которым я логинюсь делаю там какие-то изменения
у всех этих синхронизации есть метод логин но они немного отличаются смотря как в этом api логиниться
Как мне реализовать более грамотна? Через интерфейсы и все такое
class FirstSyncService
{
private string $token;
public function __construct(protected Client $httpClient)
{
$this->login();
}
private function login(): void
{
$this->token = Cache::remember('partner_access_token', 600, function () {
$response = $this->httpClient->post(env('PARTNER_URL') . "/api/login", [
'content-type' => 'application/json',
'accept' => 'application/json',
RequestOptions::JSON => [
'email' => env('PARTNER_EMAIL'),
'password' => env('PARTNER_PASSWORD')
]
]);
$data = json_decode($response->getBody()->getContents());
return $data->token;
});
}
//
class SecondSyncService
{
private string $access_token;
public function __construct(protected Client $httpClient)
{
$this->login();
}
private function login(): void
{
Cache::remember('test2', 3600-60, function () {
return 'test_value';
});
$this->access_token = Cache::remember('dynamics_access_token', 3600 - 60, function () {
$response = $this->httpClient->post(env('DYNAMICS_TOKEN_URL'), [
'form_params' => [
'grant_type' => env('DYNAMICS_GRANT_TYPE'),
'client_secret' => env('DYNAMICS_CLIENT_SECRET'),
'client_id' => env('DYNAMICS_CLIENT_ID'),
'scope' => env('DYNAMICS_SCOPE'),
],
]);
$data = json_decode($response->getBody()->getContents());
return $data->access_token;
});
}
Magzhan
где копать напишите?
Михаил
Так как это сервис в конструктор это пихать не надо.
Михаил
Так как внешние потребители не должны знать про логин - то его реализация дело каждого сервиса, класть под интерфейс нет смысла
Рома
хех гениальное решение
public function setUp(): void
{
parent::setUp();
putenv("DATABASE_URL=postgres://postgres:12345@127.0.0.1:5432/postgres?sslmode=disable&charset=utf8");
// // $this->stmtService = static::getContainer()->get(StmtService::class);
//
}
Михаил
Ты можешь немного облегчить себе учесть использовав scoped клинет
https://symfony.com/doc/current/http_client.html#scoping-client
Рома
другая ошибка)
Рома
1) App\Tests\StmtServiceTest::testSearchFilterSuccess
InvalidArgumentException: "App\Tests\Resource\Fixture\StmtFixture" is not a registered fixture
Михаил
где копать напишите?
Также я наверное бы предложил разделить твой клиент на 2 сущности - репозиторий и декоратор клиента.
Декоратор клиента заботится о том, что ему нужно авторизовываться по протуханию кеша. Репозиторий использует клиент и реализует доменные методы (getBannedUsers, addDeal)
Рома
подскажи можно ли отключить это
Remaining indirect deprecation notices (5)
1x: Public access to Connection::connect() is deprecated. (Connection.php:367 called by Connection.php:453, https://github.com/doctrine/dbal/issues/4966, package doctrine/dbal)
1x in StmtServiceTest::setUp from App\Tests
для кода библиотек
Михаил
Рома
это не моё
Рома
SYMFONY_DEPRECATIONS_HELPER=999999
установить в disabled
Рома
не понимаю почему phpunit не читает .env.test
Михаил
Рома
есть
Павел
Михаил
Ну кстати да
Рома
почти заработало)
только данные не сохраняет
Рома
и не понятно как исправить чтоб phpunit читал из .env.test
Вадим
привет!
подскажите зачем это и можно ли это как-то обойти
Вадим
Вадим
Вадим
так?
Михаил
А, ну значит генератор не осиляет
Михаил
Назови по другому а потом уже сам отредактируй название
Михаил
А я хз почему он ругается на поле как на reserved. Ты хочешь связь создать?
Михаил
Назови users потом вручную отредактируй
Рома
умы програмирование проходил собез
и мне задали вопрос подсчитать количество нулей в 100! (факториал)
Рома
или же как побороть проблему переполнения
Рома
емоё . прикопапался к моей вышке
Рома
матрица в php 😂
Kirill
Рома
а потом, когда я спросил . Ответил всё у них обычно, эльбрусы не разрабатывают
Рома
ахах я даже определение факториала забыл
Рома
какого бреда не наслушаешься на собесах
Kirill
от факториала я помню только восклицательный знак, это норма)))
Рома
одним надо вычеслить угол между стрелками 16:20
другому это?
ты че блт на 500к собеседуешь?
или яндекс иновации
Kirill
Kirill
у тебя 360 градусов и 12 часов
Kirill
360 / 12 - один час
Рома
нехрена не изи, зачем это бэкендеру
Kirill
(20 - 16) * 360 / 12 получается
Kirill
Kirill
ну т.е. у тебя 2 стрелки, одна на 20, другая на 16
Kirill
разница между ними 4 часа
Михаил
Kirill
один час - это 30 градусов
Kirill
так что угол между ними получается 120
Рома
не верно
Михаил
Kirill
Михаил
Между 6 и 8 - 120?
Kirill
между 16 и 20 часами
Михаил
А, ну я не прошёл получается
Kirill
или подожди, надо часы на 16:20 брать и вычислить между минутной и часовой?
Kirill
а, ну так тоже самое получается)))
Kirill
а, не, нифига
Рома
там угол меньше 10 градусов
Рома
между минутной и часовой стрелкой
Kirill
16 часов относительно 0 - это 120
Рома
или ещё дичь расчитайте вероятность выподения числа 5 на 2 кубиках
Рома
нахуя мне камбинаторика
Рома
в програмировании веба
Kirill
а 20 минут - это 360/60*20 - тоже 120 градусов
Kirill
и получаешь mod(360/60*20 -360/12*16)
Kirill
можешь ещё % 360 взять