ref(create_note): update handler to use uow with dbcontext
This commit is contained in:
parent
566ba834d4
commit
975986a602
3 changed files with 16 additions and 19 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue