feat: add comments feature with nested replies and recursive rendering
All checks were successful
ci/woodpecker/pr/pipeline Pipeline was successful
All checks were successful
ci/woodpecker/pr/pipeline Pipeline was successful
Implement full comments system: domain entities (Comment, CommentLike), value objects (CommentContent), use cases (CRUD, like toggle), SQLAlchemy repository, API v1 endpoints, web UI with comment form and nested replies, i18n translations (EN/RU/FR/DE), and E2E tests. Fix nested reply (reply-to-reply) not displaying — the flat reply_comments dict was only queried for top-level comment IDs, so deeply nested replies were saved to DB (incrementing comment count) but never rendered. Switch to a recursive Jinja2 macro that renders any nesting depth.
This commit is contained in:
@@ -43,6 +43,16 @@ TRANSLATIONS: dict[str, dict[str, str]] = {
|
||||
"post.edit": "Edit",
|
||||
"post.delete": "Delete",
|
||||
"post.delete_confirm": "Are you sure you want to delete this post?",
|
||||
"post.comments": "Comments",
|
||||
"post.write_comment": "Write a Comment",
|
||||
"post.comment_placeholder": "Write a comment... Markdown is supported.",
|
||||
"post.replying_to": "Replying to",
|
||||
"post.cancel_reply": "Cancel reply",
|
||||
"post.cancel": "Cancel",
|
||||
"post.submit_comment": "Submit Comment",
|
||||
"post.reply": "Reply",
|
||||
"post.no_comments": "No comments yet. Be the first to comment!",
|
||||
"post.comment_error": "Failed to post comment. Please try again.",
|
||||
"post_form.title_edit": "Edit Post",
|
||||
"post_form.title_new": "New Post",
|
||||
"post_form.page_title_edit": "Edit Post",
|
||||
@@ -125,6 +135,16 @@ TRANSLATIONS: dict[str, dict[str, str]] = {
|
||||
"post.edit": "Редактировать",
|
||||
"post.delete": "Удалить",
|
||||
"post.delete_confirm": "Вы уверены, что хотите удалить эту статью?",
|
||||
"post.comments": "Комментарии",
|
||||
"post.write_comment": "Написать комментарий",
|
||||
"post.comment_placeholder": "Напишите комментарий... Поддерживается Markdown.",
|
||||
"post.replying_to": "Ответ",
|
||||
"post.cancel_reply": "Отменить ответ",
|
||||
"post.cancel": "Отмена",
|
||||
"post.submit_comment": "Отправить",
|
||||
"post.reply": "Ответить",
|
||||
"post.no_comments": "Пока нет комментариев. Будьте первым!",
|
||||
"post.comment_error": "Не удалось отправить комментарий. Попробуйте снова.",
|
||||
"post_form.title_edit": "Редактировать статью",
|
||||
"post_form.title_new": "Новая статья",
|
||||
"post_form.page_title_edit": "Редактировать статью",
|
||||
@@ -207,6 +227,16 @@ TRANSLATIONS: dict[str, dict[str, str]] = {
|
||||
"post.edit": "Modifier",
|
||||
"post.delete": "Supprimer",
|
||||
"post.delete_confirm": "Êtes-vous sûr de vouloir supprimer cet article ?",
|
||||
"post.comments": "Commentaires",
|
||||
"post.write_comment": "Écrire un commentaire",
|
||||
"post.comment_placeholder": "Écrivez un commentaire... Markdown est supporté.",
|
||||
"post.replying_to": "Répondre à",
|
||||
"post.cancel_reply": "Annuler la réponse",
|
||||
"post.cancel": "Annuler",
|
||||
"post.submit_comment": "Soumettre",
|
||||
"post.reply": "Répondre",
|
||||
"post.no_comments": "Aucun commentaire pour le moment. Soyez le premier !",
|
||||
"post.comment_error": "Échec de l'envoi du commentaire. Veuillez réessayer.",
|
||||
"post_form.title_edit": "Modifier l'article",
|
||||
"post_form.title_new": "Nouvel article",
|
||||
"post_form.page_title_edit": "Modifier l'article",
|
||||
@@ -289,6 +319,16 @@ TRANSLATIONS: dict[str, dict[str, str]] = {
|
||||
"post.edit": "Bearbeiten",
|
||||
"post.delete": "Löschen",
|
||||
"post.delete_confirm": "Sind Sie sicher, dass Sie diesen Beitrag löschen möchten?",
|
||||
"post.comments": "Kommentare",
|
||||
"post.write_comment": "Kommentar schreiben",
|
||||
"post.comment_placeholder": "Schreiben Sie einen Kommentar... Markdown wird unterstützt.",
|
||||
"post.replying_to": "Antwort an",
|
||||
"post.cancel_reply": "Antwort abbrechen",
|
||||
"post.cancel": "Abbrechen",
|
||||
"post.submit_comment": "Absenden",
|
||||
"post.reply": "Antworten",
|
||||
"post.no_comments": "Noch keine Kommentare. Seien Sie der Erste!",
|
||||
"post.comment_error": "Kommentar konnte nicht gesendet werden. Bitte versuchen Sie es erneut.",
|
||||
"post_form.title_edit": "Beitrag bearbeiten",
|
||||
"post_form.title_new": "Neuer Beitrag",
|
||||
"post_form.page_title_edit": "Beitrag bearbeiten",
|
||||
|
||||
Reference in New Issue
Block a user