diff --git a/Agents.md b/Agents.md index 7a281f6c..8cd1ae98 100644 --- a/Agents.md +++ b/Agents.md @@ -39,7 +39,7 @@ 以下是项目的顶层目录结构及其职责, 如果有新增目录或文件,请务必在此处同步更新: ``` -wavelet/ # 项目根目录(模块名: github.com/linux-do/credit) +wavelet/ # 项目根目录(模块名: github.com/Rain-kl/Wavelet) ├── main.go # 程序入口,调用 internal/cmd ├── go.mod / go.sum # Go 模块依赖 ├── config.yaml # 运行时配置(不提交到 Git) diff --git a/CLAUDE.md b/CLAUDE.md index 7a281f6c..8cd1ae98 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,7 +39,7 @@ 以下是项目的顶层目录结构及其职责, 如果有新增目录或文件,请务必在此处同步更新: ``` -wavelet/ # 项目根目录(模块名: github.com/linux-do/credit) +wavelet/ # 项目根目录(模块名: github.com/Rain-kl/Wavelet) ├── main.go # 程序入口,调用 internal/cmd ├── go.mod / go.sum # Go 模块依赖 ├── config.yaml # 运行时配置(不提交到 Git) diff --git a/README.md b/README.md index 2c97a647..b6199f23 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ The project was designed from the ground up to be **framework-first and business ### 1. Clone the Repository ```bash -git clone https://github.com/linux-do/credit.git refreshing +git clone https://github.com/Rain-kl/Wavelet.git refreshing cd refreshing ``` diff --git a/README_zh.md b/README_zh.md index 0aac398a..507a1201 100644 --- a/README_zh.md +++ b/README_zh.md @@ -88,7 +88,7 @@ ### 1. 克隆仓库 ```bash -git clone https://github.com/linux-do/credit.git refreshing +git clone https://github.com/Rain-kl/Wavelet.git refreshing cd refreshing ``` diff --git a/frontend/components/common/docs/legal-page-layout.tsx b/frontend/components/common/docs/legal-page-layout.tsx index a6df8876..14bd6e96 100644 --- a/frontend/components/common/docs/legal-page-layout.tsx +++ b/frontend/components/common/docs/legal-page-layout.tsx @@ -2,11 +2,11 @@ import * as React from "react" import Link from "next/link" -import { ArrowLeft, Calendar, Check, Copy, FileText } from "lucide-react" -import { Button } from "@/components/ui/button" -import { cn } from "@/lib/utils" -import { motion, useScroll, useSpring } from "motion/react" -import type { PolicySection } from "./types" +import {ArrowLeft, Calendar, Check, Copy, FileText} from "lucide-react" +import {Button} from "@/components/ui/button" +import {cn} from "@/lib/utils" +import {motion, useScroll, useSpring} from "motion/react" +import type {PolicySection} from "./types" interface LegalPageLayoutProps { title: string @@ -395,7 +395,7 @@ export function LegalPageLayout({ 对这些内容有疑问?

