Òåñòîâîå: Èíòåãðàöèÿ Drupal ñ âíåøíåé SQLite ÁÄ

Çàäàíèå çàêðûòî
Ñòîèìîñòü:800 ðóáëåé
Ñðîê âûïîëíåíèÿ:2 äíÿ
Âàðèàíòû îïëàòû:Ïî äîãîâîðåííîñòè
Äàòà ïóáëèêàöèè:2026-01-08 09:32
Îáíîâëåíî:2026-01-12 13:44
Áûë íà ñàéòå:2026-01-22 10:20

Òåñòîâîå: Èíòåãðàöèÿ Drupal ñ âíåøíåé SQLite ÁÄ

 
Çàäà÷à

Íåîáõîäèìî ðåàëèçîâàòü Drupal-ìîäóëü factory_bridge, êîòîðûé âûïîëíÿåò ðîëü ìîñòà ìåæäó âíåøíåé SQLite áàçîé äàííûõ è áàçîé äàííûõ Drupal.

Ìîäóëü äîëæåí:
— ÷èòàòü äàííûå îá èçäåëèè èç SQLite;
— âûïîëíÿòü ðàñ÷¸òû íà ñòîðîíå PHP;
— ñîõðàíÿòü àãðåãèðîâàííûå äàííûå â ÁÄ Drupal;
— âûâîäèòü òàáëèöó îïåðàöèé èçäåëèÿ.

Çàäàíèå ÿâëÿåòñÿ ÷àñòüþ áóäóùåãî ïåðåíîñà âñåé ñèñòåìû íà Drupal. Âàæíî íå òîëüêî ïîëó÷èòü ðàáî÷èé ðåçóëüòàò, íî è ïîêàçàòü êîððåêòíóþ àðõèòåêòóðó ðåøåíèÿ.

Óñëîâèÿ
CMS: Drupal 10 èëè 11
Èñòî÷íèê äàííûõ: âíåøíÿÿ SQLite ÁÄ workshop_bot.db
Äèçàéí è âåðñòêà íå âàæíû
Twig èñïîëüçóåòñÿ òîëüêî äëÿ îòîáðàæåíèÿ äàííûõ
Âñÿ áèçíåñ-ëîãèêà è ðàñ÷¸òû âûïîëíÿþòñÿ â PHP

Àðõèòåêòóðà
Ìîäóëü äîëæåí ïîëó÷àòü äàííûå èç SQLite ÷åðåç Drupal Database API ñ öåíòðàëèçîâàííûì ïîäêëþ÷åíèåì (íå â êîíòðîëëåðàõ).

Çàïðåùåíî:
— èñïîëüçîâàòü new PDO(), sqlite_open() â áèçíåñ-ëîãèêå;
— âûïîëíÿòü SQL-çàïðîñû â Twig;
— ðåàëèçîâûâàòü áèçíåñ-ëîãèêó íà óðîâíå øàáëîíîâ.

Äàííûå
 ðàìêàõ òåñòîâîãî çàäàíèÿ èñïîëüç...

Âèäåòü ïîëíóþ èíôîðìàöèþ è îñòàâëÿòü çàÿâêè ìîãóò òîëüêî àâòîðèçîâàííûå ïîëüçîâàòåëè.

Îïòèìèçèðîâàíî è àãðåãèðîâàíî ÈÈ:

