veza/veza-backend-api/internal/services/interfaces.go
senke b28d0e7eac [T0-006] test(backend): Ajout tests pour frontend_log_handler
- Tests complets pour frontend_log_handler.go (12 tests)
- Tests couvrent NewFrontendLogHandler et ReceiveLog
- Tests pour tous les niveaux de log (DEBUG, INFO, WARN, ERROR)
- Tests pour gestion des erreurs et validation JSON
- Couverture actuelle: 30.6% (objectif: 80%)

Files: veza-backend-api/internal/handlers/frontend_log_handler_test.go
       VEZA_ROADMAP.json
Hours: 16 estimated, 23 actual
2026-01-04 01:44:22 +01:00

91 lines
4.5 KiB
Go

package services
import (
"context"
"time"
"veza-backend-api/internal/models"
"github.com/google/uuid"
)
// PlaylistServiceInterface defines the interface for playlist service
// Moved from handlers to avoid cyclic dependency with PlaylistDuplicateService
type PlaylistServiceInterface interface {
CreatePlaylist(ctx context.Context, userID uuid.UUID, title, description string, isPublic bool) (*models.Playlist, error)
GetPlaylists(ctx context.Context, currentUserID *uuid.UUID, filterUserID *uuid.UUID, page, limit int) ([]*models.Playlist, int64, error)
GetPlaylist(ctx context.Context, id uuid.UUID, currentUserID *uuid.UUID) (*models.Playlist, error)
UpdatePlaylist(ctx context.Context, id uuid.UUID, userID uuid.UUID, title, description *string, isPublic *bool) (*models.Playlist, error)
DeletePlaylist(ctx context.Context, id uuid.UUID, userID uuid.UUID) error
AddTrack(ctx context.Context, playlistID, trackID, userID uuid.UUID) error
RemoveTrack(ctx context.Context, playlistID, trackID, userID uuid.UUID) error
ReorderTracks(ctx context.Context, playlistID, userID uuid.UUID, trackIDs []uuid.UUID) error
AddCollaborator(ctx context.Context, playlistID, userID, collaboratorUserID uuid.UUID, permission models.PlaylistPermission) (*models.PlaylistCollaborator, error)
RemoveCollaborator(ctx context.Context, playlistID, userID, collaboratorUserID uuid.UUID) error
UpdateCollaboratorPermission(ctx context.Context, playlistID, userID, collaboratorUserID uuid.UUID, permission models.PlaylistPermission) error
GetCollaborators(ctx context.Context, playlistID, userID uuid.UUID) ([]*models.PlaylistCollaborator, error)
CreateShareLink(ctx context.Context, playlistID, userID uuid.UUID, expiresAt *time.Time) (*models.PlaylistShareLink, error)
FollowPlaylist(ctx context.Context, playlistID, userID uuid.UUID) error
UnfollowPlaylist(ctx context.Context, playlistID, userID uuid.UUID) error
CheckPermission(ctx context.Context, playlistID, userID uuid.UUID, permission models.PlaylistPermission) (bool, error)
SearchPlaylists(ctx context.Context, params SearchPlaylistsParams) ([]*models.Playlist, int64, error)
}
// EmailServiceInterface defines methods for sending emails
type EmailServiceInterface interface {
SendVerificationEmail(email, token string) error
SendVerificationEmailWithUserID(userID uuid.UUID, email string) error
SendPasswordResetEmail(userID uuid.UUID, email string, token string) error
SendWelcomeEmail(email, username string) error
SendNotificationEmail(email, subject, message, notificationType string) error
}
// EmailVerificationServiceInterface defines methods for email verification
type EmailVerificationServiceInterface interface {
GenerateToken() (string, error)
StoreToken(userID uuid.UUID, email, token string) error
VerifyToken(token string) (uuid.UUID, error)
InvalidateOldTokens(userID uuid.UUID) error
ResendVerificationEmail(userID uuid.UUID, email string) error
}
// PasswordResetServiceInterface defines methods for password reset
type PasswordResetServiceInterface interface {
GenerateToken() (string, error)
StoreToken(userID uuid.UUID, token string) error
VerifyToken(token string) (uuid.UUID, error)
MarkTokenAsUsed(token string) error
InvalidateOldTokens(userID uuid.UUID) error
}
// PasswordServiceInterface defines methods for password management
type PasswordServiceInterface interface {
ValidatePassword(password string) error
UpdatePassword(userID uuid.UUID, newPassword string) error
Hash(password string) (string, error)
Compare(hashedPassword, password string) bool
}
// JWTServiceInterface defines methods for JWT management
type JWTServiceInterface interface {
GenerateAccessToken(user *models.User) (string, error)
GenerateRefreshToken(user *models.User) (string, error)
GenerateTokenPair(user *models.User) (*models.TokenPair, error)
ValidateToken(tokenString string) (*models.CustomClaims, error)
ExtractUserID(tokenString string) (uuid.UUID, error)
GetConfig() *models.JWTConfig
}
// RefreshTokenServiceInterface defines methods for refresh token management
type RefreshTokenServiceInterface interface {
Store(userID uuid.UUID, token string, ttl time.Duration) error
Validate(userID uuid.UUID, token string) error
Rotate(userID uuid.UUID, oldToken, newToken string, ttl time.Duration) error
Revoke(userID uuid.UUID, token string) error
RevokeAll(userID uuid.UUID) error
}
// JobWorkerInterface defines methods for background jobs
type JobWorkerInterface interface {
EnqueueEmailJobWithTemplate(to, subject, templateName string, templateData map[string]interface{})
}