diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-01 10:05:13 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-01 10:05:13 +0900 |
| commit | 1d78371e13c19488d472257ab614e0be17bfa85e (patch) | |
| tree | 6c14cf068faac9a9a411d1cf6c436ae23ba235c2 /backend/graphql | |
| parent | 65d6ebca318fecb48b32c0ecdba3ae01304b55de (diff) | |
| download | feedaka-1d78371e13c19488d472257ab614e0be17bfa85e.tar.gz feedaka-1d78371e13c19488d472257ab614e0be17bfa85e.tar.zst feedaka-1d78371e13c19488d472257ab614e0be17bfa85e.zip | |
refactor: extract feed fetch and sync logic into shared feed package
Consolidate duplicated feed fetching and article syncing code from
AddFeed resolver and fetchOneFeed into reusable feed.Fetch and feed.Sync
functions. This unifies behavior (10s timeout, article updates) across
both call sites.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'backend/graphql')
| -rw-r--r-- | backend/graphql/resolver/schema.resolvers.go | 33 |
1 files changed, 6 insertions, 27 deletions
diff --git a/backend/graphql/resolver/schema.resolvers.go b/backend/graphql/resolver/schema.resolvers.go index c3f6f0a..10f892f 100644 --- a/backend/graphql/resolver/schema.resolvers.go +++ b/backend/graphql/resolver/schema.resolvers.go @@ -11,9 +11,9 @@ import ( "strconv" "time" - "github.com/mmcdole/gofeed" "undef.ninja/x/feedaka/auth" "undef.ninja/x/feedaka/db" + "undef.ninja/x/feedaka/feed" gql "undef.ninja/x/feedaka/graphql" "undef.ninja/x/feedaka/graphql/model" ) @@ -26,8 +26,7 @@ func (r *mutationResolver) AddFeed(ctx context.Context, url string) (*model.Feed } // Fetch the feed to get its title - fp := gofeed.NewParser() - feed, err := fp.ParseURL(url) + f, err := feed.Fetch(ctx, url) if err != nil { return nil, fmt.Errorf("failed to parse feed: %w", err) } @@ -35,7 +34,7 @@ func (r *mutationResolver) AddFeed(ctx context.Context, url string) (*model.Feed // Insert the feed into the database dbFeed, err := r.Queries.CreateFeed(ctx, db.CreateFeedParams{ Url: url, - Title: feed.Title, + Title: f.Title, FetchedAt: time.Now().UTC().Format(time.RFC3339), UserID: userID, }) @@ -43,29 +42,9 @@ func (r *mutationResolver) AddFeed(ctx context.Context, url string) (*model.Feed return nil, fmt.Errorf("failed to insert feed: %w", err) } - // Insert articles from the feed (skip duplicates by guid) - for _, item := range feed.Items { - // Check if article with same GUID already exists globally - exists, err := r.Queries.CheckArticleExistsByGUID(ctx, item.GUID) - if err != nil { - fmt.Printf("Failed to check article existence: %v\n", err) - continue - } - if exists == 1 { - // Article already exists, skip - continue - } - _, err = r.Queries.CreateArticle(ctx, db.CreateArticleParams{ - FeedID: dbFeed.ID, - Guid: item.GUID, - Title: item.Title, - Url: item.Link, - IsRead: 0, - }) - if err != nil { - // Log but don't fail on individual article errors - fmt.Printf("Failed to insert article: %v\n", err) - } + // Sync articles from the feed + if err := feed.Sync(ctx, r.Queries, dbFeed.ID, f); err != nil { + return nil, fmt.Errorf("failed to sync articles: %w", err) } return &model.Feed{ |
