initial commit
This commit is contained in:
96
internal/service/user_service.go
Normal file
96
internal/service/user_service.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"git.kirlllll.ru/volontery/backend/internal/database"
|
||||
"git.kirlllll.ru/volontery/backend/internal/repository"
|
||||
)
|
||||
|
||||
// UserService предоставляет методы для работы с пользователями
|
||||
type UserService struct {
|
||||
userRepo *repository.UserRepository
|
||||
rbacRepo *repository.RBACRepository
|
||||
}
|
||||
|
||||
// NewUserService создает новый UserService
|
||||
func NewUserService(userRepo *repository.UserRepository, rbacRepo *repository.RBACRepository) *UserService {
|
||||
return &UserService{
|
||||
userRepo: userRepo,
|
||||
rbacRepo: rbacRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// GetUserProfile получает профиль пользователя
|
||||
func (s *UserService) GetUserProfile(ctx context.Context, userID int64) (*database.GetUserProfileRow, error) {
|
||||
return s.userRepo.GetProfile(ctx, userID)
|
||||
}
|
||||
|
||||
// UpdateProfileInput - входные данные для обновления профиля
|
||||
type UpdateProfileInput struct {
|
||||
FirstName string `json:"first_name,omitempty"`
|
||||
LastName string `json:"last_name,omitempty"`
|
||||
Phone string `json:"phone,omitempty"`
|
||||
Bio string `json:"bio,omitempty"`
|
||||
Address string `json:"address,omitempty"`
|
||||
City string `json:"city,omitempty"`
|
||||
}
|
||||
|
||||
// UpdateUserProfile обновляет профиль пользователя
|
||||
func (s *UserService) UpdateUserProfile(ctx context.Context, userID int64, input UpdateProfileInput) error {
|
||||
return s.userRepo.UpdateProfile(ctx, database.UpdateUserProfileParams{
|
||||
UserID: userID,
|
||||
FirstName: stringToPgText(input.FirstName),
|
||||
LastName: stringToPgText(input.LastName),
|
||||
Phone: stringToPgText(input.Phone),
|
||||
Address: stringToPgText(input.Address),
|
||||
City: stringToPgText(input.City),
|
||||
})
|
||||
}
|
||||
|
||||
// UpdateUserLocation обновляет местоположение пользователя
|
||||
func (s *UserService) UpdateUserLocation(ctx context.Context, userID int64, lat, lon float64) error {
|
||||
if lat == 0 || lon == 0 {
|
||||
return fmt.Errorf("invalid coordinates")
|
||||
}
|
||||
|
||||
return s.userRepo.UpdateLocation(ctx, database.UpdateUserLocationParams{
|
||||
ID: userID,
|
||||
StMakepoint: lon,
|
||||
StMakepoint_2: lat,
|
||||
})
|
||||
}
|
||||
|
||||
// VerifyEmail подтверждает email пользователя
|
||||
func (s *UserService) VerifyEmail(ctx context.Context, userID int64) error {
|
||||
return s.userRepo.VerifyEmail(ctx, userID)
|
||||
}
|
||||
|
||||
// GetUserRoles получает роли пользователя
|
||||
func (s *UserService) GetUserRoles(ctx context.Context, userID int64) ([]database.Role, error) {
|
||||
return s.rbacRepo.GetUserRoles(ctx, userID)
|
||||
}
|
||||
|
||||
// GetUserPermissions получает разрешения пользователя
|
||||
func (s *UserService) GetUserPermissions(ctx context.Context, userID int64) ([]database.GetUserPermissionsRow, error) {
|
||||
return s.rbacRepo.GetUserPermissions(ctx, userID)
|
||||
}
|
||||
|
||||
// HasPermission проверяет наличие разрешения у пользователя
|
||||
func (s *UserService) HasPermission(ctx context.Context, userID int64, permissionName string) (bool, error) {
|
||||
return s.rbacRepo.UserHasPermission(ctx, database.UserHasPermissionParams{
|
||||
ID: userID,
|
||||
Name: permissionName,
|
||||
})
|
||||
}
|
||||
|
||||
// AssignRole назначает роль пользователю
|
||||
func (s *UserService) AssignRole(ctx context.Context, userID, roleID, assignedBy int64) error {
|
||||
_, err := s.rbacRepo.AssignRoleToUser(ctx, database.AssignRoleToUserParams{
|
||||
UserID: userID,
|
||||
RoleID: roleID,
|
||||
AssignedBy: int64ToPgInt8(assignedBy),
|
||||
})
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user