ref(create_note): update handler to use uow with dbcontext

This commit is contained in:
Kristian Borgwarth 2026-04-04 00:19:09 +02:00
parent 566ba834d4
commit 975986a602
3 changed files with 16 additions and 19 deletions

View file

@ -13,6 +13,7 @@ func main() {
server := server.NewServer() server := server.NewServer()
server.RegisterHandler("initialize", handlers.NewInitializeHandler()) server.RegisterHandler("initialize", handlers.NewInitializeHandler())
server.RegisterHandler("createNote", handlers.NewCreateNoteHandler())
if err := server.Run(os.Stdin, os.Stdout); err != nil { if err := server.Run(os.Stdin, os.Stdout); err != nil {
slog.Error("server error", "error", err) slog.Error("server error", "error", err)

View file

@ -26,7 +26,7 @@ func NewCreateNoteHandler() *CreateNoteHandler {
return &CreateNoteHandler{repositories.NewUnitOfWork()} return &CreateNoteHandler{repositories.NewUnitOfWork()}
} }
func (h *CreateNoteHandler) Handle(ctx context.Context, uow *repositories.UnitOfWork, raw json.RawMessage) (any, error) { func (h *CreateNoteHandler) Handle(ctx context.Context, raw json.RawMessage) (any, error) {
var cmd createNoteCommand var cmd createNoteCommand
if err := json.Unmarshal(raw, &cmd); err != nil { if err := json.Unmarshal(raw, &cmd); err != nil {
@ -45,12 +45,12 @@ func (h *CreateNoteHandler) Handle(ctx context.Context, uow *repositories.UnitOf
return nil, err return nil, err
} }
tx, err := uow.Begin() tx, err := h.uow.Begin()
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer uow.Rollback() defer h.uow.Rollback()
tagRepo := repositories.NewTagRepository(tx) tagRepo := repositories.NewTagRepository(tx)
noteRepo := repositories.NewNoteRepository(tx) noteRepo := repositories.NewNoteRepository(tx)
@ -74,9 +74,9 @@ func (h *CreateNoteHandler) Handle(ctx context.Context, uow *repositories.UnitOf
return nil, err return nil, err
} }
uow.FileStore.Stage(cmd.Path, data) h.uow.FileStore.Stage(cmd.Path, data)
if err = uow.Commit(); err != nil { if err = h.uow.Commit(); err != nil {
return nil, err return nil, err
} }

View file

@ -7,16 +7,14 @@ import (
"testing" "testing"
"github.com/KristianJBorgwarth/dendrite.daemon/core/handlers" "github.com/KristianJBorgwarth/dendrite.daemon/core/handlers"
"github.com/KristianJBorgwarth/dendrite.daemon/persistence/repositories"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestCreateNoteHandler_NoTemplate_CreatesNoteFileAndReturnsPath(t *testing.T) { func TestCreateNoteHandler_NoTemplate_CreatesNoteFileAndReturnsPath(t *testing.T) {
// Arrange // Arrange
handler := handlers.NewCreateNoteHandler() handler := handlers.NewCreateNoteHandler()
uow := repositories.NewUnitOfWork()
notePath := filepath.Join(t.TempDir(), "my-note.md") notePath := filepath.Join(t.TempDir(), "my-note.md")
params, _ := json.Marshal(map[string]any{ params, _ := json.Marshal(map[string]any{
"title": "My Note", "title": "My Note",
@ -24,7 +22,7 @@ func TestCreateNoteHandler_NoTemplate_CreatesNoteFileAndReturnsPath(t *testing.T
}) })
// Act // Act
result, err := handler.Handle(Fixture.TestContext, uow, params) result, err := handler.Handle(Fixture.TestContext, params)
// Assert // Assert
require.NoError(t, err) require.NoError(t, err)
@ -41,7 +39,6 @@ func TestCreateNoteHandler_NoTemplate_CreatesNoteFileAndReturnsPath(t *testing.T
func TestCreateNoteHandler_WithTemplate_CreatesNoteFileWithTagsAndReturnsPath(t *testing.T) { func TestCreateNoteHandler_WithTemplate_CreatesNoteFileWithTagsAndReturnsPath(t *testing.T) {
// Arrange // Arrange
handler := handlers.NewCreateNoteHandler() handler := handlers.NewCreateNoteHandler()
uow := repositories.NewUnitOfWork()
dir := t.TempDir() dir := t.TempDir()
templatePath := filepath.Join(dir, "template.md") templatePath := filepath.Join(dir, "template.md")
@ -55,7 +52,7 @@ func TestCreateNoteHandler_WithTemplate_CreatesNoteFileWithTagsAndReturnsPath(t
}) })
// Act // Act
result, err := handler.Handle(Fixture.TestContext, uow, params) result, err := handler.Handle(Fixture.TestContext, params)
// Assert // Assert
require.NoError(t, err) require.NoError(t, err)
@ -85,19 +82,18 @@ func TestCreateNoteHandler_DuplicateSlug_Upserts(t *testing.T) {
// Arrange // Arrange
dir := t.TempDir() dir := t.TempDir()
handler := handlers.NewCreateNoteHandler() handler := handlers.NewCreateNoteHandler()
uowInit := repositories.NewUnitOfWork()
secondUow := repositories.NewUnitOfWork()
path1 := filepath.Join(dir, "dup-note.md") path1 := filepath.Join(dir, "dup-note.md")
params1, _ := json.Marshal(map[string]any{"title": "Dup Note", "path": path1}) params1, _ := json.Marshal(map[string]any{"title": "Dup Note", "path": path1})
_, err := handler.Handle(Fixture.TestContext, uowInit, params1) _, err := handler.Handle(Fixture.TestContext, params1)
require.NoError(t, err) require.NoError(t, err)
path2 := filepath.Join(dir, "dup-note-moved.md") path2 := filepath.Join(dir, "dup-note-moved.md")
params2, _ := json.Marshal(map[string]any{"title": "Dup Note", "path": path2}) params2, _ := json.Marshal(map[string]any{"title": "Dup Note", "path": path2})
// Act // Act
_, err = handler.Handle(Fixture.TestContext, secondUow, params2) _, err = handler.Handle(Fixture.TestContext, params2)
// Assert // Assert
require.NoError(t, err) require.NoError(t, err)
@ -114,10 +110,10 @@ func TestCreateNoteHandler_DuplicateSlug_Upserts(t *testing.T) {
func TestCreateNoteHandler_InvalidJSON_ReturnsError(t *testing.T) { func TestCreateNoteHandler_InvalidJSON_ReturnsError(t *testing.T) {
// Arrange // Arrange
handler := handlers.NewCreateNoteHandler() handler := handlers.NewCreateNoteHandler()
uow := repositories.NewUnitOfWork()
// Act // Act
_, err := handler.Handle(Fixture.TestContext, uow, json.RawMessage(`{invalid json}`)) _, err := handler.Handle(Fixture.TestContext, json.RawMessage(`{invalid json}`))
// Assert // Assert
assert.Error(t, err) assert.Error(t, err)
@ -126,7 +122,7 @@ func TestCreateNoteHandler_InvalidJSON_ReturnsError(t *testing.T) {
func TestCreateNoteHandler_NonExistentTemplatePath_ReturnsError(t *testing.T) { func TestCreateNoteHandler_NonExistentTemplatePath_ReturnsError(t *testing.T) {
// Arrange // Arrange
handler := handlers.NewCreateNoteHandler() handler := handlers.NewCreateNoteHandler()
uow := repositories.NewUnitOfWork()
params, _ := json.Marshal(map[string]any{ params, _ := json.Marshal(map[string]any{
"title": "Ghost Note", "title": "Ghost Note",
"path": filepath.Join(t.TempDir(), "ghost.md"), "path": filepath.Join(t.TempDir(), "ghost.md"),
@ -134,7 +130,7 @@ func TestCreateNoteHandler_NonExistentTemplatePath_ReturnsError(t *testing.T) {
}) })
// Act // Act
_, err := handler.Handle(Fixture.TestContext, uow, params) _, err := handler.Handle(Fixture.TestContext, params)
// Assert // Assert
assert.Error(t, err) assert.Error(t, err)