journal/Journal.Core/Models/ListDocument.cs
Jacob Schmidt c7933aeeec Lists & todos backend, editor refactor, inline create, UX improvements
- Wire up lists and todos to C# backend with full CRUD persistence
- Add models, DTOs, repositories, and services for lists and todo lists/items
- Preserve SQLite DB across vault rebuild/load cycles
- Add session store for vault password persistence across navigation
- Add inline name input for creating lists and todo lists in SidePanel
- Clear editor panel on section change with empty state placeholder
- Default markdown editor to preview mode on item selection
- Decompose EditorPanel into sub-components:
  - editor/FragmentEditor, editor/TodoEditor, editor/MarkdownEditor
  - Shared markdown utilities in utils/markdown.ts
- Strip verbose console/eprintln logging from frontend and Tauri backend
- Add graceful shutdown with vault persistence on window close

Co-Authored-By: Oz <oz-agent@warp.dev>
2026-02-26 17:33:27 -06:00

41 lines
1.1 KiB
C#

namespace Journal.Core.Models;
public class ListDocument
{
public Guid Id { get; }
public string Label { get; set; }
public string Content { get; set; }
public DateTimeOffset CreatedAt { get; set; }
public DateTimeOffset UpdatedAt { get; set; }
public ListDocument(string label, string content = "")
{
Validate(label);
Id = Guid.NewGuid();
Label = label.Trim();
Content = content;
CreatedAt = DateTimeOffset.Now;
UpdatedAt = CreatedAt;
}
public ListDocument(Guid id, string label, string content, DateTimeOffset createdAt, DateTimeOffset updatedAt)
{
if (id == Guid.Empty)
throw new ArgumentException("Id is required", nameof(id));
Validate(label);
Id = id;
Label = label.Trim();
Content = content;
CreatedAt = createdAt;
UpdatedAt = updatedAt;
}
private static void Validate(string label)
{
if (string.IsNullOrWhiteSpace(label))
throw new ArgumentException("Label is required", nameof(label));
}
}