tailly_back_v2/internal/http/graph/session_resolvers.go
madipo2611 6f5298d420 v0.0.3
2025-05-03 02:37:08 +03:00

55 lines
1.5 KiB
Go

// session_resolvers.go
package graph
import (
"context"
"fmt"
"tailly_back_v2/internal/domain"
"time"
)
type sessionResolver struct{ *Resolver }
// MySessions is the resolver for the mySessions field.
func (r *queryResolver) MySessions(ctx context.Context) ([]*domain.Session, error) {
userID, err := getUserIDFromContext(ctx)
if err != nil {
return nil, err
}
sessions, err := r.Services.Session.GetActiveSessions(ctx, userID)
if err != nil {
return nil, fmt.Errorf("failed to get sessions: %w", err)
}
return sessions, nil
}
// Session returns SessionResolver implementation.
func (r *Resolver) Session() SessionResolver { return &sessionResolver{r} }
// StartedAt is the resolver for the startedAt field.
func (r *sessionResolver) StartedAt(ctx context.Context, obj *domain.Session) (string, error) {
return obj.StartedAt.Format(time.RFC3339), nil
}
// LastActiveAt is the resolver for the lastActiveAt field.
func (r *sessionResolver) LastActiveAt(ctx context.Context, obj *domain.Session) (string, error) {
if !obj.EndedAt.IsZero() {
return obj.EndedAt.Format(time.RFC3339), nil
}
return time.Now().Format(time.RFC3339), nil
}
// TerminateSession is the resolver for the terminateSession field.
func (r *mutationResolver) TerminateSession(ctx context.Context, sessionID int) (bool, error) {
userID, err := getUserIDFromContext(ctx)
if err != nil {
return false, err
}
if err := r.Services.Session.Terminate(ctx, userID, sessionID); err != nil {
return false, fmt.Errorf("failed to terminate session: %w", err)
}
return true, nil
}