diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cf70988 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +**/node_modules diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f781d69 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM docker.hub.ipao.vip/golang:1.22-alpine as builder + +COPY . /app + +RUN go env -w GOPROXY=https://go.hub.ipao.vip,direct && \ + go env -w GO111MODULE=on && \ + cd /app && \ + go mod tidy && \ + go build -o /app/exporter . + + +FROM docker.hub.ipao.vip/alpine:3.20 + +COPY --from=builder /app/exporter /usr/local/bin/exporter +COPY config.yml /root/.exporter.yml + +WORKDIR /root + +ENTRYPOINT ["/usr/local/bin/exporter"] +CMD [ "serve" ] \ No newline at end of file diff --git a/Makefile b/Makefile index 819582f..69cea9e 100644 --- a/Makefile +++ b/Makefile @@ -3,4 +3,9 @@ model: rm -rf ./database jet -dsn=postgresql://postgres:xixi0202@10.1.1.3:5432/telegram_resource?sslmode=disable -path=./database - # gofumpt -w -l -extra ./database \ No newline at end of file + # gofumpt -w -l -extra ./database + +.PHONY: docker +docker: + docker build -t docker-af.hub.ipao.vip/rogeecn/tg-exporter:latest . + docker push docker-af.hub.ipao.vip/rogeecn/tg-exporter:latest \ No newline at end of file diff --git a/frontend/dist.go b/frontend/dist.go new file mode 100644 index 0000000..35009a5 --- /dev/null +++ b/frontend/dist.go @@ -0,0 +1,18 @@ +package frontend + +import "embed" + +// embedded files +// +//go:embed dist/assets/* +var StaticDist embed.FS + +// embedded dist/favicon.ico +// +//go:embed dist/favicon.ico +var Favicon []byte + +// embedded dist/index.html +// +//go:embed dist/index.html +var IndexPage string diff --git a/frontend/src/components/ListItem.vue b/frontend/src/components/ListItem.vue index a992a25..5b50981 100644 --- a/frontend/src/components/ListItem.vue +++ b/frontend/src/components/ListItem.vue @@ -1,18 +1,25 @@ diff --git a/frontend/src/views/FavoriteMessages.vue b/frontend/src/views/FavoriteMessages.vue index a24e856..a983ed4 100644 --- a/frontend/src/views/FavoriteMessages.vue +++ b/frontend/src/views/FavoriteMessages.vue @@ -17,15 +17,31 @@ import ListItem from "@/components/ListItem.vue"; import { getFavoriteMessages } from "@/services/messages"; import { onMounted, ref } from "vue"; +import { useRoute } from "vue-router"; + +const route = useRoute(); const messages = ref([]); const loadMore = async () => { - const items = await getChannelMessages(route.params.channel, { offset: messages.value[messages.value.length - 1].ID }); - messages.value.push(...items); + // router goto next page + // offset is last message ID + const offset = messages.value[messages.value.length - 1].ID + router.push({ + name: "favorite-messages", + params: { + channel: route.params.channel, + offset: offset, + }, + }); + + messages.value = await getFavoriteMessages({ offset: offset }); + console.log("messages", messages.value); + // page scroll to top with animation + window.scrollTo({ top: 0, behavior: "smooth" }); } onMounted(async () => { - messages.value = await getFavoriteMessages(); + messages.value = await getFavoriteMessages({ offset: route.params.offset }); }); diff --git a/frontend/src/views/NotFound.vue b/frontend/src/views/NotFound.vue new file mode 100644 index 0000000..7a9b859 --- /dev/null +++ b/frontend/src/views/NotFound.vue @@ -0,0 +1,3 @@ + diff --git a/home.text b/home.text deleted file mode 100644 index 7e12685..0000000 --- a/home.text +++ /dev/null @@ -1,25 +0,0 @@ - - - \ No newline at end of file diff --git a/internal/cmd_serve.go b/internal/cmd_serve.go index 1ce2cc6..43265fd 100644 --- a/internal/cmd_serve.go +++ b/internal/cmd_serve.go @@ -7,7 +7,7 @@ import ( "exporter/database/telegram_resource/public/model" "exporter/database/telegram_resource/public/table" - "exporter/frontend/dist" + "exporter/frontend" . "github.com/go-jet/jet/v2/postgres" "github.com/gofiber/fiber/v2" @@ -42,21 +42,22 @@ func serveCmd(cmd *cobra.Command, args []string) error { app.Static("/medias", "/share/telegram/outputs") app.Use(favicon.New(favicon.Config{ - Data: dist.Favicon, + Data: frontend.Favicon, })) app.Use("/assets", filesystem.New(filesystem.Config{ - Root: http.FS(dist.StaticDist), - PathPrefix: "assets", + Root: http.FS(frontend.StaticDist), + PathPrefix: "dist/assets", })) // Initialize default config app.Use(recover.New()) - app.Get("/", func(c *fiber.Ctx) error { + indexFunc := func(c *fiber.Ctx) error { c.Context().SetContentType("text/html") - return c.SendString(dist.IndexPage) - }) + return c.SendString(frontend.IndexPage) + } + app.Get("/", indexFunc) group := app.Group("/api") @@ -202,5 +203,8 @@ func serveCmd(cmd *cobra.Command, args []string) error { return nil }) + // not found route use frontend router + // handle 404 + app.Use(indexFunc) return app.Listen(fmt.Sprintf(":%d", port)) }