mirror of
https://git.fightbot.fun/hxuanyu/BingPaper.git
synced 2026-02-15 08:49:33 +08:00
基本功能实现
This commit is contained in:
102
internal/bootstrap/bootstrap.go
Normal file
102
internal/bootstrap/bootstrap.go
Normal file
@@ -0,0 +1,102 @@
|
||||
package bootstrap
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"BingDailyImage/internal/config"
|
||||
"BingDailyImage/internal/cron"
|
||||
"BingDailyImage/internal/http"
|
||||
"BingDailyImage/internal/repo"
|
||||
"BingDailyImage/internal/service/fetcher"
|
||||
"BingDailyImage/internal/storage"
|
||||
"BingDailyImage/internal/storage/local"
|
||||
"BingDailyImage/internal/storage/s3"
|
||||
"BingDailyImage/internal/storage/webdav"
|
||||
"BingDailyImage/internal/util"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// Init 初始化应用各项服务
|
||||
func Init() *gin.Engine {
|
||||
// 0. 确保数据目录存在
|
||||
_ = os.MkdirAll("data/picture", 0755)
|
||||
|
||||
// 1. 初始化配置
|
||||
if err := config.Init(""); err != nil {
|
||||
log.Fatalf("Failed to initialize config: %v", err)
|
||||
}
|
||||
cfg := config.GetConfig()
|
||||
|
||||
// 2. 初始化日志
|
||||
util.InitLogger(cfg.Log.Level)
|
||||
|
||||
// 3. 初始化数据库
|
||||
if err := repo.InitDB(); err != nil {
|
||||
util.Logger.Fatal("Failed to initialize database")
|
||||
}
|
||||
|
||||
// 4. 初始化存储
|
||||
var s storage.Storage
|
||||
var err error
|
||||
switch cfg.Storage.Type {
|
||||
case "s3":
|
||||
s, err = s3.NewS3Storage(
|
||||
cfg.Storage.S3.Endpoint,
|
||||
cfg.Storage.S3.Region,
|
||||
cfg.Storage.S3.Bucket,
|
||||
cfg.Storage.S3.AccessKey,
|
||||
cfg.Storage.S3.SecretKey,
|
||||
cfg.Storage.S3.PublicURLPrefix,
|
||||
cfg.Storage.S3.ForcePathStyle,
|
||||
)
|
||||
case "webdav":
|
||||
s, err = webdav.NewWebDAVStorage(
|
||||
cfg.Storage.WebDAV.URL,
|
||||
cfg.Storage.WebDAV.Username,
|
||||
cfg.Storage.WebDAV.Password,
|
||||
cfg.Storage.WebDAV.PublicURLPrefix,
|
||||
)
|
||||
default: // local
|
||||
s, err = local.NewLocalStorage(cfg.Storage.Local.Root)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
util.Logger.Fatal("Failed to initialize storage", zap.Error(err))
|
||||
}
|
||||
storage.GlobalStorage = s
|
||||
|
||||
// 5. 初始化定时任务
|
||||
cron.InitCron()
|
||||
|
||||
// 6. 启动时执行一次抓取 (可选,这里我们默认执行一次以确保有数据)
|
||||
go func() {
|
||||
f := fetcher.NewFetcher()
|
||||
f.Fetch(context.Background(), config.BingFetchN)
|
||||
}()
|
||||
|
||||
// 7. 设置路由
|
||||
return http.SetupRouter()
|
||||
}
|
||||
|
||||
// LogWelcomeInfo 输出欢迎信息和快速跳转地址
|
||||
func LogWelcomeInfo() {
|
||||
cfg := config.GetConfig()
|
||||
port := cfg.Server.Port
|
||||
baseURL := cfg.Server.BaseURL
|
||||
if baseURL == "" {
|
||||
baseURL = fmt.Sprintf("http://localhost:%d", port)
|
||||
}
|
||||
|
||||
fmt.Println("\n---------------------------------------------------------")
|
||||
fmt.Println(" BingDailyImage 服务已启动!")
|
||||
fmt.Printf(" - 首页地址: %s/\n", baseURL)
|
||||
fmt.Printf(" - 管理后台: %s/admin\n", baseURL)
|
||||
fmt.Printf(" - API 文档: %s/swagger/index.html\n", baseURL)
|
||||
fmt.Printf(" - 今日图片: %s/api/v1/image/today\n", baseURL)
|
||||
fmt.Println("---------------------------------------------------------")
|
||||
}
|
||||
Reference in New Issue
Block a user