Íåîáõîäèìî ðàçðàáîòàòü ìîäóëü äëÿ Drupal, êîòîðûé áóäåò ñëóæèòü ìîñòîì ìåæäó âíåøíåé áàçîé äàííûõ SQLite è áàçîé äàííûõ Drupal. Ìîäóëü äîëæåí èçâëåêàòü äàííûå îá èçäåëèÿõ èç SQLite, âûïîëíÿòü íåîáõîäèìûå ðàñ÷¸òû íà ñòîðîíå PHP, ñîõðàíÿòü àãðåãèðîâàííûå äàííûå â áàçå äàííûõ Drupal è îòîáðàæàòü òàáëèöó îïåðàöèé èçäåëèÿ. Âàæíî îáåñïå÷èòü ïðàâèëüíóþ àðõèòåêòóðó ðåøåíèÿ, ñëåäóÿ çàäàííûì îãðàíè÷åíèÿì è óñëîâèÿì, òàêèì êàê èñïîëüçîâàíèå Drupal Database API äëÿ ïîäêëþ÷åíèÿ ê SQLite è âûïîëíåíèå âñåõ áèçíåñ-ëîãèêè â PHP. Äëÿ âûïîëíåíèÿ ýòîãî çàäàíèÿ ïîòðåáóþòñÿ íàâûêè ðàáîòû ñ Drupal (â ÷àñòíîñòè, ñîçäàíèå ìîäóëåé), çíàíèå PHP äëÿ âûïîëíåíèÿ áèçíåñ-ëîãèêè è ðàñ÷¸òîâ, îïûò ðàáîòû ñ áàçàìè äàííûõ, âêëþ÷àÿ SQLite è Drupal Database API, à òàêæå ïîíèìàíèå àðõèòåêòóðíûõ ïðèíöèïîâ äëÿ èíòåãðàöèè ðàçëè÷íûõ ñèñòåì.
Àëåêñàíäð Ýíä
Îñíîâíàÿ ñïåöèàëèçàöèÿ: Âåá-ðàçðàáîòêà è Ïðîäóêòîâûé äèçàéí
    Âñå êàê-òî ìóòíî - íè ñàìîé áàçû íåò, íè òîëêîì ìåòîäèêà ðàñ÷åòîâ íå äàíà
    Çäðàâñòâóéòå. Ïèøèòå. Ñäåëàþ.
    Äîáðûé äåíü!

    Âíèìàòåëüíî èçó÷èë çàäàíèå ïî èíòåãðàöèè Drupal ñ âíåøíåé SQLite ÁÄ. Ïîíèìàþ, ÷òî êëþ÷åâàÿ çàäà÷à — íå ïðîñòî ïåðåíåñòè äàííûå, à ñîçäàòü àðõèòåêòóðíî ïðàâèëüíûé ìîäóëü factory_bridge ñ ðàçäåëåíèåì îòâåòñòâåííîñòè.

    Ìîé ïîäõîä ê ðåàëèçàöèè:
    1. Öåíòðàëèçîâàííîå ïîäêëþ÷åíèå: ñîçäàì ñåðâèñ äëÿ ðàáîòû ñ SQLite ÷åðåç Drupal Database API (áåç new PDO â êîíòðîëëåðàõ)
    2. ×èñòàÿ àðõèòåêòóðà: âñÿ áèçíåñ-ëîãèêà (ðàñ÷åòû Í× Ïëàí, × Ôàêò, Äåëüòà) áóäåò â îòäåëüíûõ ñåðâèñàõ, Twig — òîëüêî äëÿ îòîáðàæåíèÿ
    3. Ñîõðàíåíèå äàííûõ: ðåàëèçóþ ÷åðåç Custom Entity (êàê óêàçàíî â ÒÇ) äëÿ êîððåêòíîé èíòåãðàöèè ñ ýêîñèñòåìîé Drupal
    4. Êîä-ñòàíäàðòû: ñîáëþäåíèå Drupal Coding Standards è áåçîïàñíîñòü çàïðîñîâ

    Ãîòîâ ïðèñòóïèòü ê âûïîëíåíèþ ñðàçó ïîñëå îáñóæäåíèÿ äåòàëåé. Äëÿ âàøåãî óäîáñòâà, ìîãó ðàçáèòü ðàáîòó íà ýòàïû ñ ïðîìåæóòî÷íûìè ðåçóëüòàòàìè.
    Ëàðèñà Åðàñòîâà
    Îñíîâíàÿ ñïåöèàëèçàöèÿ: Âåá-ðàçðàáîòêà è Ïðîäóêòîâûé äèçàéí
      Ìîäóëü factory_bridge íóæåí êàê ïåðåõîäíûé ìîñò ìåæäó ñóùåñòâóþùåé ïðîèçâîäñòâåííîé SQLite-ÁÄ è Drupal â ïðîöåññå ïîýòàïíîãî ïåðåíîñà ñèñòåìû.

      Îí ïîëó÷àåò èç SQLite äàííûå ïî èçäåëèÿì è îïåðàöèÿì (order_items, assigned_tasks, work_sessions), à äàëüøå íà ñòîðîíå PHP âûïîëíÿåò ðàñ÷¸òû:
      ïëàíîâûå íîðìî-÷àñû, ôàêòè÷åñêîå âðåìÿ (ñ ó÷¸òîì àêòèâíûõ ñåññèé ñ end_time = NULL) è äåëüòó ïëàí/ôàêò.
      Â Drupal ñîõðàíÿþòñÿ óæå àãðåãèðîâàííûå ïîêàçàòåëè, à â Twig ïåðåäàþòñÿ òîëüêî ïîäãîòîâëåííûå äàííûå äëÿ âûâîäà òàáëèöû îïåðàöèé èçäåëèÿ.

      Ïî àðõèòåêòóðå:

      ïîäêëþ÷åíèå ê SQLite — öåíòðàëèçîâàííî ÷åðåç Drupal Database API, íå â êîíòðîëëåðàõ;

      âñÿ áèçíåñ-ëîãèêà è ðàñ÷¸òû — â PHP-ñåðâèñàõ;

      Twig èñïîëüçóåòñÿ òîëüêî äëÿ îòîáðàæåíèÿ;

      ðàáîòà ñòðîãî â ðàìêàõ óêàçàííûõ òàáëèö, áåç ëèøíèõ çàâèñèìîñòåé.

      ×òîáû óëîæèòüñÿ â ðàçóìíûé áþäæåò áåç íàðóøåíèÿ ÒÇ, ïðåäëàãàþ:

      õðàíèòü àãðåãàòû â Node-ñóùíîñòè (âàðèàíò äîïóñòèì óñëîâèÿìè);

      ïåðåñ÷èòûâàòü è îáíîâëÿòü äàííûå ïðè îáðàùåíèè ê èçäåëèþ, áåç êðîíîâ è ôîíîâîé ñèíõðîíèçàöèè;

      ïðîñòóþ òàáëèöó áåç UI-ïîëèðîâêè (äèçàéí íå êðèòè÷åí ïî çàäàíèþ).

      Îöåíêà:
      25 000–28 000 ð, ñðîê 4–5 ðàáî÷èõ äíåé.

      Àðõèòåêòóðà îñòà¸òñÿ ðàñøèðÿåìîé — ïðè íåîáõîäèìîñòè ïîçæå ìîæíî âûíåñòè äàííûå â Custom Entity èëè äîáàâèòü àâòîìàòè÷åñêóþ ñèíõðîíèçàöèþ.

      Äëÿ ñòàðòà óòî÷íþ:

      àãðåãàòû íóæíî ïåðåñ÷èòûâàòü ïðè êàæäîì îòêðûòèè èçäåëèÿ èëè äîñòàòî÷íî îáíîâëÿòü ïðè èçìåíåíèÿõ?

      èçäåëèå îäíîçíà÷íî îïðåäåëÿåòñÿ ïî order_item_internal_id?

      Îñòàâëÿòü çàÿâêè ìîãóò òîëüêî àâòîðèçîâàííûå ïîëüçîâàòåëè.

      Äðóãèå îòêðûòûå çàäàíèÿ:

      ïîèñê çàäàíèé