veza/veza-backend-api/internal/interfaces/interfaces.go
2025-12-03 20:29:37 +01:00

314 lines
13 KiB
Go

package interfaces
import (
"context"
"time"
"github.com/redis/go-redis/v9"
"go.uber.org/zap"
)
// Repository définit l'interface commune pour tous les repositories
type Repository interface {
// Méthodes communes à tous les repositories
Ping(ctx context.Context) error
Close() error
}
// UserRepository définit l'interface pour les opérations utilisateur
type UserRepository interface {
Repository
Create(ctx context.Context, user *User) error
GetByID(ctx context.Context, id string) (*User, error)
GetByEmail(ctx context.Context, email string) (*User, error)
GetByUsername(ctx context.Context, username string) (*User, error)
Update(ctx context.Context, user *User) error
Delete(ctx context.Context, id string) error
List(ctx context.Context, limit, offset int) ([]*User, error)
Count(ctx context.Context) (int64, error)
Search(ctx context.Context, query string, limit, offset int) ([]*User, error)
}
// MessageRepository définit l'interface pour les opérations de messages
type MessageRepository interface {
Repository
Create(ctx context.Context, message *Message) error
GetByID(ctx context.Context, id string) (*Message, error)
GetByConversation(ctx context.Context, conversationID string, limit, offset int) ([]*Message, error)
Update(ctx context.Context, message *Message) error
Delete(ctx context.Context, id string) error
MarkAsRead(ctx context.Context, messageID, userID string) error
GetUnreadCount(ctx context.Context, userID string) (int64, error)
}
// ConversationRepository définit l'interface pour les opérations de conversations
type ConversationRepository interface {
Repository
Create(ctx context.Context, conversation *Conversation) error
GetByID(ctx context.Context, id string) (*Conversation, error)
GetByUser(ctx context.Context, userID string, limit, offset int) ([]*Conversation, error)
AddParticipant(ctx context.Context, conversationID, userID string) error
RemoveParticipant(ctx context.Context, conversationID, userID string) error
Update(ctx context.Context, conversation *Conversation) error
Delete(ctx context.Context, id string) error
}
// TrackRepository définit l'interface pour les opérations de tracks
type TrackRepository interface {
Repository
Create(ctx context.Context, track *Track) error
GetByID(ctx context.Context, id string) (*Track, error)
GetByUser(ctx context.Context, userID string, limit, offset int) ([]*Track, error)
Update(ctx context.Context, track *Track) error
Delete(ctx context.Context, id string) error
Search(ctx context.Context, query string, limit, offset int) ([]*Track, error)
GetByGenre(ctx context.Context, genre string, limit, offset int) ([]*Track, error)
GetPopular(ctx context.Context, limit, offset int) ([]*Track, error)
}
// SessionRepository définit l'interface pour les opérations de sessions
type SessionRepository interface {
Repository
Create(ctx context.Context, session *Session) error
GetByToken(ctx context.Context, token string) (*Session, error)
GetByUser(ctx context.Context, userID string) ([]*Session, error)
Update(ctx context.Context, session *Session) error
Delete(ctx context.Context, id string) error
DeleteByUser(ctx context.Context, userID string) error
DeleteExpired(ctx context.Context) error
}
// AuditLogRepository définit l'interface pour les logs d'audit
type AuditLogRepository interface {
Repository
Create(ctx context.Context, log *AuditLog) error
GetByUser(ctx context.Context, userID string, limit, offset int) ([]*AuditLog, error)
GetByAction(ctx context.Context, action string, limit, offset int) ([]*AuditLog, error)
GetByDateRange(ctx context.Context, start, end time.Time, limit, offset int) ([]*AuditLog, error)
DeleteOld(ctx context.Context, olderThan time.Time) error
}
// Service définit l'interface commune pour tous les services
type Service interface {
// Méthodes communes à tous les services
Health(ctx context.Context) error
Close() error
}
// AuthService définit l'interface pour les services d'authentification
type AuthService interface {
Service
Login(ctx context.Context, email, password string) (*AuthResult, error)
Register(ctx context.Context, req *RegisterRequest) (*AuthResult, error)
Logout(ctx context.Context, token string) error
RefreshToken(ctx context.Context, refreshToken string) (*AuthResult, error)
ValidateToken(ctx context.Context, token string) (*TokenClaims, error)
ChangePassword(ctx context.Context, userID, oldPassword, newPassword string) error
ResetPassword(ctx context.Context, email string) error
ConfirmPasswordReset(ctx context.Context, token, newPassword string) error
}
// UserService définit l'interface pour les services utilisateur
type UserService interface {
Service
Create(ctx context.Context, req *CreateUserRequest) (*User, error)
GetByID(ctx context.Context, id string) (*User, error)
GetByEmail(ctx context.Context, email string) (*User, error)
Update(ctx context.Context, id string, req *UpdateUserRequest) (*User, error)
Delete(ctx context.Context, id string) error
List(ctx context.Context, req *ListUsersRequest) (*ListUsersResponse, error)
Search(ctx context.Context, query string, limit, offset int) ([]*User, error)
UpdateProfile(ctx context.Context, userID string, req *UpdateProfileRequest) (*User, error)
UploadAvatar(ctx context.Context, userID string, fileData []byte) (string, error)
}
// MessageService définit l'interface pour les services de messages
type MessageService interface {
Service
Send(ctx context.Context, req *SendMessageRequest) (*Message, error)
GetByID(ctx context.Context, id string) (*Message, error)
GetByConversation(ctx context.Context, conversationID string, req *ListMessagesRequest) (*ListMessagesResponse, error)
Update(ctx context.Context, id string, req *UpdateMessageRequest) (*Message, error)
Delete(ctx context.Context, id string) error
MarkAsRead(ctx context.Context, messageID, userID string) error
GetUnreadCount(ctx context.Context, userID string) (int64, error)
Search(ctx context.Context, query string, userID string, limit, offset int) ([]*Message, error)
}
// ConversationService définit l'interface pour les services de conversations
type ConversationService interface {
Service
Create(ctx context.Context, req *CreateConversationRequest) (*Conversation, error)
GetByID(ctx context.Context, id string) (*Conversation, error)
GetByUser(ctx context.Context, userID string, req *ListConversationsRequest) (*ListConversationsResponse, error)
AddParticipant(ctx context.Context, conversationID, userID string) error
RemoveParticipant(ctx context.Context, conversationID, userID string) error
Update(ctx context.Context, id string, req *UpdateConversationRequest) (*Conversation, error)
Delete(ctx context.Context, id string) error
GetParticipants(ctx context.Context, conversationID string) ([]*User, error)
}
// TrackService définit l'interface pour les services de tracks
type TrackService interface {
Service
Upload(ctx context.Context, req *UploadTrackRequest) (*Track, error)
GetByID(ctx context.Context, id string) (*Track, error)
GetByUser(ctx context.Context, userID string, req *ListTracksRequest) (*ListTracksResponse, error)
Update(ctx context.Context, id string, req *UpdateTrackRequest) (*Track, error)
Delete(ctx context.Context, id string) error
Search(ctx context.Context, query string, req *SearchTracksRequest) (*SearchTracksResponse, error)
GetByGenre(ctx context.Context, genre string, limit, offset int) ([]*Track, error)
GetPopular(ctx context.Context, limit, offset int) ([]*Track, error)
GetStreamURL(ctx context.Context, trackID string, userID string) (string, error)
}
// CacheService définit l'interface pour les services de cache
type CacheService interface {
Service
Set(ctx context.Context, key string, value interface{}, ttl time.Duration) error
Get(ctx context.Context, key string, dest interface{}) (bool, error)
Delete(ctx context.Context, key string) error
ClearByPrefix(ctx context.Context, prefix string) error
Increment(ctx context.Context, key string) (int64, error)
Decrement(ctx context.Context, key string) (int64, error)
Expire(ctx context.Context, key string, ttl time.Duration) error
Exists(ctx context.Context, key string) (bool, error)
}
// LoggerService définit l'interface pour les services de logging
type LoggerService interface {
Service
Debug(msg string, fields ...zap.Field)
Info(msg string, fields ...zap.Field)
Warn(msg string, fields ...zap.Field)
Error(msg string, fields ...zap.Field)
Fatal(msg string, fields ...zap.Field)
With(fields ...zap.Field) LoggerService
WithContext(ctx context.Context) LoggerService
}
// EmailService définit l'interface pour les services d'email
type EmailService interface {
Service
SendWelcomeEmail(ctx context.Context, to, username string) error
SendPasswordResetEmail(ctx context.Context, to, resetToken string) error
SendPasswordChangedEmail(ctx context.Context, to string) error
SendEmailVerification(ctx context.Context, to, verificationToken string) error
SendNotificationEmail(ctx context.Context, to, subject, content string) error
}
// FileService définit l'interface pour les services de fichiers
type FileService interface {
Service
Upload(ctx context.Context, req *UploadFileRequest) (*UploadFileResponse, error)
Download(ctx context.Context, fileID string) (*DownloadFileResponse, error)
Delete(ctx context.Context, fileID string) error
GetMetadata(ctx context.Context, fileID string) (*FileMetadata, error)
GenerateThumbnail(ctx context.Context, fileID string) error
ScanForViruses(ctx context.Context, filePath string) error
}
// NotificationService définit l'interface pour les services de notifications
type NotificationService interface {
Service
SendPushNotification(ctx context.Context, userID, title, body string, data map[string]string) error
SendInAppNotification(ctx context.Context, userID, message string, data map[string]interface{}) error
MarkAsRead(ctx context.Context, notificationID, userID string) error
GetByUser(ctx context.Context, userID string, limit, offset int) ([]*Notification, error)
GetUnreadCount(ctx context.Context, userID string) (int64, error)
}
// MetricsService définit l'interface pour les services de métriques
type MetricsService interface {
Service
IncrementCounter(name string, labels map[string]string)
IncrementCounterBy(name string, value float64, labels map[string]string)
SetGauge(name string, value float64, labels map[string]string)
ObserveHistogram(name string, value float64, labels map[string]string)
ObserveSummary(name string, value float64, labels map[string]string)
GetMetrics() (string, error)
}
// ConfigurationService définit l'interface pour les services de configuration
type ConfigurationService interface {
Service
GetString(key string) string
GetInt(key string) int
GetBool(key string) bool
GetDuration(key string) time.Duration
GetStringSlice(key string) []string
Set(key string, value interface{}) error
Reload() error
}
// DatabaseService définit l'interface pour les services de base de données
type DatabaseService interface {
Service
GetConnection() interface{} // Retourne la connexion spécifique (GORM, SQLx, etc.)
Ping(ctx context.Context) error
Close() error
BeginTx(ctx context.Context) (interface{}, error)
CommitTx(tx interface{}) error
RollbackTx(tx interface{}) error
// Méthodes pour les migrations
Migrate(ctx context.Context) error
GetMigrationStatus(ctx context.Context) ([]MigrationStatus, error)
}
// RedisService définit l'interface pour les services Redis
type RedisService interface {
Service
GetClient() *redis.Client
Ping(ctx context.Context) error
Close() error
// Méthodes de base
Set(ctx context.Context, key string, value interface{}, expiration time.Duration) error
Get(ctx context.Context, key string) (string, error)
Del(ctx context.Context, keys ...string) error
Exists(ctx context.Context, keys ...string) (int64, error)
Expire(ctx context.Context, key string, expiration time.Duration) error
// Méthodes pour les listes
LPush(ctx context.Context, key string, values ...interface{}) error
RPush(ctx context.Context, key string, values ...interface{}) error
LPop(ctx context.Context, key string) (string, error)
RPop(ctx context.Context, key string) (string, error)
LLen(ctx context.Context, key string) (int64, error)
// Méthodes pour les sets
SAdd(ctx context.Context, key string, members ...interface{}) error
SMembers(ctx context.Context, key string) ([]string, error)
SIsMember(ctx context.Context, key string, member interface{}) (bool, error)
SCard(ctx context.Context, key string) (int64, error)
// Méthodes pour les hashs
HSet(ctx context.Context, key string, values ...interface{}) error
HGet(ctx context.Context, key, field string) (string, error)
HGetAll(ctx context.Context, key string) (map[string]string, error)
HDel(ctx context.Context, key string, fields ...string) error
}