diff --git a/api/feeds.go b/api/feeds.go index 8506264..1e2b3cd 100644 --- a/api/feeds.go +++ b/api/feeds.go @@ -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 +} diff --git a/api/sync.go b/api/sync.go index 376334b..edc1c9b 100644 --- a/api/sync.go +++ b/api/sync.go @@ -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 diff --git a/sql/create.sql b/sql/create.sql index 38af26a..0d4e517 100644 --- a/sql/create.sql +++ b/sql/create.sql @@ -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(