Privetiq
@Privetiq
Тестирую всегда на проде

Как грамотно связать классы Products, Users, Orders для приложения на php?

Задача - простейший телеграмм бот в котором при команде start - бот создает запись в таблицу User, в которой есть колонки id*, username, city, product, payment, order, order_status. Если user с таким id уже есть, просто апдейтится его юзернейм, остальные поля NULL по дефолту. ID и username я беру с апи.
Далее пользователю предлагается выбрать город, который выбирается с таблицы products, в которой столбцы: id, city, product_name, price, product_link, buyer. Товар - product_link, a buyer - по умолчанию NULL, но после продажи будет вносится user_id.
Когда пользователь отвечает какой город его интересует - в таблице users в строке с его ID поле city - апдейтится, дальше предлагается выбрать товар, по той же схеме заполняем поле product в таблице user. Также далее происходит с оплатой. После чего юзеру предлагается оплатить заказ, который формируется в третей табличке orders с полями: order_id, user_id, product_id, date_create, date_close, status. Крон курлит каждые 2 минуты все заказы которые не просрочились, проверяет оплату и если оплата прошла успешно - обновляет date_close и status, а также buyer в таблице товара и order_status в таблице пользователя. После чего - курлит ссылку товара, и товар уходит клиенту.

Так вот суть вопроса: Вот это вот всё - я достаточно быстро в спешке сделал в одном файле (ну и конфиг с доступами отдельно заинклюдил), и конечно спагетти-код который получился работал себе спокойно, а я уже и забыл про этого бота. Прошло пол года, и его нужно доработать... В том виде что он есть сейчас - поддерживать его нереально, потому решено провести рефакторинг и сделать по канонам ООП. Но я в этом слаб, и башка просто пухнет с этого всего.
Подскажите, как лучше это всё дело зарефакторить? Какие классы создавать?

PS: на вскидку создал классы Products, Users, Orders, Db, Bot. В Db - у меня лежит приватный PDO коннект, и методы манипуляции с базой (все SQL запросы). Bot - Держит только два метода - checkMessage и sendMessage. У класса юзер, продукт и заказ - свойства как колонки таблиц, Но методы манипуляций с ними лежат в Db. И я не могу это всё собрать в кучу. Обьясните на пальцах примерно какая должна быть архитектура этого всего балагана?)
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
возьми DB/ORM и Auth пакеты из доступного тебе фреймворка и сделай на их базе приложение. Писать придется в половину меньше, в том числе тестов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы