From a76915c7fcd13129cf38a6d014cf569d1e2047a3 Mon Sep 17 00:00:00 2001 From: Darius Rapalis Date: Tue, 11 Mar 2025 15:08:29 +0200 Subject: [PATCH] #11 - unfollow --- internal/database/feleteFeedFollow.sql.go | 26 +++++++++++++++++++ internal/handlers/addFeedHandler.go | 2 +- internal/handlers/fetchFeedHandler.go | 2 +- internal/handlers/followFeedHandler.go | 2 +- internal/handlers/unfollowFeedHandler.go | 31 +++++++++++++++++++++++ main.go | 1 + sql/queries/feleteFeedFollow.sql | 2 ++ 7 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 internal/database/feleteFeedFollow.sql.go create mode 100644 internal/handlers/unfollowFeedHandler.go create mode 100644 sql/queries/feleteFeedFollow.sql diff --git a/internal/database/feleteFeedFollow.sql.go b/internal/database/feleteFeedFollow.sql.go new file mode 100644 index 0000000..6612e81 --- /dev/null +++ b/internal/database/feleteFeedFollow.sql.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: feleteFeedFollow.sql + +package database + +import ( + "context" + + "github.com/google/uuid" +) + +const deleteFeedFollow = `-- name: DeleteFeedFollow :exec +DELETE FROM feed_follows WHERE feed_follows.user_id = $1 AND feed_follows.feed_id = (SELECT id FROM feeds WHERE url = $2) +` + +type DeleteFeedFollowParams struct { + UserID uuid.UUID + Url string +} + +func (q *Queries) DeleteFeedFollow(ctx context.Context, arg DeleteFeedFollowParams) error { + _, err := q.db.ExecContext(ctx, deleteFeedFollow, arg.UserID, arg.Url) + return err +} diff --git a/internal/handlers/addFeedHandler.go b/internal/handlers/addFeedHandler.go index 7cbfb89..5fdeeef 100644 --- a/internal/handlers/addFeedHandler.go +++ b/internal/handlers/addFeedHandler.go @@ -52,7 +52,7 @@ func AddFeedHandler(s *config.State, cmd config.Command, user database.User) err return err } - fmt.Printf("%v", f) + fmt.Printf("%v\n", f) return nil } diff --git a/internal/handlers/fetchFeedHandler.go b/internal/handlers/fetchFeedHandler.go index 048dc5a..39a2d25 100644 --- a/internal/handlers/fetchFeedHandler.go +++ b/internal/handlers/fetchFeedHandler.go @@ -24,7 +24,7 @@ func FetchFeedHandler(s *config.State, cmd config.Command) error { os.Exit(1) } - fmt.Printf("%v", feed) + fmt.Printf("%v\n", feed) return nil } diff --git a/internal/handlers/followFeedHandler.go b/internal/handlers/followFeedHandler.go index 4a962a5..c513a91 100644 --- a/internal/handlers/followFeedHandler.go +++ b/internal/handlers/followFeedHandler.go @@ -56,7 +56,7 @@ func FollowFeedHandler(s *config.State, cmd config.Command, user database.User) return err } - fmt.Printf("%v", feed) + fmt.Printf("%v\n", feed) return nil } diff --git a/internal/handlers/unfollowFeedHandler.go b/internal/handlers/unfollowFeedHandler.go new file mode 100644 index 0000000..c4fcfdc --- /dev/null +++ b/internal/handlers/unfollowFeedHandler.go @@ -0,0 +1,31 @@ +package handlers + +import ( + "context" + "fmt" + "github.com/rdarius/boot-dev-blog-aggregator/internal/config" + "github.com/rdarius/boot-dev-blog-aggregator/internal/database" + "log" +) + +func UnfollowFeedHandler(s *config.State, cmd config.Command, user database.User) error { + if len(cmd.Args) < 1 { + log.Fatal("usage: boot-dev-blog-aggregator unfollow URL") + } + ctx := context.Background() + + url := cmd.Args[0] + + err := s.DB.DeleteFeedFollow(ctx, database.DeleteFeedFollowParams{ + UserID: user.ID, + Url: url, + }) + + if err != nil { + return err + } + + fmt.Println("Feed unfollow successfully") + + return nil +} diff --git a/main.go b/main.go index a35ac6d..8109243 100644 --- a/main.go +++ b/main.go @@ -40,6 +40,7 @@ func main() { commands.Register("addfeed", middlewareLoggedIn(handlers.AddFeedHandler)) commands.Register("feeds", handlers.ListFeedsHandler) commands.Register("follow", middlewareLoggedIn(handlers.FollowFeedHandler)) + commands.Register("unfollow", middlewareLoggedIn(handlers.UnfollowFeedHandler)) commands.Register("following", middlewareLoggedIn(handlers.GetFeedFollowsByUserHandler)) if len(os.Args) < 2 { diff --git a/sql/queries/feleteFeedFollow.sql b/sql/queries/feleteFeedFollow.sql new file mode 100644 index 0000000..ca67a3a --- /dev/null +++ b/sql/queries/feleteFeedFollow.sql @@ -0,0 +1,2 @@ +-- name: DeleteFeedFollow :exec +DELETE FROM feed_follows WHERE feed_follows.user_id = $1 AND feed_follows.feed_id = (SELECT id FROM feeds WHERE url = $2); \ No newline at end of file