From 75155dc536881f324ad2193001108ce1aeace696 Mon Sep 17 00:00:00 2001 From: Kristian Borgwarth <10348902@pm.me> Date: Wed, 8 Apr 2026 21:55:20 +0200 Subject: [PATCH] feat(link_repo): added slug and id query --- persistence/repositories/link_repository.go | 61 +++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 persistence/repositories/link_repository.go diff --git a/persistence/repositories/link_repository.go b/persistence/repositories/link_repository.go new file mode 100644 index 0000000..75375cc --- /dev/null +++ b/persistence/repositories/link_repository.go @@ -0,0 +1,61 @@ +package repositories + +import ( + "context" + "database/sql" + + "github.com/KristianJBorgwarth/dendrite.daemon/core/models" +) + +type ILinkRepository interface { + GetByNoteID(ctx context.Context, fromNoteID string) ([]*models.Link, error) + GetBySlug(ctx context.Context, targetSlug string) ([]*models.Link, error) +} + +type linkRepository struct { + Transaction *sql.Tx +} + +func NewLinkRepository(tx *sql.Tx) ILinkRepository { + return &linkRepository{Transaction: tx} +} + +func (r *linkRepository) GetByNoteID(ctx context.Context, fromNoteID string) ([]*models.Link, error) { + rows, err := r.Transaction.QueryContext(ctx, "SELECT id, from_note_id, target_slug, raw, display, line, col FROM links WHERE from_note_id = ?", fromNoteID) + if err != nil { + return nil, err + } + defer rows.Close() + + var links []*models.Link + for rows.Next() { + var id, fromNoteID, targetSlug, raw, display string + var line, col int + if err := rows.Scan(&id, &fromNoteID, &targetSlug, &raw, &display, &line, &col); err != nil { + return nil, err + } + links = append(links, models.NewLink(id, fromNoteID, targetSlug, raw, display, line, col)) + } + + return links, nil +} + +func (r *linkRepository) GetBySlug(ctx context.Context, targetSlug string) ([]*models.Link, error) { + rows, err := r.Transaction.QueryContext(ctx, `SELECT id, from_note_id, target_slug, raw, display, line, col FROM links WHERE target_slug = ?`, targetSlug) + if err != nil { + return nil, err + } + defer rows.Close() + + var links []*models.Link + for rows.Next() { + var id, fromNoteID, targetSlug, raw, display string + var line, col int + if err := rows.Scan(&id, &fromNoteID, &targetSlug, &raw, &display, &line, &col); err != nil { + return nil, err + } + links = append(links, models.NewLink(id, fromNoteID, targetSlug, raw, display, line, col)) + } + + return links, nil +}