gosuki/internal/api/api.go

89 lines
1.5 KiB
Go
Raw Normal View History

2023-09-09 14:43:49 +00:00
package api
import (
2019-02-18 18:44:27 +00:00
"io"
"net/http"
2019-02-18 18:44:27 +00:00
"os"
"strings"
2023-09-09 14:43:49 +00:00
"git.blob42.xyz/gomark/gosuki/internal/database"
2023-09-09 23:14:13 +00:00
"git.blob42.xyz/gomark/gosuki/internal/logging"
2023-09-11 12:14:58 +00:00
"git.blob42.xyz/gomark/gosuki/pkg/bookmarks"
2020-08-12 18:13:01 +00:00
2023-09-11 12:14:58 +00:00
"git.blob42.xyz/blob42/gum"
"github.com/gin-gonic/gin"
)
2023-09-09 14:43:49 +00:00
var log = logging.GetLogger("API")
2018-11-09 17:25:50 +00:00
type Bookmark = bookmarks.Bookmark
func getBookmarks(c *gin.Context) {
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)
}
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)
}
2018-11-09 17:25:50 +00:00
bookmark.Tags = strings.Split(tags, database.TagJoinSep)
//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 {
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
// TODO: config params for api
2019-02-18 18:44:27 +00:00
go func() {
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)
api := gin.Default()
return &API{
engine: api,
router: api.Group("/api"),
2019-02-18 18:44:27 +00:00
}
}