Use etags, fetch dates and save errors

This commit is contained in:
2024-05-05 14:32:36 +02:00
parent 7add59d14a
commit 5f8cc780e7
3 changed files with 32 additions and 4 deletions
+28
View File
@@ -18,6 +18,7 @@ type Feed struct {
SubmitterId uuid.UUID `json:"submitterId"`
Submitter *User `json:"submitter,omitempty"`
AddedDate time.Time `json:"addedDate"`
SyncErorr *string `json:"syncError,omitempty"`
etag string
lastFetchDate *time.Time
}
@@ -31,6 +32,7 @@ type FeedDao struct {
SubmitterId uuid.UUID `db:"submitter_id"`
Submitter *User `db:"submitter"`
AddedDate time.Time `db:"added_date"`
SyncErorr *string `db:"sync_error"`
Etag string
LastFetchDate *time.Time `db:"last_fetch_date"`
}
@@ -119,3 +121,29 @@ func (s FeedService) ListFeeds() ([]Feed, error) {
}
return Map(ret, func(f FeedDao, _ int) Feed { return f.ToFeed() }), nil
}
func (s FeedService) UpdateSyncStatus(id uuid.UUID, etag string, lastFetchDate *time.Time) error {
_, err := s.database.NamedExec(
`update feeds set etag = :etag, last_fetch_date = :date, sync_error = :err
where id = :id`,
map[string]interface{}{
"id": id,
"etag": etag,
"date": lastFetchDate,
"err": nil,
},
)
return err
}
func (s FeedService) SaveSyncError(id uuid.UUID, error error) error {
_, err := s.database.NamedExec(
`update feeds set sync_error = :err
where id = :i`,
map[string]interface{}{
"id": id,
"err": error.Error(),
},
)
return err
}
+2 -3
View File
@@ -55,8 +55,7 @@ func (s SyncService) SyncFeed(feed Feed) error {
if err != nil {
return err
}
// TODO: update etag and last fetch date of feed
return nil
return s.feeds.UpdateSyncStatus(feed.Id, info.ETag, &info.LastModified)
}
func (s SyncService) SyncFeeds() error {
@@ -69,7 +68,7 @@ func (s SyncService) SyncFeeds() error {
err := s.SyncFeed(feed)
if err != nil {
log.Printf("Could not sync feed %v: %v", feed.Link, err)
// TODO: s.feeds.SaveError(feed.Id, err)
s.feeds.SaveSyncError(feed.Id, err)
}
}
return nil
+2 -1
View File
@@ -14,7 +14,8 @@ create table if not exists feeds(
submitter_id uuid not null references users(id),
added_date timestamp with time zone not null,
etag text,
last_fetch_date timestamp with time zone
last_fetch_date timestamp with time zone,
sync_error text
);
create table if not exists entries(