55 lines
1.5 KiB
Go
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
|
|
}
|