Files
2026-04-13 08:14:09 +03:00

53 lines
1.9 KiB
Go

package service
import "log/slog"
// UserRepository — интерфейс репозитория пользователей для UserService.
type UserRepository interface {
// методы, которые UserService использует из репозитория пользователей
}
// UserAuthService — интерфейс сервиса авторизации для UserService.
type UserAuthService interface {
ValidateToken(token string) bool
}
// UserEventPublisher — интерфейс для публикации событий пользователей.
type UserEventPublisher interface {
Publish(event string)
}
// UserService — интерфейс сервиса пользователей.
// Структура неэкспортируемая — создать объект можно только через NewUserService.
type UserService interface {
GetProfile(token string) string
}
// userService — сервис пользователей.
type userService struct {
userRepo UserRepository
authService UserAuthService
events UserEventPublisher
}
// NewUserService создаёт сервис пользователей.
func NewUserService(userRepo UserRepository, authService UserAuthService, events UserEventPublisher) UserService {
slog.Info("сервис пользователей создан")
return &userService{
userRepo: userRepo,
authService: authService,
events: events,
}
}
// GetProfile возвращает профиль текущего пользователя.
// Сначала проверяет токен через authService — и именно тут взорвётся nil,
// если authService не был правильно инициализирован.
func (s *userService) GetProfile(token string) string {
if !s.authService.ValidateToken(token) {
return "unauthorized"
}
return "user profile data"
}