diff --git a/cmd/server/wire_gen.go b/cmd/server/wire_gen.go index 4ba8be6..87350ec 100644 --- a/cmd/server/wire_gen.go +++ b/cmd/server/wire_gen.go @@ -29,11 +29,6 @@ func InitializeApp(configConfig *config.Config, allLogger log.AllLogger) (*serve publishImpl := impl.NewPublishImpl(db) loginRelationImpl := impl.NewLoginRelationImpl(db) articleTypeImpl := impl.NewArticleTypeImpl(db) - publishBiz := biz.NewPublishBiz(configConfig, publishImpl, userImpl, platImpl, tokenImpl, loginRelationImpl) - authBiz := biz.NewAuthBiz(configConfig, tokenImpl, userImpl) - appService := service.NewAppService(configConfig, tokenImpl, userImpl, platImpl, publishBiz, authBiz, loginRelationImpl) - loginService := service.NewLoginService(configConfig, publishBiz, authBiz) - publishService := service.NewPublishService(configConfig, publishBiz, authBiz, db) productImpl := impl.NewProductImpl(db) productSourceImpl := impl.NewProductSourceImpl(db) oss, err := utils_oss.NewClient(configConfig) @@ -41,6 +36,12 @@ func InitializeApp(configConfig *config.Config, allLogger log.AllLogger) (*serve panic(err) } productBiz := biz.NewProductBiz(productImpl, productSourceImpl, configConfig, oss) + publishBiz := biz.NewPublishBiz(configConfig, publishImpl, userImpl, platImpl, tokenImpl, loginRelationImpl) + authBiz := biz.NewAuthBiz(configConfig, tokenImpl, userImpl) + appService := service.NewAppService(configConfig, tokenImpl, userImpl, platImpl, publishBiz, authBiz, loginRelationImpl, productBiz) + loginService := service.NewLoginService(configConfig, publishBiz, authBiz) + publishService := service.NewPublishService(configConfig, publishBiz, authBiz, db) + productService := service.NewProductService(configConfig, productImpl, authBiz, productBiz) aiBiz := biz.NewAiBiz(platImpl, articleTypeImpl) productSourceService := service.NewProductSourceService(configConfig, productImpl, authBiz, aiBiz, productBiz, productSourceImpl, publishBiz, articleTypeImpl) diff --git a/internal/biz/product.go b/internal/biz/product.go index b3fba43..50ffe59 100644 --- a/internal/biz/product.go +++ b/internal/biz/product.go @@ -92,6 +92,15 @@ func (p *ProductBiz) AddSource(ctx context.Context, source *model.ProductSource) func (p *ProductBiz) SourceUpload(ctx context.Context, file []byte, fileName string) (string, error) { url, err := p.oss.UploadBytes(p.cfg.Oss.FilePath+"source/"+fileName, file) + + if err != nil { + return "", fmt.Errorf("上传文件失败: %w", err) + } + return url, nil +} + +func (p *ProductBiz) OssUpload(ctx context.Context, userIndex string, platIndex string, data []byte) (string, error) { + url, err := p.oss.UploadBytes(fmt.Sprintf("%scookie/%s/%s.json", p.cfg.Oss.FilePath, userIndex, platIndex), data) if err != nil { return "", fmt.Errorf("上传文件失败: %w", err) } diff --git a/internal/data/impl/plat.go b/internal/data/impl/plat.go index 2989190..7d569c8 100644 --- a/internal/data/impl/plat.go +++ b/internal/data/impl/plat.go @@ -43,6 +43,9 @@ func (p *PlatImpl) GetPlatListWithLoginStatus(ctx context.Context, cond *builder plat.img_url, plat.index, plat.desc, + plat.login_url, + plat.logined_url, + plat.logined_judge_way, COALESCE(login_relation.login_status, 2) as login_status FROM plat LEFT JOIN login_relation ON login_relation.plat_index COLLATE utf8mb4_unicode_ci = plat.index AND login_relation.status = 1 diff --git a/internal/entitys/request.go b/internal/entitys/request.go index 6f24fb2..376cb91 100644 --- a/internal/entitys/request.go +++ b/internal/entitys/request.go @@ -24,6 +24,13 @@ type ( UserIndex string `json:"user_index" validate:"required" zh:"用户索引"` } + SendCookieRequest struct { + AccessToken string `json:"access_token" validate:"required" zh:"access_token"` + UserIndex string `json:"user_index" validate:"required" zh:"用户索引"` + CookieData string `json:"cookie_data" validate:"required" zh:"cookie_data"` + PlatIndex string `json:"plat_index" validate:"required" zh:"平台索引"` + } + PlatListRequest struct { AccessToken string `json:"access_token" validate:"required" zh:"access_token"` PlatType int `json:"plat_type" zh:"平台类型"` diff --git a/internal/manager/publish_manager.go b/internal/manager/publish_manager.go index 46025b4..500e59f 100644 --- a/internal/manager/publish_manager.go +++ b/internal/manager/publish_manager.go @@ -98,12 +98,12 @@ func (pm *PublishManager) getTaskLogger(publishID int, requestID string) (*log.L } // Start 启动自动发布(支持并发worker数量) -func (pm *PublishManager) Start(tokenID int, workerNum int) bool { +func (pm *PublishManager) Start(workerNum int) bool { pm.mu.Lock() defer pm.mu.Unlock() if pm.AutoStatus { - log.Printf("自动发布服务已在运行中,tokenID=%d", tokenID) + log.Printf("自动发布服务已在运行中") return false } @@ -114,7 +114,6 @@ func (pm *PublishManager) Start(tokenID int, workerNum int) bool { workerNum = MaxWorkerNum } - pm.TokenID = tokenID pm.AutoStatus = true pm.workerNum = workerNum pm.stopCh = make(chan struct{}) @@ -129,7 +128,7 @@ func (pm *PublishManager) Start(tokenID int, workerNum int) bool { go pm.workerLoop(i) } - log.Printf("自动发布服务已启动,tokenID=%d,worker数量=%d", tokenID, workerNum) + log.Printf("自动发布服务已启动,worker数量=%d", workerNum) return true } @@ -242,8 +241,7 @@ func (pm *PublishManager) acquireTask() (*entitys.PublishTaskDetail, error) { SELECT p2.request_id FROM publish p2 INNER JOIN plat pl ON p2.plat_index COLLATE utf8mb4_unicode_ci = pl.index - WHERE p2.token_id = ? - AND p2.status = ? + WHERE p2.status = ? AND p2.publish_time <= ? AND pl.status = 1 ORDER BY p2.publish_time ASC @@ -253,7 +251,7 @@ func (pm *PublishManager) acquireTask() (*entitys.PublishTaskDetail, error) { AND p.status = ? ` - result := pm.db.Client.Exec(updateSQL, StatusProcessing, uid, pm.TokenID, StatusPending, currentTime, StatusPending) + result := pm.db.Client.Exec(updateSQL, StatusProcessing, uid, StatusPending, currentTime, StatusPending) if result.Error != nil { return nil, result.Error } @@ -272,6 +270,7 @@ func (pm *PublishManager) acquireTask() (*entitys.PublishTaskDetail, error) { p.title, p.tag, p.user_index, + p.token_id, p.url, p.img, p.publish_time, @@ -284,12 +283,12 @@ func (pm *PublishManager) acquireTask() (*entitys.PublishTaskDetail, error) { pl.desc FROM publish p INNER JOIN plat pl ON p.plat_index COLLATE utf8mb4_unicode_ci = pl.index AND pl.status = 1 - WHERE uid=? AND p.token_id = ? + WHERE uid=? ORDER BY p.publish_time DESC LIMIT 1 ` - err := pm.db.Client.Raw(querySQL, uid, pm.TokenID).Scan(&task).Error + err := pm.db.Client.Raw(querySQL, uid).Scan(&task).Error if err != nil { return nil, err } diff --git a/internal/server/router/app.go b/internal/server/router/app.go index e5e8c4e..763232c 100644 --- a/internal/server/router/app.go +++ b/internal/server/router/app.go @@ -41,6 +41,7 @@ func (m *AppModule) Register(router fiber.Router) { router.Post("/add_user", vali(m.appService.AddUser, &entitys.AddUserRequest{})) router.Post("/del_user", vali(m.appService.DelUser, &entitys.DelUserRequest{})) router.Post("/get_app", vali(m.appService.GetApp, &entitys.GetAppRequest{})) + router.Post("/send_cookie", vali(m.appService.SendCookie, &entitys.SendCookieRequest{})) router.Post("/publish_records", vali(m.publishService.PublishRecords, &entitys.PublishRecordsRequest{})) router.Post("/publish_on", vali(m.publishService.PublishOn, &entitys.PublishOnRequest{})) router.Post("/publish_off", vali(m.publishService.PublishOff, &entitys.PublishOffRequest{})) diff --git a/internal/service/app.go b/internal/service/app.go index bde4e4d..ba9fb70 100644 --- a/internal/service/app.go +++ b/internal/service/app.go @@ -3,6 +3,8 @@ package service import ( "fmt" "github.com/gofiber/fiber/v2" + "os" + "path/filepath" "xorm.io/builder" "geo/internal/biz" @@ -23,6 +25,7 @@ type AppService struct { loginRelationImpl *impl.LoginRelationImpl publishBiz *biz.PublishBiz authBiz *biz.AuthBiz + productBiz *biz.ProductBiz } func NewAppService( @@ -34,6 +37,7 @@ func NewAppService( publishBiz *biz.PublishBiz, authBiz *biz.AuthBiz, loginRelationImpl *impl.LoginRelationImpl, + productBiz *biz.ProductBiz, ) *AppService { return &AppService{ cfg: cfg, @@ -43,6 +47,7 @@ func NewAppService( platImpl: platImpl, publishBiz: publishBiz, authBiz: authBiz, + productBiz: productBiz, } } @@ -191,6 +196,23 @@ func (a *AppService) GetApp(c *fiber.Ctx, req *entitys.GetAppRequest) error { return pkg.HandleResponse(c, result) } +func (a *AppService) SendCookie(c *fiber.Ctx, req *entitys.SendCookieRequest) error { + _, err := a.authBiz.ValidateAccessToken(c.UserContext(), req.AccessToken) + if err != nil { + return err + } + dir := filepath.Join(a.cfg.Sys.CookiesDir, req.UserIndex) + cookieFile := filepath.Join(dir, req.PlatIndex+".json") + os.WriteFile(cookieFile, []byte(req.CookieData), 0644) + _, _ = a.productBiz.OssUpload(c.UserContext(), req.UserIndex, req.PlatIndex, []byte(req.CookieData)) + // 更新登录状态为未登录 + err = a.publishBiz.UpdateLoginStatus(c.UserContext(), req.UserIndex, req.PlatIndex, 1) + if err != nil { + return err + } + return nil +} + func (a *AppService) PlatList(c *fiber.Ctx, req *entitys.PlatListRequest) error { _, err := a.authBiz.ValidateAccessToken(c.UserContext(), req.AccessToken) if err != nil { diff --git a/internal/service/publish.go b/internal/service/publish.go index 0fd6f53..d371177 100644 --- a/internal/service/publish.go +++ b/internal/service/publish.go @@ -82,7 +82,7 @@ func (s *PublishService) PublishRecords(c *fiber.Ctx, req *entitys.PublishRecord } func (s *PublishService) PublishOn(c *fiber.Ctx, req *entitys.PublishOnRequest) error { - tokenInfo, err := s.authBiz.ValidateAccessToken(c.UserContext(), req.AccessToken) + _, err := s.authBiz.ValidateAccessToken(c.UserContext(), req.AccessToken) if err != nil { return err } @@ -91,7 +91,7 @@ func (s *PublishService) PublishOn(c *fiber.Ctx, req *entitys.PublishOnRequest) if err != nil { return err } - if pm.Start(int(tokenInfo.ID), s.cfg.Sys.AutoPublishWorkers) { + if pm.Start(s.cfg.Sys.AutoPublishWorkers) { return pkg.HandleResponse(c, fiber.Map{ "auto_status": pm.AutoStatus, })