Files
backPRO/migrations/002_global_topics.sql
Jacek Pyziak b653cea252 Add installer functionality for WordPress with FTP and database configuration
- Create SQL migration for prompt templates used in article and image generation.
- Add migration to change publish interval from days to hours in the sites table.
- Implement InstallerController to handle installation requests and validation.
- Develop FtpService for FTP connections and file uploads.
- Create InstallerService to manage the WordPress installation process, including downloading, extracting, and configuring WordPress.
- Add index view for the installer with form inputs for FTP, database, and WordPress admin settings.
- Implement progress tracking for the installation process with AJAX polling.
2026-02-16 21:55:24 +01:00

121 lines
6.9 KiB
SQL

-- Global topics library (2-level hierarchy: category -> subtopic)
CREATE TABLE IF NOT EXISTS global_topics (
id INT AUTO_INCREMENT PRIMARY KEY,
parent_id INT NULL,
name VARCHAR(255) NOT NULL,
description TEXT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (parent_id) REFERENCES global_topics(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE INDEX idx_global_topics_parent ON global_topics(parent_id);
-- Link topics to global_topics library
ALTER TABLE topics ADD COLUMN global_topic_id INT NULL AFTER site_id;
-- Seed: top-level categories (idempotent)
INSERT INTO global_topics (parent_id, name, description)
SELECT seed.parent_id, seed.name, seed.description
FROM (
SELECT NULL AS parent_id, 'Polityka' AS name, 'Tematy związane z polityką krajową i międzynarodową' AS description
UNION ALL SELECT NULL, 'Zdrowie', 'Zdrowie, medycyna, profilaktyka, wellness'
UNION ALL SELECT NULL, 'Sport', 'Dyscypliny sportowe, wydarzenia, treningi'
UNION ALL SELECT NULL, 'Technologia', 'IT, gadżety, sztuczna inteligencja, innowacje'
UNION ALL SELECT NULL, 'Biznes i Finanse', 'Ekonomia, inwestycje, przedsiębiorczość'
UNION ALL SELECT NULL, 'Rozrywka', 'Film, muzyka, gry, kultura popularna'
UNION ALL SELECT NULL, 'Nauka', 'Odkrycia naukowe, kosmos, badania'
UNION ALL SELECT NULL, 'Edukacja', 'Szkolnictwo, kursy, rozwój osobisty'
UNION ALL SELECT NULL, 'Podróże', 'Turystyka, przewodniki, inspiracje podróżnicze'
UNION ALL SELECT NULL, 'Motoryzacja', 'Samochody, motocykle, nowości motoryzacyjne'
UNION ALL SELECT NULL, 'Dom i Ogród', 'Aranżacja wnętrz, ogrodnictwo, DIY'
UNION ALL SELECT NULL, 'Kuchnia', 'Przepisy, diety, kuchnie świata'
UNION ALL SELECT NULL, 'Moda i Uroda', 'Trendy, pielęgnacja, kosmetyki'
UNION ALL SELECT NULL, 'Prawo', 'Porady prawne, zmiany w przepisach'
) AS seed
WHERE NOT EXISTS (
SELECT 1
FROM global_topics gt
WHERE gt.parent_id <=> seed.parent_id
AND gt.name = seed.name
);
-- Seed: subtopics (idempotent)
INSERT INTO global_topics (parent_id, name, description)
SELECT parent.id, seed.name, seed.description
FROM (
SELECT 'Polityka' AS parent_name, 'Polityka krajowa' AS name, 'Sejm, rząd, partie polityczne, wybory w Polsce' AS description
UNION ALL SELECT 'Polityka', 'Polityka międzynarodowa', 'Dyplomacja, konflikty, organizacje międzynarodowe'
UNION ALL SELECT 'Polityka', 'Unia Europejska', 'Polityka UE, fundusze europejskie, regulacje'
UNION ALL SELECT 'Zdrowie', 'Medycyna', 'Choroby, leczenie, nowinki medyczne'
UNION ALL SELECT 'Zdrowie', 'Zdrowy styl życia', 'Dieta, aktywność fizyczna, profilaktyka'
UNION ALL SELECT 'Zdrowie', 'Zdrowie psychiczne', 'Psychologia, stres, mindfulness, terapia'
UNION ALL SELECT 'Zdrowie', 'Suplementy i żywienie', 'Witaminy, suplementy diety, superfoods'
UNION ALL SELECT 'Sport', 'Piłka nożna', 'Liga, transfery, reprezentacja, piłka nożna na świecie'
UNION ALL SELECT 'Sport', 'Koszykówka', 'NBA, polska liga, Euroliga'
UNION ALL SELECT 'Sport', 'Siatkówka', 'PlusLiga, reprezentacja Polski, siatkówka plażowa'
UNION ALL SELECT 'Sport', 'Sporty walki', 'MMA, boks, judo, karate'
UNION ALL SELECT 'Sport', 'Fitness i siłownia', 'Treningi, plany treningowe, ćwiczenia'
UNION ALL SELECT 'Sport', 'Bieganie', 'Maratony, technika biegu, sprzęt biegowy'
UNION ALL SELECT 'Technologia', 'Sztuczna inteligencja', 'AI, machine learning, ChatGPT, automatyzacja'
UNION ALL SELECT 'Technologia', 'Smartfony i gadżety', 'Recenzje, nowości, porównania urządzeń'
UNION ALL SELECT 'Technologia', 'Programowanie', 'Języki programowania, frameworki, poradniki'
UNION ALL SELECT 'Technologia', 'Cyberbezpieczeństwo', 'Ochrona danych, hakerzy, prywatność w sieci'
UNION ALL SELECT 'Technologia', 'Gaming', 'Gry komputerowe, konsole, esport'
UNION ALL SELECT 'Biznes i Finanse', 'Inwestycje', 'Giełda, kryptowaluty, nieruchomości, fundusze'
UNION ALL SELECT 'Biznes i Finanse', 'Przedsiębiorczość', 'Zakładanie firmy, startupy, zarządzanie'
UNION ALL SELECT 'Biznes i Finanse', 'Oszczędzanie', 'Finanse osobiste, budżet domowy, porady'
UNION ALL SELECT 'Biznes i Finanse', 'Marketing', 'Marketing cyfrowy, SEO, social media, reklama'
UNION ALL SELECT 'Rozrywka', 'Film i seriale', 'Recenzje, premiery, Netflix, kino'
UNION ALL SELECT 'Rozrywka', 'Muzyka', 'Artyści, festiwale, nowości muzyczne'
UNION ALL SELECT 'Rozrywka', 'Książki', 'Recenzje książek, bestsellery, literatura'
UNION ALL SELECT 'Nauka', 'Kosmos', 'NASA, SpaceX, odkrycia astronomiczne'
UNION ALL SELECT 'Nauka', 'Ekologia', 'Zmiany klimatu, recykling, energia odnawialna'
UNION ALL SELECT 'Nauka', 'Historia', 'Ciekawostki historyczne, ważne wydarzenia'
UNION ALL SELECT 'Edukacja', 'Rozwój osobisty', 'Produktywność, nawyki, motywacja'
UNION ALL SELECT 'Edukacja', 'Języki obce', 'Nauka angielskiego, techniki zapamiętywania'
UNION ALL SELECT 'Podróże', 'Podróże po Polsce', 'Atrakcje turystyczne, szlaki, regiony'
UNION ALL SELECT 'Podróże', 'Podróże zagraniczne', 'Egzotyczne kierunki, tanie loty, porady'
UNION ALL SELECT 'Podróże', 'Camping i outdoor', 'Turystyka górska, biwakowanie, sprzęt'
UNION ALL SELECT 'Motoryzacja', 'Samochody elektryczne', 'Tesla, EV, ładowarki, przyszłość elektromobilności'
UNION ALL SELECT 'Motoryzacja', 'Testy i recenzje aut', 'Porównania, testy drogowe, nowości'
UNION ALL SELECT 'Motoryzacja', 'Porady kierowców', 'Ubezpieczenia, prawo jazdy, serwis'
UNION ALL SELECT 'Dom i Ogród', 'Aranżacja wnętrz', 'Design, meble, dekoracje, trendy'
UNION ALL SELECT 'Dom i Ogród', 'Ogrodnictwo', 'Rośliny, uprawy, pielęgnacja ogrodu'
UNION ALL SELECT 'Dom i Ogród', 'Remonty i DIY', 'Majsterkowanie, poradniki remontowe'
UNION ALL SELECT 'Kuchnia', 'Przepisy', 'Obiady, desery, dania na szybko'
UNION ALL SELECT 'Kuchnia', 'Diety', 'Keto, weganizm, intermittent fasting'
UNION ALL SELECT 'Kuchnia', 'Kuchnie świata', 'Włoska, azjatycka, meksykańska'
UNION ALL SELECT 'Moda i Uroda', 'Moda damska', 'Trendy, stylizacje, inspiracje'
UNION ALL SELECT 'Moda i Uroda', 'Moda męska', 'Garnitury, casual, street style'
UNION ALL SELECT 'Moda i Uroda', 'Pielęgnacja', 'Kosmetyki, zabiegi, skincare'
UNION ALL SELECT 'Prawo', 'Prawo pracy', 'Umowy, zwolnienia, prawa pracownika'
UNION ALL SELECT 'Prawo', 'Prawo cywilne', 'Umowy, spadki, nieruchomości'
UNION ALL SELECT 'Prawo', 'Prawo gospodarcze', 'Działalność gospodarcza, podatki, ZUS'
) AS seed
INNER JOIN (
SELECT name, MIN(id) AS id
FROM global_topics
WHERE parent_id IS NULL
GROUP BY name
) AS parent ON parent.name = seed.parent_name
WHERE NOT EXISTS (
SELECT 1
FROM global_topics gt
WHERE gt.parent_id = parent.id
AND gt.name = seed.name
);