feat: implements today command
This commit is contained in:
parent
09f4b2a838
commit
a77d4f9604
5 changed files with 101 additions and 14 deletions
30
internal/article.go
Normal file
30
internal/article.go
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"freed/internal/database"
|
||||
)
|
||||
|
||||
func GetArticleUrlForToday() (string, error) {
|
||||
count, err := database.CountArticlesReadToday()
|
||||
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if count > 0 {
|
||||
return "", fmt.Errorf("Already reached maximum number of articles for the day. Come back tomorrow!")
|
||||
}
|
||||
|
||||
article, err := database.FindOneUnreadArticle()
|
||||
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if err := article.MarkAsRead(); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return article.Url, nil
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@ import (
|
|||
)
|
||||
|
||||
type Article struct {
|
||||
ID string
|
||||
Name string
|
||||
Url string
|
||||
ReadAt *time.Time
|
||||
|
|
@ -27,6 +28,20 @@ func (a Article) Insert() (int64, error) {
|
|||
return id, nil
|
||||
}
|
||||
|
||||
func (a Article) MarkAsRead() error {
|
||||
result, err := db.Exec("UPDATE article SET readAt = datetime() WHERE id = ?;", a.ID)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := result.RowsAffected(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func InsertMultipleArticles(articles []Article) error {
|
||||
if len(articles) == 0 {
|
||||
return nil
|
||||
|
|
@ -57,3 +72,29 @@ func InsertMultipleArticles(articles []Article) error {
|
|||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func FindOneUnreadArticle() (*Article, error) {
|
||||
var article Article
|
||||
|
||||
row := db.QueryRow("SELECT * FROM article WHERE readAt IS NULL ORDER BY RANDOM() LIMIT 1")
|
||||
err := row.Scan(&article.ID, &article.Name, &article.Url, &article.ReadAt, &article.FeedId)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &article, nil
|
||||
}
|
||||
|
||||
func CountArticlesReadToday() (int, error) {
|
||||
var count int
|
||||
|
||||
result := db.QueryRow("SELECT COUNT(*) FROM article WHERE date(readAt) = date()")
|
||||
err := result.Scan(&count)
|
||||
|
||||
if err != nil {
|
||||
return -1, err
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue