- Replace the plain textarea with EasyMDE (vendored locally, no CDN) for markdown authoring: syntax highlighting, smart list continuation, and a custom text-based toolbar (built-in EasyMDE toolbar icons require Font Awesome from a CDN, which this app doesn't use). unorderedListStyle is set to "-" to match the app's own template convention. - Add a preview/edit toggle button that swaps the editor for the exact same server-rendered markdown (via /journal/preview) shown after saving, instead of always showing both. - Fix create/edit entry routes to verify the submitted category_id actually belongs to the current user before inserting -- every other write path in this app already checked ownership; this one didn't (found while manually testing the new editor with a typo'd category id that happened to belong to someone else's category, which surfaced as an IntegrityError 500 instead of a clean 404-equivalent). - Fix the default "일상" category template: bare "-" bullet lines don't parse as list items in the markdown renderer (they need a trailing space), and the content_template validator was silently stripping that trailing space off on every save. Backfill migration updates any category still holding the old, broken template text. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
35 lines
992 B
TOML
35 lines
992 B
TOML
[project]
|
|
name = "habit-tracker"
|
|
version = "0.1.0"
|
|
description = "개인용 습관 관리 PWA"
|
|
requires-python = ">=3.11"
|
|
dependencies = [
|
|
"fastapi>=0.115",
|
|
"uvicorn[standard]>=0.32",
|
|
"sqlalchemy>=2.0",
|
|
"alembic>=1.13",
|
|
"pymysql>=1.1",
|
|
"pydantic-settings>=2.5",
|
|
"jinja2>=3.1",
|
|
"python-multipart>=0.0.9",
|
|
"itsdangerous>=2.2",
|
|
"bcrypt>=4.0",
|
|
"apscheduler>=3.10",
|
|
"pywebpush>=2.0",
|
|
"py-vapid>=1.9",
|
|
"authlib>=1.3",
|
|
"httpx>=0.27",
|
|
"pillow>=10.0", # scripts/generate_icons.py 아이콘 재생성 + 저널 첨부 이미지 썸네일 생성(런타임)
|
|
"markdown>=3.7", # 저널 기록 내용을 마크다운으로 렌더링
|
|
"bleach>=6.0", # 렌더링된 마크다운 HTML을 허용 태그만 남기고 sanitize (XSS 방지)
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"paramiko>=3.4", # scripts/deploy_sftp.py SFTP 배포용 (런타임 미사용)
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
include = ["app*"]
|