refactor: Implement dependency injection for handlers and services

- Refactored AuthHandler, UserHandler, TextureHandler, ProfileHandler, CaptchaHandler, and YggdrasilHandler to use dependency injection.
- Removed direct instantiation of services and repositories within handlers, replacing them with constructor injection.
- Updated the container to initialize service instances and provide them to handlers.
- Enhanced code structure for better testability and adherence to Go best practices.
This commit is contained in:
lafay
2025-12-02 19:43:39 +08:00
parent 188a05caa7
commit 801f1b1397
33 changed files with 3628 additions and 4129 deletions

View File

@@ -5,6 +5,7 @@ import (
"testing"
"go.uber.org/zap/zaptest"
"gorm.io/datatypes"
)
// TestSerializeUser_NilUser 实际调用SerializeUser函数测试nil用户
@@ -19,25 +20,51 @@ func TestSerializeUser_NilUser(t *testing.T) {
// TestSerializeUser_ActualCall 实际调用SerializeUser函数
func TestSerializeUser_ActualCall(t *testing.T) {
logger := zaptest.NewLogger(t)
user := &model.User{
ID: 1,
Username: "testuser",
Email: "test@example.com",
// Properties 使用 datatypes.JSON测试中可以为空
}
result := SerializeUser(logger, user, "test-uuid-123")
if result == nil {
t.Fatal("SerializeUser() 返回的结果不应为nil")
}
t.Run("Properties为nil时", func(t *testing.T) {
user := &model.User{
ID: 1,
Username: "testuser",
Email: "test@example.com",
}
if result["id"] != "test-uuid-123" {
t.Errorf("id = %v, want 'test-uuid-123'", result["id"])
}
result := SerializeUser(logger, user, "test-uuid-123")
if result == nil {
t.Fatal("SerializeUser() 返回的结果不应为nil")
}
if result["properties"] == nil {
t.Error("properties 不应为nil")
}
if result["id"] != "test-uuid-123" {
t.Errorf("id = %v, want 'test-uuid-123'", result["id"])
}
// 当 Properties 为 nil 时properties 应该为 nil
if result["properties"] != nil {
t.Error("当 user.Properties 为 nil 时properties 应为 nil")
}
})
t.Run("Properties有值时", func(t *testing.T) {
propsJSON := datatypes.JSON(`[{"name":"test","value":"value"}]`)
user := &model.User{
ID: 1,
Username: "testuser",
Email: "test@example.com",
Properties: &propsJSON,
}
result := SerializeUser(logger, user, "test-uuid-456")
if result == nil {
t.Fatal("SerializeUser() 返回的结果不应为nil")
}
if result["id"] != "test-uuid-456" {
t.Errorf("id = %v, want 'test-uuid-456'", result["id"])
}
if result["properties"] == nil {
t.Error("当 user.Properties 有值时properties 不应为 nil")
}
})
}
// TestProperty_Structure 测试Property结构