Files
Crumb-Core-v.1/app/utils/seed_articles.py

131 lines
3.9 KiB
Python

import os
import json
import pymysql
from pymysql.cursors import DictCursor
# DB Connection Config
DB_HOST = os.getenv("MARIADB_HOST", "db")
DB_USER = os.getenv("MARIADB_USER", "crumb")
DB_PASS = os.getenv("MARIADB_PASSWORD", "secret")
DB_NAME = os.getenv("MARIADB_DATABASE", "crumbcrm")
def get_db():
print(f"🔌 Connecting to {DB_HOST}...")
return pymysql.connect(
host=DB_HOST,
user=DB_USER,
password=DB_PASS,
database=DB_NAME,
autocommit=True,
charset="utf8mb4",
cursorclass=DictCursor,
)
DUMMY_POSTS = [
{
"title": "Was ist RAG? 🤖",
"slug": "was-ist-rag",
"locale": "de",
"excerpt": "Retrieval Augmented Generation einfach erklärt. Warum unser Wald ein Gedächtnis braucht.",
"tags": ["RAG", "Tech", "Grundlagen"],
"author": "System",
"body_md": """# Was ist RAG?
RAG steht für **Retrieval Augmented Generation**.
Stell dir vor, du schreibst eine Prüfung.
* **Ohne RAG**: Du musst alles auswendig wissen (wie ein LLM, das nur sein Training kennt).
* **Mit RAG**: Du darfst in einem offenen Lehrbuch nachschlagen.
## Im Crumbforest
Unser "Lehrbuch" ist die Vektordatenbank (Qdrant).
Wenn du fragst *"Was steht im Tagebuch von Schnippsi?"*, suchen wir erst die passenden Seiten und geben sie der KI.
So halluziniert die KI weniger und kennt deine privaten Daten!"""
},
{
"title": "Die Eule erklärt: JSON in MariaDB 🦉",
"slug": "eule-json-mariadb",
"locale": "de",
"excerpt": "Wussten Sie, dass SQL und NoSQL Freunde sein können? Professor Eule klärt auf.",
"tags": ["Database", "SQL", "Eule"],
"author": "Professor Eule",
"body_md": """# JSON Spalten in SQL
Huhu! 🦉
Viele denken, man muss sich entscheiden: SQL (strikt) oder NoSQL (flexibel).
Aber **MariaDB** erlaubt uns beides!
Wir speichern Tags einfach als JSON:
```json
["RAG", "SQL", "Eule"]
```
## Warum?
* Es ist schnell.
* Wir brauchen keine extra `tags` Tabelle mit komplizierten JOINS für einfache Listen.
* Wir können trotzdem darauf suchen: `JSON_CONTAINS(tags, '"Eule"')`.
Clever, oder? Hu-hu!"""
},
{
"title": "Neu im Wald: Der Blog ist da! 📰",
"slug": "neu-im-wald-blog",
"locale": "de",
"excerpt": "Endlich können wir Neuigkeiten teilen. Willkommen im 'Pulse' Bereich.",
"tags": ["News", "Community", "Update"],
"author": "Krümel",
"body_md": """# Willkommen beim Pulse
Das ist der neue Blog-Bereich ("Pulse").
Hier landen:
* Updates zum System
* Tutorials
* Gedanken aus dem Wald
## Tech-Stack
Diese Seite nutzt:
* **Jinja2** für HTML
* **PicoCSS** für das Design
* **MariaDB** als Content Store
Viel Spaß beim Lesen!"""
}
]
def seed():
conn = get_db()
with conn.cursor() as cur:
print("🌱 Seeding Posts...")
for post in DUMMY_POSTS:
# Check exist
cur.execute("SELECT id FROM posts WHERE slug=%s AND locale=%s", (post['slug'], post['locale']))
if cur.fetchone():
print(f" ⚠️ Skipping '{post['title']}' (already exists)")
continue
# Insert
cur.execute(
"""
INSERT INTO posts (title, slug, locale, excerpt, tags, author, body_md, is_published)
VALUES (%s, %s, %s, %s, %s, %s, %s, 1)
""",
(
post['title'],
post['slug'],
post['locale'],
post['excerpt'],
json.dumps(post['tags']),
post['author'],
post['body_md']
)
)
print(f" ✅ Created '{post['title']}'")
conn.close()
print("✨ Seeding complete.")
if __name__ == "__main__":
seed()