42 lines
811 B
Go
42 lines
811 B
Go
package completion
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/KristianJBorgwarth/dendrite.daemon/persistence/repositories"
|
|
)
|
|
|
|
type completeSlugCommand struct {
|
|
Query string `json:"query"`
|
|
}
|
|
|
|
type CompleteSlugHandler struct {
|
|
noteRepo repositories.INoteRepository
|
|
}
|
|
|
|
func NewCompleteSlugHandler(nr repositories.INoteRepository) *CompleteSlugHandler {
|
|
return &CompleteSlugHandler{noteRepo: nr}
|
|
}
|
|
|
|
func (h *CompleteSlugHandler) Handle(ctx context.Context, raw json.RawMessage) (any, error) {
|
|
var cmd completeSlugCommand
|
|
|
|
if err := json.Unmarshal(raw, &cmd); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
notes, err := h.noteRepo.Search(ctx, cmd.Query)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
slugs := make([]string, len(notes))
|
|
for i, note := range notes {
|
|
slugs[i] = note.Slug()
|
|
}
|
|
|
|
return slugs, nil
|
|
}
|
|
|
|
|