From ed8b8860b71916dc78bb6b26ff9b86e37c4e5dc0 Mon Sep 17 00:00:00 2001 From: Darius Rapalis Date: Tue, 11 Mar 2025 14:10:01 +0200 Subject: [PATCH] #8 - list feeds, no content still --- internal/database/listFeeds.sql.go | 43 +++++++++++++++++++++++++++ internal/handlers/addFeedHandler.go | 2 +- internal/handlers/listFeedsHandler.go | 21 +++++++++++++ main.go | 1 + sql/queries/listFeeds.sql | 2 ++ 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 internal/database/listFeeds.sql.go create mode 100644 internal/handlers/listFeedsHandler.go create mode 100644 sql/queries/listFeeds.sql diff --git a/internal/database/listFeeds.sql.go b/internal/database/listFeeds.sql.go new file mode 100644 index 0000000..ba6b1e4 --- /dev/null +++ b/internal/database/listFeeds.sql.go @@ -0,0 +1,43 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: listFeeds.sql + +package database + +import ( + "context" +) + +const listFeeds = `-- name: ListFeeds :many +SELECT name, url, (SELECT name FROM users WHERE users.id = feeds.user_id) as user_name FROM feeds +` + +type ListFeedsRow struct { + Name string + Url string + UserName string +} + +func (q *Queries) ListFeeds(ctx context.Context) ([]ListFeedsRow, error) { + rows, err := q.db.QueryContext(ctx, listFeeds) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ListFeedsRow + for rows.Next() { + var i ListFeedsRow + if err := rows.Scan(&i.Name, &i.Url, &i.UserName); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/handlers/addFeedHandler.go b/internal/handlers/addFeedHandler.go index a7d5d78..4222d45 100644 --- a/internal/handlers/addFeedHandler.go +++ b/internal/handlers/addFeedHandler.go @@ -34,7 +34,7 @@ func AddFeedHandler(s *config.State, cmd config.Command) error { } f, err := s.DB.CreateFeed(ctx, database.CreateFeedParams{ - ID: uuid.UUID{}, + ID: uuid.New(), CreatedAt: time.Time{}, UpdatedAt: time.Time{}, UserID: user.ID, diff --git a/internal/handlers/listFeedsHandler.go b/internal/handlers/listFeedsHandler.go new file mode 100644 index 0000000..1a3989c --- /dev/null +++ b/internal/handlers/listFeedsHandler.go @@ -0,0 +1,21 @@ +package handlers + +import ( + "context" + "fmt" + "github.com/rdarius/boot-dev-blog-aggregator/internal/config" +) + +func ListFeedsHandler(s *config.State, cmd config.Command) error { + ctx := context.Background() + feeds, err := s.DB.ListFeeds(ctx) + if err != nil { + return err + } + + for _, feed := range feeds { + fmt.Printf("Article: %s | Url: %s | User: %s\n", feed.Name, feed.Url, feed.UserName) + } + + return nil +} diff --git a/main.go b/main.go index fcbc15d..1f2353a 100644 --- a/main.go +++ b/main.go @@ -37,6 +37,7 @@ func main() { commands.Register("users", handlers.GetUsersHandler) commands.Register("agg", handlers.FetchFeedHandler) commands.Register("addfeed", handlers.AddFeedHandler) + commands.Register("feeds", handlers.ListFeedsHandler) if len(os.Args) < 2 { log.Fatal("usage: boot-dev-blog-aggregator [args...]") diff --git a/sql/queries/listFeeds.sql b/sql/queries/listFeeds.sql new file mode 100644 index 0000000..3ea108d --- /dev/null +++ b/sql/queries/listFeeds.sql @@ -0,0 +1,2 @@ +-- name: ListFeeds :many +SELECT name, url, (SELECT name FROM users WHERE users.id = feeds.user_id) as user_name FROM feeds; \ No newline at end of file