49 lines
1.6 KiB
Go
49 lines
1.6 KiB
Go
package store
|
|
|
|
import "context"
|
|
|
|
func (s *Store) InsertBookmark(ctx context.Context, userID, libID int64, bookPath string, locator []byte, percent float64, note string) (int64, error) {
|
|
var id int64
|
|
err := s.p.QueryRow(ctx,
|
|
`INSERT INTO bookmarks (user_id, library_id, book_path, locator, percent, note)
|
|
VALUES ($1,$2,$3,$4,$5,$6) RETURNING id`,
|
|
userID, libID, bookPath, locator, percent, note).Scan(&id)
|
|
return id, err
|
|
}
|
|
|
|
func (s *Store) ListBookmarks(ctx context.Context, userID, libID int64, bookPath string) ([]Bookmark, error) {
|
|
rows, err := s.p.Query(ctx,
|
|
`SELECT id, library_id, book_path, locator, percent, note, created_at
|
|
FROM bookmarks WHERE user_id=$1 AND library_id=$2 AND book_path=$3
|
|
ORDER BY percent ASC, id ASC`, userID, libID, bookPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var out []Bookmark
|
|
for rows.Next() {
|
|
var b Bookmark
|
|
if err := rows.Scan(&b.ID, &b.LibraryID, &b.BookPath, &b.Locator, &b.Percent, &b.Note, &b.CreatedAt); err != nil {
|
|
return nil, err
|
|
}
|
|
out = append(out, b)
|
|
}
|
|
return out, rows.Err()
|
|
}
|
|
|
|
func (s *Store) UpdateBookmarkNote(ctx context.Context, userID, id int64, note string) (bool, error) {
|
|
res, err := s.p.Exec(ctx, `UPDATE bookmarks SET note=$3 WHERE id=$1 AND user_id=$2`, id, userID, note)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return res.RowsAffected() > 0, nil
|
|
}
|
|
|
|
func (s *Store) DeleteBookmark(ctx context.Context, userID, id int64) (bool, error) {
|
|
res, err := s.p.Exec(ctx, `DELETE FROM bookmarks WHERE id=$1 AND user_id=$2`, id, userID)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return res.RowsAffected() > 0, nil
|
|
}
|