123 lines
3.7 KiB
Go
123 lines
3.7 KiB
Go
// user_resolvers.go
|
|
package graph
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"tailly_back_v2/internal/domain"
|
|
"tailly_back_v2/internal/service"
|
|
"time"
|
|
)
|
|
|
|
type userResolver struct{ *Resolver }
|
|
|
|
// User is the resolver for the user field.
|
|
func (r *queryResolver) User(ctx context.Context, id int) (*domain.User, error) {
|
|
user, err := r.Services.User.GetByID(ctx, id)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get user: %w", err)
|
|
}
|
|
return user, nil
|
|
}
|
|
|
|
// Me is the resolver for the me field.
|
|
func (r *queryResolver) Me(ctx context.Context) (*domain.User, error) {
|
|
log.Println("Контекст Me: ", ctx)
|
|
userID, err := getUserIDFromContext(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
log.Println("userID из контекста в Me: ", userID)
|
|
|
|
user, err := r.Services.User.GetByID(ctx, userID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get current user: %w", err)
|
|
}
|
|
log.Println("Данные user из бд в Me: ", user)
|
|
return user, nil
|
|
}
|
|
|
|
// User returns UserResolver implementation.
|
|
func (r *Resolver) User() UserResolver { return &userResolver{r} }
|
|
|
|
// EmailConfirmedAt is the resolver for the emailConfirmedAt field.
|
|
func (r *userResolver) EmailConfirmedAt(ctx context.Context, obj *domain.User) (*string, error) {
|
|
if obj.EmailConfirmedAt == nil {
|
|
return nil, nil
|
|
}
|
|
formatted := obj.EmailConfirmedAt.Format(time.RFC3339)
|
|
return &formatted, nil
|
|
}
|
|
|
|
// CreatedAt is the resolver for the createdAt field.
|
|
func (r *userResolver) CreatedAt(ctx context.Context, obj *domain.User) (string, error) {
|
|
return obj.CreatedAt.Format(time.RFC3339), nil
|
|
}
|
|
|
|
// UpdatedAt is the resolver for the updatedAt field.
|
|
func (r *userResolver) UpdatedAt(ctx context.Context, obj *domain.User) (string, error) {
|
|
return obj.UpdatedAt.Format(time.RFC3339), nil
|
|
}
|
|
|
|
// UpdateProfile is the resolver for the updateProfile field.
|
|
func (r *mutationResolver) UpdateProfile(ctx context.Context, username string, email string, avatar string) (*domain.User, error) {
|
|
userID, err := getUserIDFromContext(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
user, err := r.Services.User.UpdateProfile(ctx, userID, username, email, avatar)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to update profile: %w", err)
|
|
}
|
|
return user, nil
|
|
}
|
|
|
|
// ChangePassword is the resolver for the changePassword field.
|
|
func (r *mutationResolver) ChangePassword(ctx context.Context, oldPassword string, newPassword string) (bool, error) {
|
|
userID, err := getUserIDFromContext(ctx)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
if err := r.Services.User.ChangePassword(ctx, userID, oldPassword, newPassword); err != nil {
|
|
return false, fmt.Errorf("failed to change password: %w", err)
|
|
}
|
|
return true, nil
|
|
}
|
|
|
|
// Register is the resolver for the register field.
|
|
func (r *mutationResolver) Register(ctx context.Context, input domain.RegisterInput) (*domain.User, error) {
|
|
user, err := r.Services.Auth.Register(ctx, service.RegisterInput{
|
|
Username: input.Username,
|
|
Email: input.Email,
|
|
Password: input.Password,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to register: %w", err)
|
|
}
|
|
return user, nil
|
|
}
|
|
|
|
// Login is the resolver for the login field.
|
|
func (r *mutationResolver) Login(ctx context.Context, input domain.LoginInput) (*domain.Tokens, error) {
|
|
log.Printf("input login: %v", input)
|
|
tokens, err := r.Services.Auth.Login(ctx, input.Email, input.Password)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to login: %w", err)
|
|
}
|
|
return tokens, nil
|
|
}
|
|
|
|
// Users is the resolver for the users field.
|
|
func (r *queryResolver) Users(ctx context.Context) ([]*domain.User, error) {
|
|
userID, err := getUserIDFromContext(ctx)
|
|
|
|
users, err := r.Services.User.GetAll(ctx, userID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get users: %w", err)
|
|
}
|
|
return users, nil
|
|
}
|