// Package service 定义业务逻辑层接口 package service import ( "carrotskin/internal/model" "carrotskin/pkg/storage" "context" "go.uber.org/zap" ) // UserService 用户服务接口 type UserService interface { // 用户认证 Register(username, password, email, avatar string) (*model.User, string, error) Login(usernameOrEmail, password, ipAddress, userAgent string) (*model.User, string, error) // 用户查询 GetByID(id int64) (*model.User, error) GetByEmail(email string) (*model.User, error) // 用户更新 UpdateInfo(user *model.User) error UpdateAvatar(userID int64, avatarURL string) error ChangePassword(userID int64, oldPassword, newPassword string) error ResetPassword(email, newPassword string) error ChangeEmail(userID int64, newEmail string) error // URL验证 ValidateAvatarURL(avatarURL string) error // 配置获取 GetMaxProfilesPerUser() int GetMaxTexturesPerUser() int } // ProfileService 档案服务接口 type ProfileService interface { // 档案CRUD Create(userID int64, name string) (*model.Profile, error) GetByUUID(uuid string) (*model.Profile, error) GetByUserID(userID int64) ([]*model.Profile, error) Update(uuid string, userID int64, name *string, skinID, capeID *int64) (*model.Profile, error) Delete(uuid string, userID int64) error // 档案状态 SetActive(uuid string, userID int64) error CheckLimit(userID int64, maxProfiles int) error // 批量查询 GetByNames(names []string) ([]*model.Profile, error) GetByProfileName(name string) (*model.Profile, error) } // TextureService 材质服务接口 type TextureService interface { // 材质CRUD Create(uploaderID int64, name, description, textureType, url, hash string, size int, isPublic, isSlim bool) (*model.Texture, error) GetByID(id int64) (*model.Texture, error) GetByUserID(uploaderID int64, page, pageSize int) ([]*model.Texture, int64, error) Search(keyword string, textureType model.TextureType, publicOnly bool, page, pageSize int) ([]*model.Texture, int64, error) Update(textureID, uploaderID int64, name, description string, isPublic *bool) (*model.Texture, error) Delete(textureID, uploaderID int64) error // 收藏 ToggleFavorite(userID, textureID int64) (bool, error) GetUserFavorites(userID int64, page, pageSize int) ([]*model.Texture, int64, error) // 限制检查 CheckUploadLimit(uploaderID int64, maxTextures int) error } // TokenService 令牌服务接口 type TokenService interface { // 令牌管理 Create(userID int64, uuid, clientToken string) (*model.Profile, []*model.Profile, string, string, error) Validate(accessToken, clientToken string) bool Refresh(accessToken, clientToken, selectedProfileID string) (string, string, error) Invalidate(accessToken string) InvalidateUserTokens(userID int64) // 令牌查询 GetUUIDByAccessToken(accessToken string) (string, error) GetUserIDByAccessToken(accessToken string) (int64, error) } // VerificationService 验证码服务接口 type VerificationService interface { SendCode(ctx context.Context, email, codeType string) error VerifyCode(ctx context.Context, email, code, codeType string) error } // CaptchaService 滑动验证码服务接口 type CaptchaService interface { Generate(ctx context.Context) (masterImg, tileImg, captchaID string, y int, err error) Verify(ctx context.Context, dx int, captchaID string) (bool, error) } // UploadService 上传服务接口 type UploadService interface { GenerateAvatarUploadURL(ctx context.Context, userID int64, fileName string) (*storage.PresignedPostPolicyResult, error) GenerateTextureUploadURL(ctx context.Context, userID int64, fileName, textureType string) (*storage.PresignedPostPolicyResult, error) } // YggdrasilService Yggdrasil服务接口 type YggdrasilService interface { // 用户认证 GetUserIDByEmail(email string) (int64, error) VerifyPassword(password string, userID int64) error // 会话管理 JoinServer(serverID, accessToken, selectedProfile, ip string) error HasJoinedServer(serverID, username, ip string) error // 密码管理 ResetYggdrasilPassword(userID int64) (string, error) // 序列化 SerializeProfile(profile model.Profile) map[string]interface{} SerializeUser(user *model.User, uuid string) map[string]interface{} // 证书 GeneratePlayerCertificate(uuid string) (map[string]interface{}, error) GetPublicKey() (string, error) } // Services 服务集合 type Services struct { User UserService Profile ProfileService Texture TextureService Token TokenService Verification VerificationService Captcha CaptchaService Upload UploadService Yggdrasil YggdrasilService } // ServiceDeps 服务依赖 type ServiceDeps struct { Logger *zap.Logger Storage *storage.StorageClient }