Simply ErrNotInDatabase implementation

This commit is contained in:
Alessio 2024-09-15 15:34:56 -07:00
parent a13f47e508
commit 2d35c37e17
8 changed files with 11 additions and 22 deletions

View File

@ -32,7 +32,7 @@ func (app *Application) ensure_tweet(id scraper.TweetID, is_forced bool, is_conv
// Check if tweet is already in DB // Check if tweet is already in DB
tweet, err := app.Profile.GetTweetById(id) tweet, err := app.Profile.GetTweetById(id)
if err != nil { if err != nil {
if errors.Is(err, persistence.ErrNotInDB) { if errors.Is(err, persistence.ErrNotInDatabase) {
is_needing_scrape = true is_needing_scrape = true
is_available = false is_available = false
} else { } else {
@ -154,7 +154,7 @@ func (app *Application) TweetDetail(w http.ResponseWriter, r *http.Request) {
} }
twt_detail, err := app.Profile.GetTweetDetail(data.MainTweetID, app.ActiveUser.ID) twt_detail, err := app.Profile.GetTweetDetail(data.MainTweetID, app.ActiveUser.ID)
panic_if(err) // ErrNotInDB should be impossible, since we already fetched the single tweet successfully panic_if(err) // ErrNotInDatabase should be impossible, since we already fetched the single tweet successfully
data.TweetDetailView = twt_detail data.TweetDetailView = twt_detail

View File

@ -105,7 +105,7 @@ func (app *Application) UserFeed(w http.ResponseWriter, r *http.Request) {
// Also, only show pinned tweets on default tab (tweets+replies) or "without_replies" tab // Also, only show pinned tweets on default tab (tweets+replies) or "without_replies" tab
if user.PinnedTweetID != scraper.TweetID(0) && (len(parts) <= 1 || parts[1] == "without_replies") { if user.PinnedTweetID != scraper.TweetID(0) && (len(parts) <= 1 || parts[1] == "without_replies") {
data.PinnedTweet, err = app.Profile.GetTweetById(user.PinnedTweetID) data.PinnedTweet, err = app.Profile.GetTweetById(user.PinnedTweetID)
if err != nil && !errors.Is(err, persistence.ErrNotInDB) { if err != nil && !errors.Is(err, persistence.ErrNotInDatabase) {
panic(err) panic(err)
} }
feed.TweetTrove.Tweets[data.PinnedTweet.ID] = data.PinnedTweet feed.TweetTrove.Tweets[data.PinnedTweet.ID] = data.PinnedTweet
@ -113,7 +113,7 @@ func (app *Application) UserFeed(w http.ResponseWriter, r *http.Request) {
// Fetch quoted tweet if necessary // Fetch quoted tweet if necessary
if data.PinnedTweet.QuotedTweetID != scraper.TweetID(0) { if data.PinnedTweet.QuotedTweetID != scraper.TweetID(0) {
feed.TweetTrove.Tweets[data.PinnedTweet.QuotedTweetID], err = app.Profile.GetTweetById(data.PinnedTweet.QuotedTweetID) feed.TweetTrove.Tweets[data.PinnedTweet.QuotedTweetID], err = app.Profile.GetTweetById(data.PinnedTweet.QuotedTweetID)
if err != nil && !errors.Is(err, persistence.ErrNotInDB) { if err != nil && !errors.Is(err, persistence.ErrNotInDatabase) {
panic(err) panic(err)
} }
// And the user // And the user

View File

@ -11,7 +11,6 @@ import (
var ( var (
ErrEndOfFeed = errors.New("end of feed") ErrEndOfFeed = errors.New("end of feed")
ErrNotInDB = errors.New("not in database")
) )
// TODO: make this a SQL view? // TODO: make this a SQL view?
@ -257,7 +256,7 @@ func (p Profile) GetTweetDetail(id TweetID, current_user_id UserID) (TweetDetail
panic(err) panic(err)
} }
if len(thread) == 0 { if len(thread) == 0 {
return ret, fmt.Errorf("Tweet ID %d: %w", id, ErrNotInDB) return ret, fmt.Errorf("Tweet ID %d: %w", id, ErrNotInDatabase)
} }
for _, tweet := range thread { for _, tweet := range thread {
ret.Tweets[tweet.ID] = tweet ret.Tweets[tweet.ID] = tweet

View File

@ -84,7 +84,7 @@ func (p Profile) GetListById(list_id ListID) (List, error) {
var ret List var ret List
err := p.DB.Get(&ret, `select rowid, is_online, online_list_id, name from lists where rowid = ?`, list_id) err := p.DB.Get(&ret, `select rowid, is_online, online_list_id, name from lists where rowid = ?`, list_id)
if errors.Is(err, sql.ErrNoRows) { if errors.Is(err, sql.ErrNoRows) {
return List{}, ErrNotInDatabase{"List", list_id} return List{}, ErrNotInDatabase
} else if err != nil { } else if err != nil {
panic(err) panic(err)
} }

View File

@ -133,7 +133,7 @@ func (p Profile) GetTweetById(id TweetID) (Tweet, error) {
if err != nil { if err != nil {
if errors.Is(err, sql.ErrNoRows) { if errors.Is(err, sql.ErrNoRows) {
return Tweet{}, fmt.Errorf("GetTweetById %d: %w", id, ErrNotInDB) return Tweet{}, fmt.Errorf("GetTweetById %d: %w", id, ErrNotInDatabase)
} else { } else {
panic(err) panic(err)
} }

View File

@ -334,5 +334,5 @@ func TestLoadMissingTweet(t *testing.T) {
_, err := profile.GetTweetById(scraper.TweetID(6234234)) // Random number _, err := profile.GetTweetById(scraper.TweetID(6234234)) // Random number
require.Error(t, err) require.Error(t, err)
assert.ErrorIs(t, err, persistence.ErrNotInDB) assert.ErrorIs(t, err, persistence.ErrNotInDatabase)
} }

View File

@ -113,7 +113,7 @@ func (p Profile) GetUserByHandle(handle scraper.UserHandle) (scraper.User, error
`, handle) `, handle)
if errors.Is(err, sql.ErrNoRows) { if errors.Is(err, sql.ErrNoRows) {
return ret, ErrNotInDatabase{"User", handle} return ret, ErrNotInDatabase
} }
return ret, nil return ret, nil
} }
@ -136,7 +136,7 @@ func (p Profile) GetUserByID(id scraper.UserID) (scraper.User, error) {
where id = ? where id = ?
`, id) `, id)
if errors.Is(err, sql.ErrNoRows) { if errors.Is(err, sql.ErrNoRows) {
return ret, ErrNotInDatabase{"User", id} return ret, ErrNotInDatabase
} }
if err != nil { if err != nil {
panic(err) panic(err)

View File

@ -2,22 +2,12 @@ package persistence
import ( import (
"errors" "errors"
"fmt"
"os" "os"
"regexp" "regexp"
"strings" "strings"
) )
var NotInDatabase = errors.New("Not in database") var ErrNotInDatabase = errors.New("not in database")
type ErrNotInDatabase struct {
Table string
Value interface{}
}
func (err ErrNotInDatabase) Error() string {
return fmt.Sprintf("Not in database: %s %q", err.Table, err.Value)
}
// DUPE 1 // DUPE 1
func file_exists(path string) bool { func file_exists(path string) bool {