50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from flask import Blueprint, abort, redirect, render_template, request, url_for
|
|
|
|
from app.services.notes_fs import create_note, list_notes, load_note_by_id, update_note_body
|
|
|
|
bp = Blueprint("notes", __name__, url_prefix="/notes")
|
|
|
|
|
|
@bp.get("/")
|
|
def notes_index():
|
|
notes = list_notes()
|
|
return render_template("notes/list.html", notes=notes)
|
|
|
|
|
|
@bp.get("/new")
|
|
def notes_new():
|
|
return render_template("notes/new.html")
|
|
|
|
|
|
@bp.post("/")
|
|
def notes_create():
|
|
title = (request.form.get("title") or "").strip()
|
|
body = (request.form.get("body") or "").strip()
|
|
tags_raw = (request.form.get("tags") or "").strip()
|
|
tags = [t.strip() for t in tags_raw.split(",") if t.strip()] if tags_raw else []
|
|
|
|
if not title:
|
|
return render_template("notes/new.html", error="Title is required", title=title, body=body, tags_raw=tags_raw), 400
|
|
|
|
note = create_note(title=title, body=body, tags=tags)
|
|
return redirect(url_for("notes.notes_view", note_id=note.id))
|
|
|
|
|
|
@bp.get("/<note_id>")
|
|
def notes_view(note_id: str):
|
|
note = load_note_by_id(note_id)
|
|
if not note:
|
|
abort(404)
|
|
# M2 will render Markdown; for now show raw body and metadata
|
|
return render_template("notes/view.html", note=note)
|
|
|
|
|
|
@bp.post("/<note_id>/body")
|
|
def notes_update_body(note_id: str):
|
|
new_body = request.form.get("body") or ""
|
|
note = update_note_body(note_id, new_body)
|
|
if not note:
|
|
abort(404)
|
|
return redirect(url_for("notes.notes_view", note_id=note.id)) |