Skip to content
This repository was archived by the owner on May 22, 2026. It is now read-only.

Latest commit

 

History

History
58 lines (46 loc) · 5.34 KB

File metadata and controls

58 lines (46 loc) · 5.34 KB

🧾 TODO: Rewrite всього проєкту на Golang з додаванням нових способів взаємодії та фішок

🚀 AbitAssistant 3.0: Реінкарнація на Go

✒️ Пояснення

Прямо зараз актуальна версія цього проєкту, як ідеї - 2.n... Чому 2? Бо перша реалізація на Tkinter давно архівована і писалась на колінці, хоч і була дуже корисна в той час. Я росту, а зі мною і проєкти. Вже цього року я і сам здаю НМТ і стаю абітурієнтом, але закидати проєкт не збираюся. Далі - більше. Тож в планах в мене перехід на версію 3.0! Проєкт буде переписаний з нуля на чисту архітектуру і нову мову програмування - Golang. Сама суть буде та сама, як і функціонал (з можливими покращеннями), але в планах зробити проєкт модульним, щоб кожен бажаючий, що знає Golang, міг сам написати свою реалізацію взаємодії. Чи буде це власний telegram-bot, чи discord-bot, чи навіть реалізації на CLI-tool. Проєкт залишається відкритим, кожен, хто захоче, може побачити повний його код в мене на Github, але це буде вже інший репозиторій. Цей репозиторій піде в Archive, як і попередній.

🏗 Загальна структура (Monorepo)

Проєкт переходить від моноліту на Python до модульної архітектури на Go. Використовуємо стандарт Standard Go Project Layout для максимальної чистоти та масштабованості.

  • cmd/ — Точки входу:
    • cmd/bot/main.go — лише запуск Telegram-бота.
    • cmd/desktop/main.go — запуск Wails-додатка.
    • cmd/server/main.go — запуск сервера для сайту
  • pkg/ — Публічне "Ядро" (Core):
    • pkg/parser/ — універсальний парсер (vstup.osvita.ua, abit-poisk).
    • pkg/abit/ — структури даних (Student, NMT, ВНЗ) та логіка розрахунку балів.
    • pkg/calculator/ — алгоритм "The Technique" для оцінки реальних шансів.
    • pkg/visualizer/ — інтерфейс для візуалізації графіків.
    • pkg/.../ — всі інші корисні інтерфейси
  • internal/ — Приватна реалізація:
    • internal/bot/ — хендлери, меню та логіка діалогів Telegram.
    • internal/desktop/ — Go-бекенд для Wails.
    • internal/server/ — Логіка для сервера.
    • internal/visualizer/ — "важкий" модуль для генерації графіків (Matplotlib-style).
    • internal/.../ — всі інші логіки.
  • wails-frontend/ — інтерфейс десктоп-версії на Svelte + TypeScript.
  • server-frontend/ — інтерфейс сайт-версії на Svelte + TypeScript.

📦 Бібліотеки та стек (Go-аналоги)

Функціонал Python (зараз) Go (3.0)
Telegram API aiogram telebot або tgbotapi
Парсинг BeautifulSoup4 / aiohttp goquery / resty
БД SQLAlchemy (PostgreSQL) sqlx або gorm (PostgreSQL / SQLite)
Графіки Matplotlib gonum/plot
GUI Wails/Web (Svelte/TS)
Контейнер python:3.x-slim (~400MB) scratch (~30-50MB)

🛠 Фішки збірки (Release alias)

Для створення мінімального статичного бінарника використовуємо: CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o abitassistant ./cmd/bot

  • CGO_ENABLED=0: повна незалежність від системних бібліотек (ідеально для scratch).
  • -ldflags="-s -w": видаляє дебаг-інфо, зменшуючи вагу файлу на ~30%.
  • scratch: порожній Docker-образ вагою 0 байт, де лежить тільки твій бінарник.

💡 Чому це круто:

  1. Модульність: Можна підключити pkg/parser до будь-якого іншого проєкту через go get.
  2. Легкість: Умований CLI-tool не тягне за собою бібліотеки графіків, якщо вони йому не потрібні (завдяки імпортам у Go).
  3. Швидкість: Парсинг на горутинах буде в рази швидшим за асинхронність Python.