314 lines
13 KiB
Go
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
|
|
}
|