72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
|
package database
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
|
||
|
"github.com/ngn13/website/api/util"
|
||
|
)
|
||
|
|
||
|
type Post struct {
|
||
|
ID string `json:"id"`
|
||
|
Title string `json:"title"`
|
||
|
Author string `json:"author"`
|
||
|
Date string `json:"date"`
|
||
|
Content string `json:"content"`
|
||
|
Public int `json:"public"`
|
||
|
Vote int `json:"vote"`
|
||
|
}
|
||
|
|
||
|
func (p *Post) Load(rows *sql.Rows) error {
|
||
|
return rows.Scan(&p.ID, &p.Title, &p.Author, &p.Date, &p.Content, &p.Public, &p.Vote)
|
||
|
}
|
||
|
|
||
|
func (p *Post) Get(db *sql.DB, id string) (bool, error) {
|
||
|
var (
|
||
|
success bool
|
||
|
rows *sql.Rows
|
||
|
err error
|
||
|
)
|
||
|
|
||
|
if rows, err = db.Query("SELECT * FROM posts WHERE id = ?", id); err != nil {
|
||
|
return false, err
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
|
||
|
if success = rows.Next(); !success {
|
||
|
return false, nil
|
||
|
}
|
||
|
|
||
|
if err = p.Load(rows); err != nil {
|
||
|
return false, err
|
||
|
}
|
||
|
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
func (p *Post) Remove(db *sql.DB) error {
|
||
|
_, err := db.Exec("DELETE FROM posts WHERE id = ?", p.ID)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (p *Post) Save(db *sql.DB) error {
|
||
|
p.ID = util.TitleToID(p.Title)
|
||
|
|
||
|
_, err := db.Exec(
|
||
|
"INSERT INTO posts(id, title, author, date, content, public, vote) values(?, ?, ?, ?, ?, ?, ?)",
|
||
|
p.ID, p.Title, p.Author, p.Date, p.Content, p.Public, p.Vote,
|
||
|
)
|
||
|
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (p *Post) Update(db *sql.DB) error {
|
||
|
p.ID = util.TitleToID(p.Title)
|
||
|
|
||
|
_, err := db.Exec(
|
||
|
"UPDATE posts SET title = ?, author = ?, date = ?, content = ?, public = ?, vote = ? WHERE id = ?",
|
||
|
p.Title, p.Author, p.Date, p.Content, p.Public, p.Vote, p.ID,
|
||
|
)
|
||
|
|
||
|
return err
|
||
|
}
|