82 lines
2.5 KiB
Go
82 lines
2.5 KiB
Go
package graph
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"errors"
|
|
"fmt"
|
|
"tailly_back_v2/internal/repository"
|
|
"tailly_back_v2/internal/service"
|
|
)
|
|
|
|
// This file will not be regenerated automatically.
|
|
//
|
|
// It serves as dependency injection for your app, add any dependencies you require here.
|
|
|
|
type Resolver struct {
|
|
Services *service.Services
|
|
DeviceRepo repository.DeviceRepository // Добавляем репозиторий устройств напрямую
|
|
chatRepo repository.ChatRepository
|
|
}
|
|
|
|
func NewResolver(
|
|
services *service.Services,
|
|
db *sql.DB, // Принимаем подключение к БД
|
|
) *Resolver {
|
|
return &Resolver{
|
|
Services: services,
|
|
DeviceRepo: repository.NewDeviceRepository(db), // Инициализируем репозиторий
|
|
}
|
|
}
|
|
|
|
// Mutation returns MutationResolver implementation.
|
|
func (r *Resolver) Mutation() MutationResolver { return &mutationResolver{r} }
|
|
|
|
// Query returns QueryResolver implementation.
|
|
func (r *Resolver) Query() QueryResolver { return &queryResolver{r} }
|
|
func (r *Resolver) Message() MessageResolver { return &messageResolver{r} }
|
|
|
|
type mutationResolver struct{ *Resolver }
|
|
|
|
type queryResolver struct{ *Resolver }
|
|
|
|
// RequestEmailConfirmation - запрашивает подтверждение email
|
|
func (r *mutationResolver) RequestEmailConfirmation(ctx context.Context) (bool, error) {
|
|
userID, err := getUserIDFromContext(ctx)
|
|
if err != nil {
|
|
return false, errors.New("не авторизован")
|
|
}
|
|
|
|
user, err := r.Services.User.GetByID(ctx, userID)
|
|
if err != nil {
|
|
return false, fmt.Errorf("ошибка получения пользователя: %v", err)
|
|
}
|
|
|
|
token := user.EmailConfirmationToken
|
|
err = r.Services.Mail.SendConfirmationEmail(user.Email, token)
|
|
if err != nil {
|
|
return false, fmt.Errorf("ошибка отправки email: %v", err)
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
// ConfirmEmail - подтверждает email
|
|
func (r *mutationResolver) ConfirmEmail(ctx context.Context, token string) (bool, error) {
|
|
|
|
confirm, err := r.Services.Auth.ConfirmEmail(ctx, token)
|
|
if err != nil {
|
|
return false, fmt.Errorf("Ошибка подтверждения email: %v", err)
|
|
}
|
|
if confirm != true {
|
|
return false, fmt.Errorf("Ошибка подтверждения email: %v", err)
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
// ResendEmailConfirmation - повторно отправляет подтверждение
|
|
func (r *mutationResolver) ResendEmailConfirmation(ctx context.Context) (bool, error) {
|
|
return r.RequestEmailConfirmation(ctx)
|
|
}
|