aboutsummaryrefslogtreecommitdiffstats
path: root/models/feed/feed.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/feed/feed.go')
-rw-r--r--models/feed/feed.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/models/feed/feed.go b/models/feed/feed.go
new file mode 100644
index 0000000..4abebb4
--- /dev/null
+++ b/models/feed/feed.go
@@ -0,0 +1,103 @@
+package feed
+
+import (
+ "log"
+ "neko/models"
+)
+
+type Feed struct {
+ Id int64 `json:"_id"`
+ Url string `json:"url"`
+ Title string `json:"title"`
+ // TODO: last_updated scan
+}
+
+func NewFeed(url string) error {
+ stmt, err := models.DB.Prepare("INSERT INTO feed(url) VALUES(?)")
+ if err != nil {
+ return err
+ }
+ _, err = stmt.Exec(url)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func All() ([]*Feed, error) {
+ return filter("")
+}
+
+func filter(where string) ([]*Feed, error) {
+ // todo: add back in title
+ rows, err := models.DB.Query(`SELECT id, url, title
+ FROM feed ` + where)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ feeds := make([]*Feed, 0)
+ for rows.Next() {
+ f := new(Feed)
+ err := rows.Scan(&f.Id, &f.Url, &f.Title)
+ if err != nil {
+ return nil, err
+ }
+ feeds = append(feeds, f)
+ }
+ if err = rows.Err(); err != nil {
+ return nil, err
+ }
+ return feeds, nil
+}
+
+func (f *Feed) Update() {
+ if len(f.Title) == 0 {
+ return
+ }
+
+ if f.Id == 0 {
+ return
+ }
+
+ if len(f.Url) == 0 {
+ return
+ }
+
+ models.DB.Query(`UPDATE feed
+ SET title=?, url=?
+ WHERE id=?`, f.Title, f.Url, f.Id)
+}
+
+func (f *Feed) Delete() {
+ log.Println("lets delete some shiteeee")
+ _, err := models.DB.Exec(`DELETE FROM feed
+ WHERE id=?`, f.Id)
+ if err != nil {
+ log.Println(err)
+ }
+}
+
+func (f *Feed) ByUrl(url string) error {
+ err := models.DB.QueryRow(`SELECT id, url, title
+ FROM feed
+ WHERE url = ?`, url).Scan(&f.Id, &f.Url, &f.Title)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (f *Feed) Create() error {
+ res, err := models.DB.Exec(`INSERT INTO feed(url, title)
+ VALUES(?, ?)`, f.Url, f.Title)
+ if err != nil {
+ return err
+ }
+
+ id, _ := res.LastInsertId()
+ f.Id = id
+
+ return nil
+}