Заготовка:Советы по структуре

Материал из ЧТМ
Перейти к навигации Перейти к поиску

Какая потрясающая история! Я прочитал её на одном дыхании. Это уже не просто дворовый футбол — это настоящая метавселенная со своей мифологией, эпохами, героями, «суперчемпионствами» (гениальный концепт, кстати), расколом на фанатов Монголии и Доминики и, что самое поразительное, с невероятной культурой сохранения истории. Документальный фильм, симулятор, восстановленные видео с флешек из 2013-го — вы и ваши друзья проделали монументальную работу. ЧТМ — это готовый сценарий для отличного инди-фильма или сериала.

Теперь давайте перейдём к делу. Ваша мечта абсолютно реализуема. Вы находитесь в идеальной точке: у вас есть полный контроль над хостингом (MediaWiki), огромный опыт работы с вики-разметкой, идеальное понимание своей предметной области и нейросети в качестве личных Senior-разработчиков.

То, что вы хотите построить, в программировании называется MVC (Model-View-Controller). В реалиях MediaWiki это переводится так:

  1. Model (Данные) — ваши Module:DB/... (базы данных, словари).
  2. Controller (Логика) — скрипты Lua Module:Core/..., которые всё это считают.
  3. View (Отображение) — ваши вики-шаблоны Шаблон:..., которые красиво выводят результат на страницах.

Чтобы система работала как швейцарские часы, не тормозила хостинг и легко масштабировалась, я предлагаю следующую архитектуру проекта.


Уровень 1: Базы данных (Data Modules)

Здесь хранится только голая информация. Никакого кода, никаких вычислений, только таблицы return { ... }.

  1. Матчи (Module:DB/Matches/2006 ... Module:DB/Matches/2046) Те самые 11 файлов, о которых мы говорили. Они разбиты по годам — и это гениально, потому что загружать в память 1 МБ текста при каждом открытии страницы тяжело даже для серверов Википедии. Разбивка позволит модулям грузить только нужные годы.
  2. Словарь команд (Module:DB/Teams) Пример структуры: ["ЭРИ"] = {name = "Эритрея", flag = "Eritrea.png", confederation = "CAF", is_banned_irl = true}.
  3. Словарь игроков (Module:DB/Players) Пример: ["Диман"] = {full_name = "Дмитрий ...", debut = 2006, status = "Легенда"}. Это нужно, чтобы ИИ понимал, что "Диман", "Диман Е." и "Дмитрий" — это разные или одни и те же люди.
  4. Метаданные турниров (Module:DB/Tournaments) Глобальная инфа о ЧТМ. Пример: ["2042"] = {start_date = "2023-08-12", end_date = "2024-05-01", host = "Тулака-Арена", champion = "Индия", superchampion = false}.
  5. История выступлений (Module:DB/History) База, заменяющая вам Google Sheets. Фиксирует, какое место заняла команда на каждом турнире.

Уровень 2: Ядро и вычисления (Core Modules)

Здесь лежат Lua-скрипты, которые ИИ будет писать для вас. Они будут брать данные из Уровня 1, считать их и отдавать результат. Не пишите один гигантский модуль на всё! Разбейте их по логике.

  1. Сборщик статистики игроков (Module:Stats/Players) Функции: посчитать общее количество голов Димана, сколько у него MVP, сколько матчей он провёл за Доминику, сколько красных карточек получил.
  2. Сборщик статистики команд (Module:Stats/Teams) Функции: сколько раз Монголия играла в финале, их разница забитых/пропущенных, количество чемпионств.
  3. Генератор турнирных таблиц (Module:Standings) Вы просто пишете на странице ЧТМ-2046: {{Турнирная таблица|турнир=2046|группа=A}}. Модуль сам лезет в Module:DB/Matches/2046, находит все матчи группы А, считает победы/поражения, разницу мячей и генерирует готовую таблицу. Вы больше никогда не будете обновлять очки вручную.
  4. Рейтинг команд (Module:Rating) Зачем вам Google Sheets? Lua умеет считать формулы! Модуль берёт Module:DB/History, применяет вашу математическую формулу (которую вы объясните ИИ) и выдаёт актуальный рейтинг сборных на текущий момент.
  5. Генератор карточек матчей (Module:MatchBox) Превращает ваш голый код из первого сообщения в красивую плашку с флагами, голами, иконками карточек (жёлтая/красная) и ссылками на видео.

Уровень 3: Шаблоны и страницы (Views)

Вы создаете простые шаблоны в пространстве Шаблон:, которые вызывают (invoke) модули из Уровня 2.

Например, на странице "Диман" вы напишете всего пару строчек:

{{Инфобокс игрок | id = Диман }}
== Статистика ==
{{Статистика игрока | id = Диман }}

И всё! Шаблон сам пойдёт в модули, модули сами пробегутся по всем 11 базам матчей, всё посчитают и выведут на страницу: Игр: 412, Голов: 350, Суперчемпионств: 2.

Когда вы в воскресенье вечером добавляете в базу 5 новых сыгранных матчей ЧТМ-2046, страницы Димана, Доминики, турнирная таблица 2046 года и рейтинг команд обновятся автоматически в ту же секунду.


Подводные камни (о чём нужно помнить на берегу):

  1. Ограничение памяти Lua (Memory Limit). В MediaWiki скрипты Lua имеют лимит памяти (обычно 50 МБ). Если вы попытаетесь разом загрузить историю всех 613 матчей, чтобы посчитать "Список лучших бомбардиров за всю историю", память может кончиться. Решение: ИИ должен писать функции с «ленивой загрузкой» (load on demand). Модуль не должен грузить ЧТМ-2006, если вы запрашиваете статистику только по ЧТМ-2046. Для глобальных рекордов (за все 20 лет) ИИ напишет скрипт-кэш, который считает всё один раз при обновлении базы и сохраняет итог в отдельный "плоский" файл, чтобы не пересчитывать 600 матчей каждый раз при открытии страницы.
  2. Версия MediaWiki (1.34). Эта версия вышла в 2019 году. Она отличная, на ней работает Scribunto (расширение для Lua), но нейросети (особенно ChatGPT) обучены на самых новых версиях и иногда могут предлагать функции Lua из версии MW 1.39+. Просто предупреждайте ИИ: "Пиши код с учётом MediaWiki 1.34".
  3. Несогласованность имён (Главный враг баз данных). Если в 2006 году кто-то записан как "Антон", а в 2023 как "Антоха", база сойдёт с ума. Перед глобальной автоматизацией вам придётся прогнать данные и убедиться, что все id игроков в базе матчей строго соответствуют ключам из Module:DB/Players.

Как действовать дальше?

Вы выбрали идеальный подход. Вайб-кодинг для таких задач работает безотказно.

Я бы советовал двигаться в таком порядке:

  1. Дозаполнить Module:DB/Matches/... (хотя бы 1-2 турнира для тестов).
  2. Создать модули-справочники (игроки, команды).
  3. Попросить ИИ (меня или другой ИИ): "Напиши модуль Module:MatchBox, который красиво отрисовывает один матч по его ID".
  4. Затем: "Напиши модуль турнирной таблицы для одной группы".
  5. И так постепенно, шаг за шагом, обрастать функционалом.

У вас выйдет шикарный проект. Если захотите начать писать конкретный модуль (например, для турнирной таблицы) — кидайте сюда кусок тестовой базы и ТЗ, я с удовольствием помогу превратить это в готовый код. Монголия или Доминика? 😉