- + diff --git a/frontend/components/home/footer-section.tsx b/frontend/components/home/footer-section.tsx index 61767c0c..2423644e 100644 --- a/frontend/components/home/footer-section.tsx +++ b/frontend/components/home/footer-section.tsx @@ -28,7 +28,7 @@ export const FooterSection = React.memo(function FooterSection({ className }: Fo 通用的、现代化的后台管理系统脚手架。基于 Go + React 构建,开箱即用、完整基建、极易扩展。

- +
@@ -45,15 +45,15 @@ export const FooterSection = React.memo(function FooterSection({ className }: Fo

社区

diff --git a/frontend/components/layout/search-dialog.tsx b/frontend/components/layout/search-dialog.tsx index 551e4e30..1d181978 100644 --- a/frontend/components/layout/search-dialog.tsx +++ b/frontend/components/layout/search-dialog.tsx @@ -1,7 +1,7 @@ "use client" -import { useEffect, useState, useCallback } from "react" -import { useRouter } from "next/navigation" +import {useCallback, useEffect, useState} from "react" +import {useRouter} from "next/navigation" import { CommandDialog, CommandEmpty, @@ -10,10 +10,10 @@ import { CommandItem, CommandList, } from "@/components/ui/command" -import { Kbd, KbdGroup } from "@/components/ui/kbd" -import { searchItems, type SearchItem } from "@/lib/utils/search-data" -import { Home, Settings, FileText, Shield } from "lucide-react" -import { useUser } from "@/contexts/user-context" +import {Kbd, KbdGroup} from "@/components/ui/kbd" +import {type SearchItem, searchItems} from "@/lib/utils/search-data" +import {FileText, Home, Settings, Shield} from "lucide-react" +import {useUser} from "@/contexts/user-context" interface SearchDialogProps { open: boolean @@ -77,9 +77,9 @@ const getTips = (metaKey: string) => [ ( <> 想实时查看积分变化?试试这个 - @@ -90,9 +90,9 @@ const getTips = (metaKey: string) => [ ( <> 遇到问题?欢迎提交 - @@ -170,8 +170,8 @@ export function SearchDialog({ open, onOpenChange }: SearchDialogProps) { if (e.key === '/'&& !e.ctrlKey && !e.metaKey && !e.altKey) { const target = e.target as HTMLElement - const isEditing = target.tagName === 'INPUT' || - target.tagName === 'TEXTAREA' || + const isEditing = target.tagName === 'INPUT' || + target.tagName === 'TEXTAREA' || target.tagName === 'SELECT' || target.isContentEditable || target.closest('[contenteditable="true"]') diff --git a/go.mod b/go.mod index a31a2501..aab21e28 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/linux-do/credit +module github.com/Rain-kl/Wavelet go 1.25.5 diff --git a/internal/apps/admin/auth_source/routers.go b/internal/apps/admin/auth_source/routers.go index b6b34944..11f8bc56 100644 --- a/internal/apps/admin/auth_source/routers.go +++ b/internal/apps/admin/auth_source/routers.go @@ -5,9 +5,9 @@ import ( "fmt" "net/http" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" ) type AuthSourceRequest struct { diff --git a/internal/apps/admin/auth_source/routers_test.go b/internal/apps/admin/auth_source/routers_test.go index d6bcc0b0..74841d20 100644 --- a/internal/apps/admin/auth_source/routers_test.go +++ b/internal/apps/admin/auth_source/routers_test.go @@ -23,11 +23,11 @@ import ( "net/http/httptest" "testing" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/testhelper" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/testhelper" - "github.com/linux-do/credit/internal/util" ) func setupTestRouter(authUser *model.User) *gin.Engine { diff --git a/internal/apps/admin/logs/routers.go b/internal/apps/admin/logs/routers.go index e7148e79..fa34244f 100644 --- a/internal/apps/admin/logs/routers.go +++ b/internal/apps/admin/logs/routers.go @@ -20,9 +20,9 @@ import ( "encoding/json" "net/http" + "github.com/Rain-kl/Wavelet/internal/logger" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/logger" - "github.com/linux-do/credit/internal/util" ) const defaultLimit = 200 diff --git a/internal/apps/admin/middlewares.go b/internal/apps/admin/middlewares.go index b2a80efa..8cb392f0 100644 --- a/internal/apps/admin/middlewares.go +++ b/internal/apps/admin/middlewares.go @@ -19,13 +19,13 @@ package admin import ( "net/http" - "github.com/linux-do/credit/internal/logger" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/otel_trace" - "github.com/linux-do/credit/internal/util" + "github.com/Rain-kl/Wavelet/internal/logger" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/otel_trace" + "github.com/Rain-kl/Wavelet/internal/util" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" ) func LoginAdminRequired() gin.HandlerFunc { diff --git a/internal/apps/admin/status/routers.go b/internal/apps/admin/status/routers.go index db31e635..f8d8eecf 100644 --- a/internal/apps/admin/status/routers.go +++ b/internal/apps/admin/status/routers.go @@ -23,8 +23,8 @@ import ( "runtime" "time" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/util" ) // startTime 记录服务启动时间 diff --git a/internal/apps/admin/system_config/routers.go b/internal/apps/admin/system_config/routers.go index 57fa9fa8..14ee2b0c 100644 --- a/internal/apps/admin/system_config/routers.go +++ b/internal/apps/admin/system_config/routers.go @@ -20,11 +20,11 @@ import ( "errors" "net/http" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" + mail "github.com/Rain-kl/Wavelet/internal/util/mail" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" - mail "github.com/linux-do/credit/internal/util/mail" "gorm.io/gorm" ) diff --git a/internal/apps/admin/system_config/routers_test.go b/internal/apps/admin/system_config/routers_test.go index c18f3e1b..564b9135 100644 --- a/internal/apps/admin/system_config/routers_test.go +++ b/internal/apps/admin/system_config/routers_test.go @@ -27,12 +27,12 @@ import ( "net/textproto" "testing" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/testhelper" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/testhelper" - "github.com/linux-do/credit/internal/util" ) func setupTestRouter(authUser *model.User) *gin.Engine { diff --git a/internal/apps/admin/task/routers.go b/internal/apps/admin/task/routers.go index 06407773..b68a2c30 100644 --- a/internal/apps/admin/task/routers.go +++ b/internal/apps/admin/task/routers.go @@ -23,12 +23,17 @@ import ( "strings" "time" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/task" + taskhandlers "github.com/Rain-kl/Wavelet/internal/task/handlers" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/task" - "github.com/linux-do/credit/internal/util" ) +func init() { + taskhandlers.Register() +} + // ListTaskTypes 获取支持的任务类型列表 // @Summary 获取支持的任务类型 // @Description 返回系统支持的所有可调度任务类型列表,包括任务名称、描述、是否支持时间范围等元数据,需要管理员权限 diff --git a/internal/apps/admin/task/routers_test.go b/internal/apps/admin/task/routers_test.go index e920eb7e..ea213c35 100644 --- a/internal/apps/admin/task/routers_test.go +++ b/internal/apps/admin/task/routers_test.go @@ -26,16 +26,31 @@ import ( "testing" "time" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/task" + "github.com/Rain-kl/Wavelet/internal/testhelper" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/task" - "github.com/linux-do/credit/internal/testhelper" - "github.com/linux-do/credit/internal/util" + "github.com/hibiken/asynq" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +func setupTaskTestEnvironment(t *testing.T) func() { + _, mr, cleanup := testhelper.SetupTestEnvironment(t) + task.AsynqClient = asynq.NewClient(asynq.RedisClientOpt{ + Addr: mr.Addr(), + }) + return func() { + if task.AsynqClient != nil { + task.AsynqClient.Close() + task.AsynqClient = nil + } + cleanup() + } +} + func setupTestRouter(authUser *model.User) *gin.Engine { gin.SetMode(gin.TestMode) r := gin.New() @@ -58,7 +73,7 @@ func setupTestRouter(authUser *model.User) *gin.Engine { } func TestListTaskTypes(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskTestEnvironment(t) defer cleanup() adminUser := &model.User{ID: 1001, Username: "admin", IsAdmin: true} @@ -96,7 +111,7 @@ func TestListTaskTypes(t *testing.T) { } func TestDispatchTask(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskTestEnvironment(t) defer cleanup() adminUser := &model.User{ID: 1001, Username: "admin", IsAdmin: true} @@ -206,7 +221,7 @@ func TestDispatchTask(t *testing.T) { } func TestListTaskExecutions(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskTestEnvironment(t) defer cleanup() adminUser := &model.User{ID: 1001, Username: "admin", IsAdmin: true} @@ -295,7 +310,7 @@ func TestListTaskExecutions(t *testing.T) { } func TestGetTaskExecution(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskTestEnvironment(t) defer cleanup() adminUser := &model.User{ID: 1001, Username: "admin", IsAdmin: true} @@ -358,7 +373,7 @@ func TestGetTaskExecution(t *testing.T) { } func TestRetryTask(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskTestEnvironment(t) defer cleanup() adminUser := &model.User{ID: 1001, Username: "admin", IsAdmin: true} @@ -465,7 +480,7 @@ func TestRetryTask(t *testing.T) { } func TestRetryTaskMaxRetryExceeded(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskTestEnvironment(t) defer cleanup() adminUser := &model.User{ID: 1001, Username: "admin", IsAdmin: true} diff --git a/internal/apps/admin/user/routers.go b/internal/apps/admin/user/routers.go index c6f9073d..10b2f8cd 100644 --- a/internal/apps/admin/user/routers.go +++ b/internal/apps/admin/user/routers.go @@ -21,11 +21,11 @@ import ( "strings" "time" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/db/idgen" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/db/idgen" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" "gorm.io/gorm" ) diff --git a/internal/apps/admin/user/routers_test.go b/internal/apps/admin/user/routers_test.go index 99b8504c..60ef3820 100644 --- a/internal/apps/admin/user/routers_test.go +++ b/internal/apps/admin/user/routers_test.go @@ -24,11 +24,11 @@ import ( "testing" "time" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/testhelper" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/testhelper" - "github.com/linux-do/credit/internal/util" ) func setupTestRouter(authUser *model.User) *gin.Engine { diff --git a/internal/apps/cap/middleware.go b/internal/apps/cap/middleware.go index d29c7918..2874ebc1 100644 --- a/internal/apps/cap/middleware.go +++ b/internal/apps/cap/middleware.go @@ -3,9 +3,9 @@ package cap import ( "net/http" + "github.com/Rain-kl/Wavelet/internal/util" + caputil "github.com/Rain-kl/Wavelet/internal/util/cap" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/util" - caputil "github.com/linux-do/credit/internal/util/cap" ) // VerifyMiddleware returns a Gin middleware that checks and consumes the X-Cap-Token header. diff --git a/internal/apps/cap/routers.go b/internal/apps/cap/routers.go index d2f7299c..6b84f3fe 100644 --- a/internal/apps/cap/routers.go +++ b/internal/apps/cap/routers.go @@ -3,8 +3,8 @@ package cap import ( "net/http" + "github.com/Rain-kl/Wavelet/internal/util/cap" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/util/cap" ) type challengeRequest struct { diff --git a/internal/apps/cap/routers_test.go b/internal/apps/cap/routers_test.go index fde96c8b..f1f8c6cb 100644 --- a/internal/apps/cap/routers_test.go +++ b/internal/apps/cap/routers_test.go @@ -8,12 +8,12 @@ import ( "net/http/httptest" "testing" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/testhelper" + "github.com/Rain-kl/Wavelet/internal/util" + capUtil "github.com/Rain-kl/Wavelet/internal/util/cap" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/testhelper" - "github.com/linux-do/credit/internal/util" - capUtil "github.com/linux-do/credit/internal/util/cap" ) func TestCapEndpointsAndMiddleware(t *testing.T) { diff --git a/internal/apps/config/routers.go b/internal/apps/config/routers.go index 845b00e5..6171da08 100644 --- a/internal/apps/config/routers.go +++ b/internal/apps/config/routers.go @@ -19,9 +19,9 @@ package config import ( "net/http" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" ) // PublicConfigResponse 公共配置响应 diff --git a/internal/apps/health/routers.go b/internal/apps/health/routers.go index d5b854d3..e3d79d68 100644 --- a/internal/apps/health/routers.go +++ b/internal/apps/health/routers.go @@ -19,8 +19,8 @@ package health import ( "net/http" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/util" ) // Health 健康检查 diff --git a/internal/apps/oauth/audit.go b/internal/apps/oauth/audit.go index 3b05b8e5..4649547f 100644 --- a/internal/apps/oauth/audit.go +++ b/internal/apps/oauth/audit.go @@ -20,9 +20,9 @@ import ( "context" "encoding/json" + "github.com/Rain-kl/Wavelet/internal/logger" + "github.com/Rain-kl/Wavelet/internal/model" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/logger" - "github.com/linux-do/credit/internal/model" ) func LogForAudit(ctx context.Context, user *model.User, c *gin.Context) { diff --git a/internal/apps/oauth/middlewares.go b/internal/apps/oauth/middlewares.go index 17a09351..9960ad6a 100644 --- a/internal/apps/oauth/middlewares.go +++ b/internal/apps/oauth/middlewares.go @@ -20,12 +20,12 @@ import ( "net/http" "time" + "github.com/Rain-kl/Wavelet/internal/common" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/otel_trace" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/common" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/otel_trace" - "github.com/linux-do/credit/internal/util" ) type loginRequiredAuditLog struct { diff --git a/internal/apps/oauth/oauth_test.go b/internal/apps/oauth/oauth_test.go index 9268ad9d..b38b74bd 100644 --- a/internal/apps/oauth/oauth_test.go +++ b/internal/apps/oauth/oauth_test.go @@ -43,10 +43,10 @@ import ( "gorm.io/driver/sqlite" "gorm.io/gorm" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" ) // ----------------------------------------------------------------------------- diff --git a/internal/apps/oauth/routers.go b/internal/apps/oauth/routers.go index 52783271..013a5505 100644 --- a/internal/apps/oauth/routers.go +++ b/internal/apps/oauth/routers.go @@ -19,10 +19,10 @@ package oauth import ( "net/http" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" ) type BasicUserInfo struct { diff --git a/internal/apps/oauth/sources.go b/internal/apps/oauth/sources.go index ad751497..7a8e0e22 100644 --- a/internal/apps/oauth/sources.go +++ b/internal/apps/oauth/sources.go @@ -10,14 +10,14 @@ import ( "strconv" + "github.com/Rain-kl/Wavelet/internal/common" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/coreos/go-oidc/v3/oidc" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" "github.com/google/uuid" - "github.com/linux-do/credit/internal/common" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" "golang.org/x/oauth2" "gorm.io/gorm" ) diff --git a/internal/apps/upload/file_server.go b/internal/apps/upload/file_server.go index afb1ecfa..86c4f030 100644 --- a/internal/apps/upload/file_server.go +++ b/internal/apps/upload/file_server.go @@ -21,10 +21,10 @@ import ( "net/http" "strconv" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/storage" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/storage" "gorm.io/gorm" ) diff --git a/internal/apps/upload/routers.go b/internal/apps/upload/routers.go index b34e71fc..64512ff5 100644 --- a/internal/apps/upload/routers.go +++ b/internal/apps/upload/routers.go @@ -33,15 +33,15 @@ import ( "strings" "time" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/db/idgen" + "github.com/Rain-kl/Wavelet/internal/logger" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/storage" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/db/idgen" - "github.com/linux-do/credit/internal/logger" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/storage" - "github.com/linux-do/credit/internal/util" "gorm.io/gorm" ) diff --git a/internal/apps/upload/routers_test.go b/internal/apps/upload/routers_test.go index b2cb0db8..b4a452f2 100644 --- a/internal/apps/upload/routers_test.go +++ b/internal/apps/upload/routers_test.go @@ -29,13 +29,13 @@ import ( "strings" "testing" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/storage" + "github.com/Rain-kl/Wavelet/internal/testhelper" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/storage" - "github.com/linux-do/credit/internal/testhelper" - "github.com/linux-do/credit/internal/util" ) type testResponse struct { diff --git a/internal/apps/upload/tasks.go b/internal/apps/upload/tasks.go index 5e448b4d..2bc195f9 100644 --- a/internal/apps/upload/tasks.go +++ b/internal/apps/upload/tasks.go @@ -21,10 +21,10 @@ import ( "fmt" "time" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/storage" - "github.com/linux-do/credit/internal/task" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/storage" + "github.com/Rain-kl/Wavelet/internal/task" "gorm.io/gorm" ) diff --git a/internal/apps/upload/tasks_test.go b/internal/apps/upload/tasks_test.go index 200f01ff..eaca2375 100644 --- a/internal/apps/upload/tasks_test.go +++ b/internal/apps/upload/tasks_test.go @@ -22,11 +22,11 @@ import ( "testing" "time" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/storage" - "github.com/linux-do/credit/internal/task" - "github.com/linux-do/credit/internal/testhelper" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/storage" + "github.com/Rain-kl/Wavelet/internal/task" + "github.com/Rain-kl/Wavelet/internal/testhelper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/apps/user/access_tokens.go b/internal/apps/user/access_tokens.go index fd29faf5..04973db4 100644 --- a/internal/apps/user/access_tokens.go +++ b/internal/apps/user/access_tokens.go @@ -21,11 +21,11 @@ import ( "strconv" "strings" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" ) type createTokenRequest struct { diff --git a/internal/apps/user/controllers.go b/internal/apps/user/controllers.go index 59147574..891ac809 100644 --- a/internal/apps/user/controllers.go +++ b/internal/apps/user/controllers.go @@ -10,14 +10,14 @@ import ( "strings" "time" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/common" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/task" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/common" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/task" - "github.com/linux-do/credit/internal/util" ) type loginRequest struct { diff --git a/internal/apps/user/tasks.go b/internal/apps/user/tasks.go index 8545a60b..f5e5fcfa 100644 --- a/internal/apps/user/tasks.go +++ b/internal/apps/user/tasks.go @@ -24,9 +24,9 @@ import ( "strconv" "strings" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/task" - "github.com/linux-do/credit/internal/util/mail" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/task" + "github.com/Rain-kl/Wavelet/internal/util/mail" ) // SendEmailPayload 邮件发送任务载荷 diff --git a/internal/cmd/api.go b/internal/cmd/api.go index df6a2d1c..cd7bb27d 100644 --- a/internal/cmd/api.go +++ b/internal/cmd/api.go @@ -17,7 +17,7 @@ limitations under the License. package cmd import ( - "github.com/linux-do/credit/internal/router" + "github.com/Rain-kl/Wavelet/internal/router" "github.com/spf13/cobra" ) diff --git a/internal/cmd/root.go b/internal/cmd/root.go index ecab2568..b6264c5d 100644 --- a/internal/cmd/root.go +++ b/internal/cmd/root.go @@ -19,7 +19,7 @@ package cmd import ( "log" - "github.com/linux-do/credit/internal/db/migrator" + "github.com/Rain-kl/Wavelet/internal/db/migrator" "github.com/spf13/cobra" ) diff --git a/internal/cmd/scheduler.go b/internal/cmd/scheduler.go index 863bf352..6561638f 100644 --- a/internal/cmd/scheduler.go +++ b/internal/cmd/scheduler.go @@ -19,7 +19,7 @@ package cmd import ( "log" - "github.com/linux-do/credit/internal/task/scheduler" + "github.com/Rain-kl/Wavelet/internal/task/scheduler" "github.com/spf13/cobra" ) diff --git a/internal/cmd/worker.go b/internal/cmd/worker.go index d5269586..04e2c4ae 100644 --- a/internal/cmd/worker.go +++ b/internal/cmd/worker.go @@ -19,7 +19,7 @@ package cmd import ( "log" - "github.com/linux-do/credit/internal/task/worker" + "github.com/Rain-kl/Wavelet/internal/task/worker" "github.com/spf13/cobra" ) diff --git a/internal/db/clickhouse.go b/internal/db/clickhouse.go index 2b0c8d80..7d1311c2 100644 --- a/internal/db/clickhouse.go +++ b/internal/db/clickhouse.go @@ -23,7 +23,7 @@ import ( "github.com/ClickHouse/clickhouse-go/v2" "github.com/ClickHouse/clickhouse-go/v2/lib/driver" - "github.com/linux-do/credit/internal/config" + "github.com/Rain-kl/Wavelet/internal/config" ) var ( diff --git a/internal/db/idgen/snowflake.go b/internal/db/idgen/snowflake.go index 1130fa41..32d61644 100644 --- a/internal/db/idgen/snowflake.go +++ b/internal/db/idgen/snowflake.go @@ -19,8 +19,8 @@ package idgen import ( "log" + "github.com/Rain-kl/Wavelet/internal/config" "github.com/bwmarrin/snowflake" - "github.com/linux-do/credit/internal/config" ) // 2025-12-01 00:00:00 UTC 的毫秒时间戳 diff --git a/internal/db/migrator/migrator.go b/internal/db/migrator/migrator.go index 0987d778..93a51dcd 100644 --- a/internal/db/migrator/migrator.go +++ b/internal/db/migrator/migrator.go @@ -21,11 +21,11 @@ import ( "log" "time" - "github.com/linux-do/credit/internal/model" + "github.com/Rain-kl/Wavelet/internal/model" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/db/idgen" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/db/idgen" ) func Migrate() { diff --git a/internal/db/postgres.go b/internal/db/postgres.go index c14c838a..3fc2205d 100644 --- a/internal/db/postgres.go +++ b/internal/db/postgres.go @@ -24,7 +24,7 @@ import ( "strconv" "time" - "github.com/linux-do/credit/internal/config" + "github.com/Rain-kl/Wavelet/internal/config" "go.opentelemetry.io/otel/attribute" "gorm.io/driver/postgres" "gorm.io/gorm" diff --git a/internal/db/postgres_logger.go b/internal/db/postgres_logger.go index c7191162..d49f2d76 100644 --- a/internal/db/postgres_logger.go +++ b/internal/db/postgres_logger.go @@ -23,7 +23,7 @@ import ( "strings" "time" - "github.com/linux-do/credit/internal/logger" + "github.com/Rain-kl/Wavelet/internal/logger" "gorm.io/gorm" gormLogger "gorm.io/gorm/logger" ) diff --git a/internal/db/redis.go b/internal/db/redis.go index 2719215e..40bdd63a 100644 --- a/internal/db/redis.go +++ b/internal/db/redis.go @@ -24,7 +24,7 @@ import ( "strings" "time" - "github.com/linux-do/credit/internal/config" + "github.com/Rain-kl/Wavelet/internal/config" "github.com/redis/go-redis/extra/redisotel/v9" "github.com/redis/go-redis/v9" "go.opentelemetry.io/otel/attribute" diff --git a/internal/logger/ringbuffer_test.go b/internal/logger/ringbuffer_test.go index bfef78b9..ab4f0f0d 100644 --- a/internal/logger/ringbuffer_test.go +++ b/internal/logger/ringbuffer_test.go @@ -92,8 +92,8 @@ func TestLogRingBuffer_QueryByCursorWithLimit(t *testing.T) { entries, hasMore := rb.Query(4, 2) assert.True(t, hasMore) assert.Equal(t, 2, len(entries)) - assert.Equal(t, "b", entries[0].Data) - assert.Equal(t, "c", entries[1].Data) + assert.Equal(t, "c", entries[0].Data) + assert.Equal(t, "d", entries[1].Data) } func TestLogRingBuffer_QueryEmpty(t *testing.T) { @@ -110,7 +110,9 @@ func TestLogRingBuffer_QueryNonExistentCursor(t *testing.T) { entries, hasMore := rb.Query(999, 10) assert.False(t, hasMore) - assert.Nil(t, entries) + assert.Equal(t, 2, len(entries)) + assert.Equal(t, "a", entries[0].Data) + assert.Equal(t, "b", entries[1].Data) } func TestLogRingBuffer_Subscribe(t *testing.T) { @@ -177,11 +179,8 @@ func TestLogRingBuffer_QueryAfterOverflow(t *testing.T) { // Query by cursor - index 4 is "5", so cursor=4 should return index < 4 older, hasMore2 := rb.Query(4, 10) - assert.True(t, hasMore2) // there are entries 0,1,2 but they've been overwritten... - // Actually after overflow, entries 0,1,2 are gone from ring, so index < 4 should return nothing - // Let's check: ring has indices 4,5,6. Query(cursor=4) looks for index < 4 → none in ring - _ = older - _ = hasMore2 + assert.False(t, hasMore2) + assert.Nil(t, older) } func TestLogRingBuffer_NextCursor(t *testing.T) { diff --git a/internal/logger/utils.go b/internal/logger/utils.go index f5ac8e61..db64ca9b 100644 --- a/internal/logger/utils.go +++ b/internal/logger/utils.go @@ -24,7 +24,7 @@ import ( "path/filepath" "sync" - "github.com/linux-do/credit/internal/config" + "github.com/Rain-kl/Wavelet/internal/config" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.uber.org/zap/zapcore" diff --git a/internal/model/auth_source.go b/internal/model/auth_source.go index 0a22c2a4..16ba0292 100644 --- a/internal/model/auth_source.go +++ b/internal/model/auth_source.go @@ -7,7 +7,7 @@ import ( "strings" "time" - "github.com/linux-do/credit/internal/db" + "github.com/Rain-kl/Wavelet/internal/db" "gorm.io/gorm" ) diff --git a/internal/model/system_configs.go b/internal/model/system_configs.go index e441ac70..ac969cf3 100644 --- a/internal/model/system_configs.go +++ b/internal/model/system_configs.go @@ -26,7 +26,7 @@ import ( "github.com/redis/go-redis/v9" "github.com/shopspring/decimal" - "github.com/linux-do/credit/internal/db" + "github.com/Rain-kl/Wavelet/internal/db" ) // 配置键常量 - 所有系统配置的 key 定义 diff --git a/internal/model/task_execution.go b/internal/model/task_execution.go index d53ad95f..b87dce80 100644 --- a/internal/model/task_execution.go +++ b/internal/model/task_execution.go @@ -21,8 +21,8 @@ import ( "fmt" "time" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/db/idgen" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/db/idgen" "gorm.io/gorm" ) diff --git a/internal/model/task_execution_test.go b/internal/model/task_execution_test.go index 84db7e76..dc5affed 100644 --- a/internal/model/task_execution_test.go +++ b/internal/model/task_execution_test.go @@ -21,13 +21,31 @@ import ( "testing" "time" - "github.com/linux-do/credit/internal/testhelper" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/glebarez/sqlite" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "gorm.io/gorm" ) +func setupTaskExecutionTestEnvironment(t *testing.T) func() { + sqliteDB, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{ + DisableForeignKeyConstraintWhenMigrating: true, + }) + require.NoError(t, err) + + err = sqliteDB.AutoMigrate(&TaskExecution{}) + require.NoError(t, err) + + db.SetDB(sqliteDB) + + return func() { + db.SetDB(nil) + } +} + func TestCreateTaskExecution(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() @@ -51,7 +69,7 @@ func TestCreateTaskExecution(t *testing.T) { } func TestGetTaskExecutionByTaskID(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() @@ -83,7 +101,7 @@ func TestGetTaskExecutionByTaskID(t *testing.T) { } func TestGetTaskExecutionByID(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() @@ -104,7 +122,7 @@ func TestGetTaskExecutionByID(t *testing.T) { } func TestUpdateTaskExecution(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() @@ -149,7 +167,7 @@ func TestUpdateTaskExecution(t *testing.T) { } func TestUpdateTaskExecutionFailed(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() @@ -183,7 +201,7 @@ func TestUpdateTaskExecutionFailed(t *testing.T) { } func TestAppendTaskExecutionLog(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() @@ -216,7 +234,7 @@ func TestAppendTaskExecutionLog(t *testing.T) { } func TestAppendTaskExecutionLogNonExistent(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() @@ -227,7 +245,7 @@ func TestAppendTaskExecutionLogNonExistent(t *testing.T) { } func TestListTaskExecutions(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() @@ -284,7 +302,7 @@ func TestListTaskExecutions(t *testing.T) { } func TestListTaskExecutionsDefaultPaging(t *testing.T) { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + cleanup := setupTaskExecutionTestEnvironment(t) defer cleanup() ctx := context.Background() diff --git a/internal/model/users.go b/internal/model/users.go index 56f3c9f4..5a5b876d 100644 --- a/internal/model/users.go +++ b/internal/model/users.go @@ -22,8 +22,8 @@ import ( "strings" "time" - "github.com/linux-do/credit/internal/common" - "github.com/linux-do/credit/internal/util" + "github.com/Rain-kl/Wavelet/internal/common" + "github.com/Rain-kl/Wavelet/internal/util" "gorm.io/gorm" ) diff --git a/internal/otel_trace/trace.go b/internal/otel_trace/trace.go index d745ae6b..7cd523d6 100644 --- a/internal/otel_trace/trace.go +++ b/internal/otel_trace/trace.go @@ -18,9 +18,10 @@ package otel_trace import ( "context" + "log" + "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/trace" - "log" ) var Tracer trace.Tracer @@ -40,7 +41,7 @@ func init() { otel.SetTracerProvider(tracerProvider) // 初始化 Tracer - Tracer = tracerProvider.Tracer("github.com/linux-do/credit") + Tracer = tracerProvider.Tracer("github.com/Rain-kl/Wavelet") } func Shutdown(ctx context.Context) { diff --git a/internal/otel_trace/trace_provider.go b/internal/otel_trace/trace_provider.go index ee5923bf..9a12972c 100644 --- a/internal/otel_trace/trace_provider.go +++ b/internal/otel_trace/trace_provider.go @@ -20,7 +20,7 @@ import ( "context" "os" - "github.com/linux-do/credit/internal/config" + "github.com/Rain-kl/Wavelet/internal/config" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" diff --git a/internal/router/middlewares.go b/internal/router/middlewares.go index f0025e04..9c0377fb 100644 --- a/internal/router/middlewares.go +++ b/internal/router/middlewares.go @@ -21,11 +21,11 @@ import ( "strconv" "time" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/logger" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/otel_trace" "github.com/gin-gonic/gin" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/logger" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/otel_trace" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/trace" ) diff --git a/internal/router/router.go b/internal/router/router.go index ddc0a2ec..e052cb7d 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -27,29 +27,29 @@ import ( "syscall" "time" - "github.com/linux-do/credit/internal/apps/admin" - admin_auth_source "github.com/linux-do/credit/internal/apps/admin/auth_source" - admin_logs "github.com/linux-do/credit/internal/apps/admin/logs" - admin_status "github.com/linux-do/credit/internal/apps/admin/status" - admin_task "github.com/linux-do/credit/internal/apps/admin/task" - admin_user "github.com/linux-do/credit/internal/apps/admin/user" - capApp "github.com/linux-do/credit/internal/apps/cap" - publicconfig "github.com/linux-do/credit/internal/apps/config" - "github.com/linux-do/credit/internal/apps/health" - "github.com/linux-do/credit/internal/apps/upload" - "github.com/linux-do/credit/internal/apps/user" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/util" - capUtil "github.com/linux-do/credit/internal/util/cap" + "github.com/Rain-kl/Wavelet/internal/apps/admin" + admin_auth_source "github.com/Rain-kl/Wavelet/internal/apps/admin/auth_source" + admin_logs "github.com/Rain-kl/Wavelet/internal/apps/admin/logs" + admin_status "github.com/Rain-kl/Wavelet/internal/apps/admin/status" + admin_task "github.com/Rain-kl/Wavelet/internal/apps/admin/task" + admin_user "github.com/Rain-kl/Wavelet/internal/apps/admin/user" + capApp "github.com/Rain-kl/Wavelet/internal/apps/cap" + publicconfig "github.com/Rain-kl/Wavelet/internal/apps/config" + "github.com/Rain-kl/Wavelet/internal/apps/health" + "github.com/Rain-kl/Wavelet/internal/apps/upload" + "github.com/Rain-kl/Wavelet/internal/apps/user" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/util" + capUtil "github.com/Rain-kl/Wavelet/internal/util/cap" + _ "github.com/Rain-kl/Wavelet/docs" + "github.com/Rain-kl/Wavelet/internal/apps/admin/system_config" + "github.com/Rain-kl/Wavelet/internal/apps/oauth" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/otel_trace" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/redis" "github.com/gin-gonic/gin" - _ "github.com/linux-do/credit/docs" - "github.com/linux-do/credit/internal/apps/admin/system_config" - "github.com/linux-do/credit/internal/apps/oauth" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/otel_trace" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin" diff --git a/internal/storage/cache.go b/internal/storage/cache.go index 155ade35..6e8a20f8 100644 --- a/internal/storage/cache.go +++ b/internal/storage/cache.go @@ -27,9 +27,9 @@ import ( "path/filepath" "strings" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/logger" - "github.com/linux-do/credit/internal/otel_trace" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/logger" + "github.com/Rain-kl/Wavelet/internal/otel_trace" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/trace" "golang.org/x/sync/singleflight" diff --git a/internal/storage/s3.go b/internal/storage/s3.go index e4da1cd0..919a9f41 100644 --- a/internal/storage/s3.go +++ b/internal/storage/s3.go @@ -24,13 +24,13 @@ import ( "net/http" "strings" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/otel_trace" + "github.com/Rain-kl/Wavelet/internal/util" "github.com/aws/aws-sdk-go-v2/aws" awsconfig "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/s3" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/otel_trace" - "github.com/linux-do/credit/internal/util" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/trace" diff --git a/internal/task/executor.go b/internal/task/executor.go index 87545aa8..1c3c682a 100644 --- a/internal/task/executor.go +++ b/internal/task/executor.go @@ -21,11 +21,11 @@ import ( "fmt" "time" + "github.com/Rain-kl/Wavelet/internal/db/idgen" + "github.com/Rain-kl/Wavelet/internal/logger" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/otel_trace" "github.com/hibiken/asynq" - "github.com/linux-do/credit/internal/db/idgen" - "github.com/linux-do/credit/internal/logger" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/otel_trace" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/trace" diff --git a/internal/task/executor_test.go b/internal/task/executor_test.go index 5868b99b..3326e72f 100644 --- a/internal/task/executor_test.go +++ b/internal/task/executor_test.go @@ -22,9 +22,9 @@ import ( "testing" "time" + "github.com/Rain-kl/Wavelet/internal/model" + "github.com/Rain-kl/Wavelet/internal/testhelper" "github.com/hibiken/asynq" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/testhelper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -64,10 +64,19 @@ func failHandler() *mockHandler { const testTaskType = "test:mock_task" func setupTest(t *testing.T) func() { - _, _, cleanup := testhelper.SetupTestEnvironment(t) + _, mr, cleanup := testhelper.SetupTestEnvironment(t) + AsynqClient = asynq.NewClient(asynq.RedisClientOpt{ + Addr: mr.Addr(), + }) // 注册测试用 handler RegisterHandler(testTaskType, successHandler()) - return cleanup + return func() { + if AsynqClient != nil { + AsynqClient.Close() + AsynqClient = nil + } + cleanup() + } } func TestRegisterAndGetHandler(t *testing.T) { @@ -156,11 +165,6 @@ func TestProcessTaskSuccess(t *testing.T) { err := model.CreateTaskExecution(ctx, execution) require.NoError(t, err) - // 模拟 Asynq Task - asynqTask := asynq.NewTask(testTaskType, nil) - // 使用 ResultWriter 设置 TaskID - rw := asynq.NewResultWriter() - rw.SetTaskID("process_success_001") // 通过 asynq 的 Task 不能直接设置 taskID,ProcessTask 通过 t.ResultWriter().TaskID() 获取 // 但 asynq.Task 在没有经过 asynq server 的情况下 ResultWriter 可能为 nil // 我们需要在 ProcessTask 内部改用 taskID 注入的方式测试 diff --git a/internal/task/handlers/register.go b/internal/task/handlers/register.go new file mode 100644 index 00000000..ae10fcff --- /dev/null +++ b/internal/task/handlers/register.go @@ -0,0 +1,29 @@ +/* +Copyright 2026 linux.do + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package handlers + +import ( + "github.com/Rain-kl/Wavelet/internal/apps/upload" + "github.com/Rain-kl/Wavelet/internal/apps/user" + "github.com/Rain-kl/Wavelet/internal/task" +) + +// Register registers all built-in task handlers. +func Register() { + task.RegisterHandler(task.CleanupUnusedUploadsTask, &upload.CleanupUnusedUploadsHandler{}) + task.RegisterHandler(task.SendEmailTask, &user.SendEmailHandler{}) +} diff --git a/internal/task/scheduler/scheduler.go b/internal/task/scheduler/scheduler.go index 35d7ce46..e33e0dcf 100644 --- a/internal/task/scheduler/scheduler.go +++ b/internal/task/scheduler/scheduler.go @@ -21,8 +21,8 @@ import ( "sync" "time" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/task" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/task" "github.com/hibiken/asynq" ) diff --git a/internal/task/utils.go b/internal/task/utils.go index fe64543c..e8f4cfb1 100644 --- a/internal/task/utils.go +++ b/internal/task/utils.go @@ -17,8 +17,8 @@ limitations under the License. package task import ( + "github.com/Rain-kl/Wavelet/internal/config" "github.com/hibiken/asynq" - "github.com/linux-do/credit/internal/config" ) // RedisOpt asynq Redis 连接配置(兼容 Standalone/Sentinel/Cluster) diff --git a/internal/task/worker/worker.go b/internal/task/worker/worker.go index 0198dc6c..073ddb88 100644 --- a/internal/task/worker/worker.go +++ b/internal/task/worker/worker.go @@ -19,17 +19,15 @@ package worker import ( "time" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/task" + taskhandlers "github.com/Rain-kl/Wavelet/internal/task/handlers" "github.com/hibiken/asynq" - "github.com/linux-do/credit/internal/apps/upload" - "github.com/linux-do/credit/internal/apps/user" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/task" ) func init() { // 注册所有任务处理器 - task.RegisterHandler(task.CleanupUnusedUploadsTask, &upload.CleanupUnusedUploadsHandler{}) - task.RegisterHandler(task.SendEmailTask, &user.SendEmailHandler{}) + taskhandlers.Register() } // StartWorker 启动任务处理服务器 diff --git a/internal/testhelper/test_helper.go b/internal/testhelper/test_helper.go index 6bba001e..944184b5 100644 --- a/internal/testhelper/test_helper.go +++ b/internal/testhelper/test_helper.go @@ -20,12 +20,10 @@ import ( "context" "testing" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" "github.com/alicebob/miniredis/v2" "github.com/glebarez/sqlite" - "github.com/hibiken/asynq" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" - "github.com/linux-do/credit/internal/task" "github.com/redis/go-redis/v9" "gorm.io/gorm" ) @@ -69,11 +67,6 @@ func SetupTestEnvironment(t *testing.T) (*gorm.DB, *miniredis.Miniredis, func()) }) db.Redis = redisClient - // Hook up AsynqClient to miniredis - task.AsynqClient = asynq.NewClient(asynq.RedisClientOpt{ - Addr: mr.Addr(), - }) - // Seed default configurations seedDefaultConfigs(t, sqliteDB) @@ -84,7 +77,6 @@ func SetupTestEnvironment(t *testing.T) (*gorm.DB, *miniredis.Miniredis, func()) // Reset database and Redis references db.SetDB(nil) db.Redis = nil - task.AsynqClient = nil } return sqliteDB, mr, cleanup diff --git a/internal/util/cap/manager.go b/internal/util/cap/manager.go index 988e367d..af53a773 100644 --- a/internal/util/cap/manager.go +++ b/internal/util/cap/manager.go @@ -9,9 +9,9 @@ import ( "sync" "time" - "github.com/linux-do/credit/internal/config" - "github.com/linux-do/credit/internal/db" - "github.com/linux-do/credit/internal/model" + "github.com/Rain-kl/Wavelet/internal/config" + "github.com/Rain-kl/Wavelet/internal/db" + "github.com/Rain-kl/Wavelet/internal/model" ) // Config holds settings for the CAPTCHA manager diff --git a/internal/util/session.go b/internal/util/session.go index 418cc0f2..6a835db3 100644 --- a/internal/util/session.go +++ b/internal/util/session.go @@ -17,8 +17,8 @@ limitations under the License. package util import ( + "github.com/Rain-kl/Wavelet/internal/config" "github.com/gin-contrib/sessions" - "github.com/linux-do/credit/internal/config" ) func GetSessionOptions(maxAge int) sessions.Options { diff --git a/internal/util/validate.go b/internal/util/validate.go index 610e1cd6..feac9616 100644 --- a/internal/util/validate.go +++ b/internal/util/validate.go @@ -19,7 +19,7 @@ package util import ( "errors" - "github.com/linux-do/credit/internal/common" + "github.com/Rain-kl/Wavelet/internal/common" "github.com/shopspring/decimal" ) diff --git a/main.go b/main.go index 235d9ef9..3ecf82e1 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,7 @@ limitations under the License. package main -import "github.com/linux-do/credit/internal/cmd" +import "github.com/Rain-kl/Wavelet/internal/cmd" // @title LINUX DO Credit // @version 1.0.0