feat(note/delete): added note delete handler (#38)

This commit is contained in:
Kristian 2026-05-09 14:46:53 +02:00 committed by GitHub
parent 8a6543611e
commit c0924342fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 83 additions and 0 deletions

View file

@ -36,6 +36,7 @@ func main() {
server.RegisterHandler("note/create", note.NewCreateNoteHandler(uow, tagService, noteRepo))
server.RegisterHandler("note/save", note.NewSaveNoteHandler(uow, noteRepo, tagService, noteService, linkService))
server.RegisterHandler("note/delete", note.NewDeleteNoteHandler(uow, tagService, noteService))
server.RegisterHandler("note/goto", note.NewGotoNoteHandler(noteRepo))
server.RegisterHandler("note/backlinks", note.NewGetBackLinksHandler(linkRepo, noteRepo))
server.RegisterHandler("note/search_by_tag", note.NewGetNotesByTagHandler(noteRepo))

View file

@ -0,0 +1,57 @@
package note
import (
"context"
"encoding/json"
"github.com/KristianJBorgwarth/dendrite.daemon/core/services"
"github.com/KristianJBorgwarth/dendrite.daemon/persistence/repositories"
)
type deleteNoteCommand struct {
Path string `json:"path"`
}
type DeleteNoteHandler struct {
uow *repositories.UnitOfWork
tagService services.ITagService
noteService services.INoteService
}
func NewDeleteNoteHandler(
uow *repositories.UnitOfWork,
tagService services.ITagService,
noteService services.INoteService,
) *DeleteNoteHandler {
return &DeleteNoteHandler{uow, tagService, noteService}
}
func (h *DeleteNoteHandler) Handle(ctx context.Context, raw json.RawMessage) (any, error) {
var cmd deleteNoteCommand
if err := json.Unmarshal(raw, &cmd); err != nil {
return nil, err
}
tx, err := h.uow.Begin()
if err != nil {
return nil, err
}
defer h.uow.Rollback()
note, err := h.noteService.GetByPath(ctx, tx, cmd.Path)
if err != nil {
return nil, err
}
err = h.noteService.DeleteNote(ctx, tx, note.ID())
if err != nil {
return nil, err
}
if h.uow.Commit() != nil {
return nil, err
}
return nil, nil
}

View file

@ -11,6 +11,8 @@ import (
type INoteService interface {
CreateNote(ctx context.Context, dbCtx persistence.IDbContext, path, title, slug string) (*models.Note, error)
DeleteNoteMetaData(ctx context.Context, dbCtx persistence.IDbContext, noteID string) error
DeleteNote(ctx context.Context, dbCtx persistence.IDbContext, path string) error
GetByPath(ctx context.Context, dbCtx persistence.IDbContext, path string) (*models.Note, error)
UpdateNote(ctx context.Context, dbCtx persistence.IDbContext, noteID, path, title, slug string) error
GetNoteCount(ctx context.Context) (int, error)
}
@ -57,6 +59,22 @@ func (s *noteService) DeleteNoteMetaData(ctx context.Context, dbCtx persistence.
return nil
}
func (s *noteService) DeleteNote(ctx context.Context, dbCtx persistence.IDbContext, noteID string) error {
if err := s.DeleteNoteMetaData(ctx, dbCtx, noteID); err != nil {
return err
}
if err := s.noteRepo.Delete(ctx, dbCtx, noteID); err != nil {
return err
}
return nil
}
func (s *noteService) GetNoteCount(ctx context.Context) (int, error) {
return s.noteRepo.GetNoteCount(ctx)
}
func (s *noteService) GetByPath(ctx context.Context, dbCtx persistence.IDbContext, path string) (*models.Note, error) {
return s.noteRepo.GetByPath(ctx,path)
}

BIN
dendrite

Binary file not shown.

View file

@ -13,6 +13,7 @@ type INoteRepository interface {
Insert(ctx context.Context, dbContext persistence.IDbContext, note *models.Note) error
InsertRange(ctx context.Context, dbContext persistence.IDbContext, note []*models.Note) error
Update(ctx context.Context, dbContext persistence.IDbContext, noteID, path, title, slug string) error
Delete(ctx context.Context, dbContext persistence.IDbContext, noteID string) error
Search(ctx context.Context, query string) ([]*models.Note, error)
GetBySlug(ctx context.Context, slug string) (*models.Note, error)
GetByPath(ctx context.Context, path string) (*models.Note, error)
@ -70,6 +71,12 @@ func (r *noteRepository) Update(ctx context.Context, dbContext persistence.IDbCo
return nil
}
func (r *noteRepository) Delete(ctx context.Context, dbContext persistence.IDbContext, noteID string) error {
query := `DELETE FROM note WHERE id= ?`
_, err := dbContext.ExecContext(ctx, query, noteID)
return err
}
func (r *noteRepository) GetBySlug(ctx context.Context, slug string) (*models.Note, error) {
query := `SELECT id, title, path, slug, created_at, updated_at FROM note WHERE slug = ?`
row := r.readDBContext.QueryRowContext(ctx, query, slug)