2017-11-23 01:51:23 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2019-02-18 18:44:27 +00:00
|
|
|
"io"
|
2017-11-23 01:51:23 +00:00
|
|
|
"net/http"
|
2019-02-18 18:44:27 +00:00
|
|
|
"os"
|
2017-11-23 01:51:23 +00:00
|
|
|
"strings"
|
|
|
|
|
2020-11-06 17:50:36 +00:00
|
|
|
"git.sp4ke.xyz/sp4ke/gomark/bookmarks"
|
|
|
|
"git.sp4ke.xyz/sp4ke/gomark/database"
|
2020-08-12 18:13:01 +00:00
|
|
|
|
2020-11-06 17:50:36 +00:00
|
|
|
"git.sp4ke.xyz/sp4ke/gum"
|
2017-11-23 01:51:23 +00:00
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
)
|
|
|
|
|
2018-11-09 17:25:50 +00:00
|
|
|
type Bookmark = bookmarks.Bookmark
|
|
|
|
|
2017-11-23 01:51:23 +00:00
|
|
|
func getBookmarks(c *gin.Context) {
|
|
|
|
|
2022-10-23 13:08:06 +00:00
|
|
|
rows, err := database.Cache.DB.Handle.QueryContext(c, "SELECT URL, metadata, tags FROM bookmarks")
|
2018-10-28 19:19:12 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Error(err)
|
|
|
|
}
|
2017-11-23 01:51:23 +00:00
|
|
|
var bookmarks []Bookmark
|
|
|
|
|
|
|
|
var tags string
|
|
|
|
for rows.Next() {
|
|
|
|
bookmark := Bookmark{}
|
2017-11-26 20:17:30 +00:00
|
|
|
err = rows.Scan(&bookmark.URL, &bookmark.Metadata, &tags)
|
2018-10-28 19:19:12 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Error(err)
|
|
|
|
}
|
2017-11-23 01:51:23 +00:00
|
|
|
|
2018-11-09 17:25:50 +00:00
|
|
|
bookmark.Tags = strings.Split(tags, database.TagJoinSep)
|
2017-11-23 01:51:23 +00:00
|
|
|
//log.Debugf("GET %s", tags)
|
|
|
|
//log.Debugf("%v", bookmark)
|
|
|
|
|
|
|
|
bookmarks = append(bookmarks, bookmark)
|
|
|
|
}
|
|
|
|
//log.Debugf("%v", bookmarks)
|
|
|
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
|
|
"bookmarks": bookmarks,
|
|
|
|
})
|
|
|
|
}
|
2019-02-18 18:44:27 +00:00
|
|
|
|
|
|
|
type API struct {
|
2020-10-02 15:37:24 +00:00
|
|
|
engine *gin.Engine
|
|
|
|
router *gin.RouterGroup
|
2019-02-18 18:44:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (api *API) Shutdown() {}
|
|
|
|
|
|
|
|
func (api *API) Run(m gum.UnitManager) {
|
|
|
|
api.router.GET("/urls", getBookmarks)
|
|
|
|
|
|
|
|
// Run router
|
2020-10-02 15:37:24 +00:00
|
|
|
// TODO: config params for api
|
2019-02-18 18:44:27 +00:00
|
|
|
go func() {
|
2020-10-02 15:37:24 +00:00
|
|
|
err := api.engine.Run(":4444")
|
2019-02-18 18:44:27 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
// Wait for stop signal
|
|
|
|
<-m.ShouldStop()
|
|
|
|
|
|
|
|
api.Shutdown()
|
|
|
|
m.Done()
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewApi() *API {
|
|
|
|
apiLogFile, _ := os.Create(".api.log")
|
|
|
|
gin.DefaultWriter = io.MultiWriter(apiLogFile, os.Stdout)
|
|
|
|
|
2020-10-02 15:37:24 +00:00
|
|
|
api := gin.Default()
|
|
|
|
|
|
|
|
return &API{
|
|
|
|
engine: api,
|
|
|
|
router: api.Group("/api"),
|
2019-02-18 18:44:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|