76 lines
2.1 KiB
Go

package scraper
import (
"database/sql/driver"
"errors"
"strings"
)
var ERR_NO_TWEET = errors.New("Empty tweet")
type TweetID int64
type CommaSeparatedList []string
func (l *CommaSeparatedList) Scan(src interface{}) error {
*l = CommaSeparatedList{}
switch src := src.(type) {
case string:
for _, v := range strings.Split(src, ",") {
if v != "" {
*l = append(*l, v)
}
}
default:
panic("Should be a string")
}
return nil
}
func (l CommaSeparatedList) Value() (driver.Value, error) {
return strings.Join(l, ","), nil
}
type Tweet struct {
ID TweetID `db:"id"`
Text string `db:"text"`
IsExpandable bool `db:"is_expandable"`
PostedAt Timestamp `db:"posted_at"`
NumLikes int `db:"num_likes"`
NumRetweets int `db:"num_retweets"`
NumReplies int `db:"num_replies"`
NumQuoteTweets int `db:"num_quote_tweets"`
InReplyToID TweetID `db:"in_reply_to_id"`
QuotedTweetID TweetID `db:"quoted_tweet_id"`
UserID UserID `db:"user_id"`
User *User `db:"user"`
// For processing tombstones
UserHandle UserHandle
in_reply_to_user_handle UserHandle
in_reply_to_user_id UserID
Images []Image
Videos []Video
Urls []Url
Polls []Poll
Mentions CommaSeparatedList `db:"mentions"`
ReplyMentions CommaSeparatedList `db:"reply_mentions"`
Hashtags CommaSeparatedList `db:"hashtags"`
// TODO get-rid-of-redundant-spaces: Might be good to get rid of `Spaces`. Only used in APIv1 I think.
// A first-step would be to delete the Spaces after pulling them out of a Tweet into the Trove
// in ToTweetTrove. Then they will only be getting saved once rather than twice.
Spaces []Space
SpaceID SpaceID `db:"space_id"`
TombstoneType string `db:"tombstone_type"`
TombstoneText string `db:"tombstone_text"`
IsStub bool `db:"is_stub"`
IsLikedByCurrentUser bool `db:"is_liked_by_current_user"`
IsContentDownloaded bool `db:"is_content_downloaded"`
IsConversationScraped bool `db:"is_conversation_scraped"`
LastScrapedAt Timestamp `db:"last_scraped_at"`
}