mirror of https://gitlab.com/ngerakines/tavern.git
89 lines
1.8 KiB
Go
89 lines
1.8 KiB
Go
package web
|
|
|
|
import (
|
|
"math"
|
|
"net/http"
|
|
|
|
"github.com/gin-contrib/sessions"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gofrs/uuid"
|
|
|
|
"github.com/ngerakines/tavern/errors"
|
|
)
|
|
|
|
func (h handler) dashboard(c *gin.Context) {
|
|
session := sessions.Default(c)
|
|
ctx := c.Request.Context()
|
|
trans, transOK := c.Get("trans")
|
|
if !transOK {
|
|
panic("trans not found in context")
|
|
}
|
|
data := gin.H{
|
|
"flashes": getFlashes(session),
|
|
"Trans": trans,
|
|
}
|
|
|
|
user, err := h.storage.GetUserBySession(ctx, session)
|
|
if err != nil {
|
|
if errors.Is(err, errors.UserSessionNotFoundError{}) {
|
|
|
|
if err = appendFlashError(session, "Not Authenticated"); err != nil {
|
|
h.hardFail(c, errors.NewCannotSaveSessionError(err))
|
|
return
|
|
}
|
|
|
|
c.Redirect(http.StatusFound, "/")
|
|
return
|
|
}
|
|
h.hardFail(c, err)
|
|
return
|
|
}
|
|
|
|
data["user"] = user
|
|
|
|
page := intParam(c, "page", 1)
|
|
limit := intParam(c, "limit", 100)
|
|
|
|
total, err := h.storage.RowCount(ctx, `SELECT COUNT(*) FROM user_feed WHERE user_id = $1`, user.ID)
|
|
if err != nil {
|
|
h.hardFail(c, err)
|
|
return
|
|
}
|
|
uf, err := h.storage.PaginateUserFeed(ctx, user.ID, limit, (page-1)*limit)
|
|
if err != nil {
|
|
h.hardFail(c, err)
|
|
return
|
|
}
|
|
|
|
pageCount := math.Ceil(float64(total) / float64(limit))
|
|
data["page_count"] = int(pageCount)
|
|
data["page"] = page
|
|
data["limit"] = limit
|
|
|
|
var activityIDs []uuid.UUID
|
|
for _, ufi := range uf {
|
|
activityIDs = append(activityIDs, ufi.ActivityID)
|
|
}
|
|
|
|
activities, err := h.storage.GetActivitiesByIDs(ctx, activityIDs)
|
|
if err != nil {
|
|
h.hardFail(c, err)
|
|
return
|
|
}
|
|
data["activities"] = activities
|
|
|
|
var pages []int
|
|
for i := page - 3; i <= page+3; i++ {
|
|
if i > 0 && i <= int(pageCount) {
|
|
pages = append(pages, i)
|
|
}
|
|
}
|
|
data["pages"] = pages
|
|
|
|
if err = session.Save(); err != nil {
|
|
h.hardFail(c, err)
|
|
return
|
|
}
|
|
c.HTML(http.StatusOK, "dashboard", data)
|
|
}
|