feat: add frontend

This commit is contained in:
Rogee
2024-09-20 23:24:50 +08:00
parent 098b5ac8bc
commit 5aecfe6379
49 changed files with 861 additions and 1117 deletions

View File

@@ -2,35 +2,21 @@ package internal
import (
"fmt"
"net/http"
"strconv"
"exporter/database/telegram_resource/public/model"
"exporter/database/telegram_resource/public/table"
"exporter/frontend/dist"
. "github.com/go-jet/jet/v2/postgres"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/favicon"
"github.com/gofiber/fiber/v2/middleware/filesystem"
"github.com/gofiber/fiber/v2/middleware/recover"
"github.com/spf13/cobra"
)
type Pagination struct {
Page int64 `json:"page"`
Limit int64 `json:"limit"`
Offset int64 `json:"-"`
}
func (p *Pagination) Format() {
if p.Limit == 0 {
p.Limit = 10
}
if p.Page == 0 {
p.Offset = 0
} else {
p.Offset = (p.Page - 1) * p.Limit
}
}
func ServeCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "serve",
@@ -54,11 +40,24 @@ func serveCmd(cmd *cobra.Command, args []string) error {
app := fiber.New()
app.Static("/medias", "/share/telegram/outputs")
app.Static("/", "/public")
app.Use(favicon.New(favicon.Config{
Data: dist.Favicon,
}))
app.Use("/assets", filesystem.New(filesystem.Config{
Root: http.FS(dist.StaticDist),
PathPrefix: "assets",
}))
// Initialize default config
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
c.Context().SetContentType("text/html")
return c.SendString(dist.IndexPage)
})
group := app.Group("/api")
// get channel list
@@ -101,21 +100,20 @@ func serveCmd(cmd *cobra.Command, args []string) error {
return err
}
var p Pagination
if err := c.QueryParser(&p); err != nil {
return err
}
p.Format()
offsetPk := c.QueryInt("offset", 0)
var messages []model.ChannelMessages
tbl := table.ChannelMessages
cond := tbl.ChannelID.EQ(Int64(int64(channelID)))
if offsetPk > 0 {
cond = cond.AND(tbl.ID.LT(Int64(int64(offsetPk))))
}
err = tbl.
SELECT(tbl.AllColumns).
WHERE(tbl.ChannelID.EQ(Int64(int64(channelID)))).
WHERE(cond).
LIMIT(5).
ORDER_BY(tbl.ID.DESC()).
LIMIT(p.Limit).
OFFSET(p.Offset).
QueryContext(c.Context(), db, &messages)
if err != nil {
return err
@@ -126,25 +124,24 @@ func serveCmd(cmd *cobra.Command, args []string) error {
// favorite messages
group.Get("/favorites", func(c *fiber.Ctx) error {
var p Pagination
if err := c.QueryParser(&p); err != nil {
return err
offsetPk := c.QueryInt("offset", 0)
tbl := table.ChannelMessages
cond := tbl.ChannelID.EQ(Int64(int64(channelID))).AND(
tbl.Like.EQ(Bool(true)),
)
if offsetPk > 0 {
cond = cond.AND(tbl.ID.LT(Int64(int64(offsetPk))))
}
p.Format()
var messages []model.ChannelMessages
tbl := table.ChannelMessages
err = tbl.
SELECT(tbl.AllColumns).
WHERE(
tbl.ChannelID.EQ(Int64(int64(channelID))).AND(
tbl.Like.EQ(Bool(true)),
),
).
WHERE(cond).
LIMIT(5).
ORDER_BY(tbl.ID.DESC()).
LIMIT(p.Limit).
OFFSET(p.Offset).
QueryContext(c.Context(), db, &messages)
if err != nil {
return err