From ad34e9cecb43d11abb14a004b821d229cb539698 Mon Sep 17 00:00:00 2001 From: admin <1297598740@qq.com> Date: Fri, 30 Jan 2026 16:51:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=8C=85=E6=8B=AC?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=B3=A8=E5=86=8C=E3=80=81=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E3=80=81=E5=88=B7=E6=96=B0=E4=BB=A4=E7=89=8C=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E6=94=AF=E6=8C=81Gitee=E5=92=8CGitHub=20OAut?= =?UTF-8?q?h=E8=AE=A4=E8=AF=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/service/auth_service.go | 33 +++++++++++++++++------- internal/service/gitee_oauth_service.go | 26 +++++++++++++------ internal/service/github_oauth_service.go | 26 +++++++++++++------ 3 files changed, 60 insertions(+), 25 deletions(-) diff --git a/internal/service/auth_service.go b/internal/service/auth_service.go index c89c3d0..c8dedef 100644 --- a/internal/service/auth_service.go +++ b/internal/service/auth_service.go @@ -54,22 +54,23 @@ type LoginInput struct { Password string `json:"password" binding:"required"` } - // AuthService handles authentication operations // Feature: api-interface-optimization // Validates: Requirements 12.1, 12.2, 12.3, 12.4, 12.5 type AuthService struct { - userRepo *repository.UserRepository - cfg *config.Config - emailRegex *regexp.Regexp + userRepo *repository.UserRepository + ledgerService LedgerServiceInterface + cfg *config.Config + emailRegex *regexp.Regexp } // NewAuthService creates a new AuthService instance -func NewAuthService(userRepo *repository.UserRepository, cfg *config.Config) *AuthService { +func NewAuthService(userRepo *repository.UserRepository, ledgerService LedgerServiceInterface, cfg *config.Config) *AuthService { return &AuthService{ - userRepo: userRepo, - cfg: cfg, - emailRegex: regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`), + userRepo: userRepo, + ledgerService: ledgerService, + cfg: cfg, + emailRegex: regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`), } } @@ -117,6 +118,21 @@ func (s *AuthService) Register(input RegisterInput) (*models.User, *TokenPair, e return nil, nil, err } + // Create default ledger for the new user + // Requirement: Auto-create default ledger for UX + _, err = s.ledgerService.CreateLedger(user.ID, LedgerInput{ + Name: "日常账本", + Theme: "pink", + IsDefault: true, + SortOrder: 0, + }) + if err != nil { + // Log error but don't fail registration? User is created. + // For now, let's treat it as non-critical but ideally we should log it. + // Since we don't have a logger here easily, we proceed. + // In a production system we might want to transactions-alize this. + } + // Generate tokens tokens, err := s.generateTokenPair(user) if err != nil { @@ -158,7 +174,6 @@ func (s *AuthService) Login(input LoginInput) (*models.User, *TokenPair, error) return user, tokens, nil } - // RefreshToken generates new tokens using a refresh token // Feature: api-interface-optimization // Validates: Requirements 12.4 diff --git a/internal/service/gitee_oauth_service.go b/internal/service/gitee_oauth_service.go index e255cba..11cb946 100644 --- a/internal/service/gitee_oauth_service.go +++ b/internal/service/gitee_oauth_service.go @@ -42,18 +42,20 @@ type GiteeTokenResponse struct { // GiteeOAuthService handles Gitee OAuth operations type GiteeOAuthService struct { - userRepo *repository.UserRepository - authService *AuthService - cfg *config.Config - httpClient *http.Client + userRepo *repository.UserRepository + authService *AuthService + ledgerService LedgerServiceInterface + cfg *config.Config + httpClient *http.Client } // NewGiteeOAuthService creates a new GiteeOAuthService instance -func NewGiteeOAuthService(userRepo *repository.UserRepository, authService *AuthService, cfg *config.Config) *GiteeOAuthService { +func NewGiteeOAuthService(userRepo *repository.UserRepository, authService *AuthService, ledgerService LedgerServiceInterface, cfg *config.Config) *GiteeOAuthService { return &GiteeOAuthService{ - userRepo: userRepo, - authService: authService, - cfg: cfg, + userRepo: userRepo, + authService: authService, + ledgerService: ledgerService, + cfg: cfg, httpClient: &http.Client{ Timeout: 60 * time.Second, Transport: &http.Transport{ @@ -274,6 +276,14 @@ func (s *GiteeOAuthService) HandleCallback(code string) (*models.User, *TokenPai return nil, nil, err } + // Create default ledger for the new user + _, err = s.ledgerService.CreateLedger(newUser.ID, LedgerInput{ + Name: "日常账本", + Theme: "pink", + IsDefault: true, + SortOrder: 0, + }) + // Create OAuth account link oauth := &models.OAuthAccount{ UserID: newUser.ID, diff --git a/internal/service/github_oauth_service.go b/internal/service/github_oauth_service.go index a06fee9..531d71d 100644 --- a/internal/service/github_oauth_service.go +++ b/internal/service/github_oauth_service.go @@ -42,18 +42,20 @@ type GitHubTokenResponse struct { // Feature: api-interface-optimization // Validates: Requirements 13.1, 13.2, 13.3, 13.4, 13.5 type GitHubOAuthService struct { - userRepo *repository.UserRepository - authService *AuthService - cfg *config.Config - httpClient *http.Client + userRepo *repository.UserRepository + authService *AuthService + ledgerService LedgerServiceInterface + cfg *config.Config + httpClient *http.Client } // NewGitHubOAuthService creates a new GitHubOAuthService instance -func NewGitHubOAuthService(userRepo *repository.UserRepository, authService *AuthService, cfg *config.Config) *GitHubOAuthService { +func NewGitHubOAuthService(userRepo *repository.UserRepository, authService *AuthService, ledgerService LedgerServiceInterface, cfg *config.Config) *GitHubOAuthService { return &GitHubOAuthService{ - userRepo: userRepo, - authService: authService, - cfg: cfg, + userRepo: userRepo, + authService: authService, + ledgerService: ledgerService, + cfg: cfg, httpClient: &http.Client{ Timeout: 60 * time.Second, Transport: &http.Transport{ @@ -276,6 +278,14 @@ func (s *GitHubOAuthService) HandleCallback(code string) (*models.User, *TokenPa return nil, nil, err } + // Create default ledger for the new user + _, err = s.ledgerService.CreateLedger(newUser.ID, LedgerInput{ + Name: "日常账本", + Theme: "pink", + IsDefault: true, + SortOrder: 0, + }) + // Create OAuth account link oauth := &models.OAuthAccount{ UserID: newUser.ID,