package likes import ( "fmt" "log" "net/http" "strconv" "fagott.pw/charakterin" "fagott.pw/grilist/grilist" "fagott.pw/grilist/modules/lists" "github.com/julienschmidt/httprouter" ) type Module struct { g *grilist.Grilist lists *lists.Module } func New() *Module { return &Module{} } func (m *Module) Name() string { return "Likes" } func (m *Module) Init(g *grilist.Grilist) { m.g = g gm, ok := g.Modules["Lists"] if !ok { log.Fatal("tags: lists module not found") } m.lists = gm.(*lists.Module) m.g.Router.GET("/api/likes/count", m.getLikeCount) } func (m *Module) Interface() interface{} { return m } func (m *Module) ProvideDashboardData(user *charakterin.User) []grilist.DashboardCategory { return make([]grilist.DashboardCategory, 0) } func (m *Module) getLikeCount(w http.ResponseWriter, r *http.Request, p httprouter.Params) { params := r.URL.Query() contentId, err := strconv.Atoi(params.Get("id")) if err != nil { http.Error(w, "invalid content id", http.StatusBadRequest) return } contentType, err := strconv.Atoi(params.Get("type")) if err != nil { http.Error(w, "invalid content id", http.StatusBadRequest) return } var res int if err := m.g.DB.QueryRow(`SELECT COUNT(*) FROM grilist.likes WHERE content = $1 AND type = $2`, contentId, contentType).Scan(&res); err != nil { http.Error(w, "pq error", http.StatusInternalServerError) log.Printf("error getting like count: %s", err) return } w.WriteHeader(200) w.Write([]byte(fmt.Sprintf("%d", res))) }