73 lines
3.1 KiB
Python
73 lines
3.1 KiB
Python
# retoor <retoor@molodetz.nl>
|
|
from molodetz.database import (
|
|
insert_post,
|
|
soft_delete,
|
|
update_post_row,
|
|
now_iso,
|
|
db,
|
|
)
|
|
from molodetz.utils.audit import record
|
|
from molodetz.utils.notifications import create_notification
|
|
|
|
|
|
PLACEHOLDER_NOTE = (
|
|
"\n\n> Placeholder. Dit is overgenomen uit de oude Molodetz-pagina. "
|
|
"retoor vervangt dit later door zijn eigen verhaal."
|
|
)
|
|
|
|
|
|
def create_post(user, title, body, topic, status="draft", is_placeholder=False, request=None):
|
|
if is_placeholder and PLACEHOLDER_NOTE.strip() not in body:
|
|
body = body.rstrip() + PLACEHOLDER_NOTE
|
|
row = insert_post(user["uid"], title, body, topic, status=status, is_placeholder=is_placeholder)
|
|
record(request, "post.create", payload={"uid": row["uid"], "status": status}, targets=[("post", row["uid"])], user=user)
|
|
if status == "published":
|
|
create_notification(user["uid"], "post.published", f"Gepubliceerd: {title}", f"/posts/{row['slug']}")
|
|
return row
|
|
|
|
|
|
def edit_post(post, user, title, body, topic, status, is_placeholder=False, request=None):
|
|
fields = {
|
|
"title": title,
|
|
"body": body,
|
|
"topic": topic,
|
|
"status": status,
|
|
"is_placeholder": bool(is_placeholder),
|
|
"updated_at": now_iso(),
|
|
}
|
|
if status == "published" and not post.get("published_at"):
|
|
fields["published_at"] = now_iso()
|
|
update_post_row(post["uid"], **fields)
|
|
record(request, "post.edit", payload={"uid": post["uid"]}, targets=[("post", post["uid"])], user=user)
|
|
return {**post, **fields}
|
|
|
|
|
|
def delete_post(post, actor, request=None):
|
|
stamp = now_iso()
|
|
soft_delete("posts", actor["uid"], stamp=stamp, uid=post["uid"])
|
|
record(
|
|
request,
|
|
"post.delete",
|
|
payload={"uid": post["uid"], "stamp": stamp},
|
|
targets=[("post", post["uid"])],
|
|
user=actor,
|
|
)
|
|
return stamp
|
|
|
|
|
|
def seed_placeholder_posts(admin):
|
|
seeds = [
|
|
("standaard", "Eenendertig keuzes. Jij hebt er nul.", "Python 3.12. FastAPI. Jinja2. SQLite. Geen JWT, want dat is een hobby. Geen JavaScript-framework, want dat is een catalogus. Het document zegt 107 keer MUST. Wie daar \"het hangt ervan af\" van maakt, heeft geen smaak. Die heeft een roadmap van andermans tutorials."),
|
|
("rol", "Een zes is geen ambitie.", "Wie tevreden is met voldoende, bouwt voldoende. Molodetz begint waar dat ophoudt."),
|
|
("rol", "Af is een eigenschap.", "Een project dat open blijft, is een mening. Een project dat af is, is een feit."),
|
|
("rol", "De assistent is geen senior.", "AI versnelt het werk. Het vervangt het oordeel niet. Wie dat door elkaar haalt, levert een chatlog in."),
|
|
("rol", "Geen cursus.", "Kennis gaat hier van mensen naar mensen. Niet via een ebook dat belooft dat je in een weekend iemand anders wordt."),
|
|
]
|
|
created = []
|
|
for topic, title, body in seeds:
|
|
existing = db["posts"].find_one(title=title, deleted_at=None) if "posts" in db.tables else None
|
|
if existing:
|
|
continue
|
|
created.append(create_post(admin, title, body, topic, status="published", is_placeholder=topic == "rol"))
|
|
return created
|