Size: a a a

2020 October 07

SP

Sergey Protko in symfony
там как раз на примере "ордерс"
источник

l

livsi in symfony
By default the Doctrine\ORM\Mapping\DefaultNamingStrategy uses the simple class name and the attribute names to generate tables and columns.
источник

k

knopkod4v in symfony
Валентин Удальцов
А зачем вам методы чтения в write модели (выше не читал, сорри, если не в тему)?
для устранения дублирования методов подсчёта, результат которых удобно считать, вместо того, чтобы записывать при изменении состояния.
Например есть промокод с ограниченной датой действия. Нужно заюзать промокод на такую-то дату, внутри проверяеем, что промокод ещё действует. Но на фронте тоже хочется видеть, что промокод ещё действует (например при вводе промокода пользователем, чтобы снизить вероятность фейла запроса).
В этой ситуации неудобно считать действует ли промокод на каждую из возможных входных дат, это удобнее вычислять каждый раз заново.
источник

DT

Dmitriy Tkachenko in symfony
Фесора можно заменять ботом, который на любое упоминание кидает линк на all our aggregates are wrong. Ну и иногда спонтанно тоже кидает)
источник

SP

Sergey Protko in symfony
Jurij Bachkov
За 5 сек
(new ArticleLike)->setArticle()->setUser()
persist flush
public function like(string $postId, string $userId)
{
   $this->db->executeUpdate('INSERT INTO post_likes VALUES(:postId, :userId) ON CONFLICT DO NOTHING');
}
источник

SP

Sergey Protko in symfony
вжух, 10 секунд фича готова
источник

SP

Sergey Protko in symfony
нахуй вам ОРМ для таких фич непонятно
источник

VS

Vladislav Soprun in symfony
источник

ПГ

Павел Г. in symfony
Sergey Protko
все так
Приветствую. Так задача вообще не имела проблем в количестве эндпоинтов. Проблема была как пропихнуть антиспам сложный в Рич модель.
источник

SP

Sergey Protko in symfony
можно даже сделать так:

namespace App\Likes;

class User
{
   public function __construct(
       private string $userId,
       private Connection $db
  } {}

  public function like(string $postId): void {
      $this->db->executeUpdate('INSERT INTO post_likes VALUES(:postId, :userId) ON CONFLICT DO NOTHING');
  }
}


и потом в контроллере

namespace App\Likes;

class LikesController
{
   public function like(User $user, string $postId) // обратить внимание что это юзер именно для лайков
   {
       $user->like($postId);
   }
}
источник

SP

Sergey Protko in symfony
Павел Г.
Приветствую. Так задача вообще не имела проблем в количестве эндпоинтов. Проблема была как пропихнуть антиспам сложный в Рич модель.
это не должно быть в "рич модели".
источник

k

knopkod4v in symfony
Sergey Protko
public function like(string $postId, string $userId)
{
   $this->db->executeUpdate('INSERT INTO post_likes VALUES(:postId, :userId) ON CONFLICT DO NOTHING');
}
тут есть 1 минус - из этого сложно построить большую и ветвистую диаграмму, смотрится несолидно =\ Как коллеги будут смотреть на меня после такого?
источник

SP

Sergey Protko in symfony
мол это как обычно делают взрослые дяди.... делается некий user activity tracking - мол ты залогинился с таким-то айпишником и начал посты лайкать. Все эти ивенты сыпятся в какую-то шину где отдельная система на основе твоей активности принимает решение - так этот чел зарегался и как-то быстро начал лайкать посты одного и того же чела - забаним пидора"

тот же Уди Дахан для таких вещей предлагает использовать rules engine и это неплохо решает вопросы инкапсуляции
источник

SP

Sergey Protko in symfony
knopkod4v
тут есть 1 минус - из этого сложно построить большую и ветвистую диаграмму, смотрится несолидно =\ Как коллеги будут смотреть на меня после такого?
мне проще - я уволить могу)
источник

k

knopkod4v in symfony
Sergey Protko
мне проще - я уволить могу)
источник

ПГ

Павел Г. in symfony
Sergey Protko
можно даже сделать так:

namespace App\Likes;

class User
{
   public function __construct(
       private string $userId,
       private Connection $db
  } {}

  public function like(string $postId): void {
      $this->db->executeUpdate('INSERT INTO post_likes VALUES(:postId, :userId) ON CONFLICT DO NOTHING');
  }
}


и потом в контроллере

namespace App\Likes;

class LikesController
{
   public function like(User $user, string $postId) // обратить внимание что это юзер именно для лайков
   {
       $user->like($postId);
   }
}
Подход интересный, но выходит что это какой то сервис класс.
источник

ПГ

Павел Г. in symfony
+ не совсе понятно как я из DI прокину UserID
источник

SP

Sergey Protko in symfony
Павел Г.
Подход интересный, но выходит что это какой то сервис класс.
а это мы потиху приходим к мысли что "сущности" не обязательно проекции табличек в базе)
источник

SP

Sergey Protko in symfony
Павел Г.
+ не совсе понятно как я из DI прокину UserID
class UserRepository
{
   public function get(string $userId): User
   {
       return new User($this->connection, $userId); // к - каррирование
   }
}
источник

SP

Sergey Protko in symfony
ну то есть все в целом как обычно только нет ORM
источник