diff --git a/internal/repository/service_sessions.sql.go b/internal/repository/service_sessions.sql.go index 187c13e..d5f4bdc 100644 --- a/internal/repository/service_sessions.sql.go +++ b/internal/repository/service_sessions.sql.go @@ -128,15 +128,103 @@ func (q *Queries) GetServiceSessionByRefreshJTI(ctx context.Context, refreshToke return i, err } +const getServiceSessions = `-- name: GetServiceSessions :many +SELECT session.id, session.service_id, session.client_id, session.user_id, session.issued_at, session.expires_at, session.last_active, session.ip_address, session.user_agent, session.access_token_id, session.refresh_token_id, session.is_active, session.revoked_at, session.scope, session.claims, service.id, service.client_id, service.client_secret, service.name, service.redirect_uris, service.scopes, service.grant_types, service.created_at, service.updated_at, service.is_active, service.description, service.icon_url, u.id, u.email, u.full_name, u.password_hash, u.is_admin, u.created_at, u.updated_at, u.last_login, u.phone_number, u.profile_picture, u.created_by, u.email_verified, u.avatar_verified, u.verified +FROM service_sessions AS session +JOIN api_services AS service ON service.id = session.service_id +JOIN users AS u ON u.id = session.user_id +ORDER BY session.issued_at DESC +LIMIT $1 OFFSET $2 +` + +type GetServiceSessionsParams struct { + Limit int32 `json:"limit"` + Offset int32 `json:"offset"` +} + +type GetServiceSessionsRow struct { + ServiceSession ServiceSession `json:"service_session"` + ApiService ApiService `json:"api_service"` + User User `json:"user"` +} + +func (q *Queries) GetServiceSessions(ctx context.Context, arg GetServiceSessionsParams) ([]GetServiceSessionsRow, error) { + rows, err := q.db.Query(ctx, getServiceSessions, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []GetServiceSessionsRow + for rows.Next() { + var i GetServiceSessionsRow + if err := rows.Scan( + &i.ServiceSession.ID, + &i.ServiceSession.ServiceID, + &i.ServiceSession.ClientID, + &i.ServiceSession.UserID, + &i.ServiceSession.IssuedAt, + &i.ServiceSession.ExpiresAt, + &i.ServiceSession.LastActive, + &i.ServiceSession.IpAddress, + &i.ServiceSession.UserAgent, + &i.ServiceSession.AccessTokenID, + &i.ServiceSession.RefreshTokenID, + &i.ServiceSession.IsActive, + &i.ServiceSession.RevokedAt, + &i.ServiceSession.Scope, + &i.ServiceSession.Claims, + &i.ApiService.ID, + &i.ApiService.ClientID, + &i.ApiService.ClientSecret, + &i.ApiService.Name, + &i.ApiService.RedirectUris, + &i.ApiService.Scopes, + &i.ApiService.GrantTypes, + &i.ApiService.CreatedAt, + &i.ApiService.UpdatedAt, + &i.ApiService.IsActive, + &i.ApiService.Description, + &i.ApiService.IconUrl, + &i.User.ID, + &i.User.Email, + &i.User.FullName, + &i.User.PasswordHash, + &i.User.IsAdmin, + &i.User.CreatedAt, + &i.User.UpdatedAt, + &i.User.LastLogin, + &i.User.PhoneNumber, + &i.User.ProfilePicture, + &i.User.CreatedBy, + &i.User.EmailVerified, + &i.User.AvatarVerified, + &i.User.Verified, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const listActiveServiceSessionsByClient = `-- name: ListActiveServiceSessionsByClient :many SELECT id, service_id, client_id, user_id, issued_at, expires_at, last_active, ip_address, user_agent, access_token_id, refresh_token_id, is_active, revoked_at, scope, claims FROM service_sessions WHERE client_id = $1 AND is_active = TRUE ORDER BY issued_at DESC +LIMIT $1 OFFSET $2 ` -func (q *Queries) ListActiveServiceSessionsByClient(ctx context.Context, clientID string) ([]ServiceSession, error) { - rows, err := q.db.Query(ctx, listActiveServiceSessionsByClient, clientID) +type ListActiveServiceSessionsByClientParams struct { + Limit int32 `json:"limit"` + Offset int32 `json:"offset"` +} + +func (q *Queries) ListActiveServiceSessionsByClient(ctx context.Context, arg ListActiveServiceSessionsByClientParams) ([]ServiceSession, error) { + rows, err := q.db.Query(ctx, listActiveServiceSessionsByClient, arg.Limit, arg.Offset) if err != nil { return nil, err } @@ -176,10 +264,16 @@ SELECT id, service_id, client_id, user_id, issued_at, expires_at, last_active, i WHERE user_id = $1 AND is_active = TRUE ORDER BY issued_at DESC +LIMIT $1 OFFSET $2 ` -func (q *Queries) ListActiveServiceSessionsByUser(ctx context.Context, userID *uuid.UUID) ([]ServiceSession, error) { - rows, err := q.db.Query(ctx, listActiveServiceSessionsByUser, userID) +type ListActiveServiceSessionsByUserParams struct { + Limit int32 `json:"limit"` + Offset int32 `json:"offset"` +} + +func (q *Queries) ListActiveServiceSessionsByUser(ctx context.Context, arg ListActiveServiceSessionsByUserParams) ([]ServiceSession, error) { + rows, err := q.db.Query(ctx, listActiveServiceSessionsByUser, arg.Limit, arg.Offset) if err != nil { return nil, err } diff --git a/internal/repository/user_sessions.sql.go b/internal/repository/user_sessions.sql.go index 29fedcf..0344d8e 100644 --- a/internal/repository/user_sessions.sql.go +++ b/internal/repository/user_sessions.sql.go @@ -122,6 +122,72 @@ func (q *Queries) GetUserSessionByRefreshJTI(ctx context.Context, refreshTokenID return i, err } +const getUserSessions = `-- name: GetUserSessions :many +SELECT session.id, session.user_id, session.session_type, session.issued_at, session.expires_at, session.last_active, session.ip_address, session.user_agent, session.access_token_id, session.refresh_token_id, session.device_info, session.is_active, session.revoked_at, u.id, u.email, u.full_name, u.password_hash, u.is_admin, u.created_at, u.updated_at, u.last_login, u.phone_number, u.profile_picture, u.created_by, u.email_verified, u.avatar_verified, u.verified +FROM user_sessions AS session +JOIN users AS u ON u.id = session.user_id +ORDER BY session.issued_at DESC +LIMIT $1 OFFSET $2 +` + +type GetUserSessionsParams struct { + Limit int32 `json:"limit"` + Offset int32 `json:"offset"` +} + +type GetUserSessionsRow struct { + UserSession UserSession `json:"user_session"` + User User `json:"user"` +} + +func (q *Queries) GetUserSessions(ctx context.Context, arg GetUserSessionsParams) ([]GetUserSessionsRow, error) { + rows, err := q.db.Query(ctx, getUserSessions, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []GetUserSessionsRow + for rows.Next() { + var i GetUserSessionsRow + if err := rows.Scan( + &i.UserSession.ID, + &i.UserSession.UserID, + &i.UserSession.SessionType, + &i.UserSession.IssuedAt, + &i.UserSession.ExpiresAt, + &i.UserSession.LastActive, + &i.UserSession.IpAddress, + &i.UserSession.UserAgent, + &i.UserSession.AccessTokenID, + &i.UserSession.RefreshTokenID, + &i.UserSession.DeviceInfo, + &i.UserSession.IsActive, + &i.UserSession.RevokedAt, + &i.User.ID, + &i.User.Email, + &i.User.FullName, + &i.User.PasswordHash, + &i.User.IsAdmin, + &i.User.CreatedAt, + &i.User.UpdatedAt, + &i.User.LastLogin, + &i.User.PhoneNumber, + &i.User.ProfilePicture, + &i.User.CreatedBy, + &i.User.EmailVerified, + &i.User.AvatarVerified, + &i.User.Verified, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const listActiveUserSessions = `-- name: ListActiveUserSessions :many SELECT id, user_id, session_type, issued_at, expires_at, last_active, ip_address, user_agent, access_token_id, refresh_token_id, device_info, is_active, revoked_at FROM user_sessions WHERE user_id = $1 diff --git a/queries/service_sessions.sql b/queries/service_sessions.sql index 378dd79..64d384c 100644 --- a/queries/service_sessions.sql +++ b/queries/service_sessions.sql @@ -14,13 +14,15 @@ RETURNING *; SELECT * FROM service_sessions WHERE client_id = $1 AND is_active = TRUE -ORDER BY issued_at DESC; +ORDER BY issued_at DESC +LIMIT $1 OFFSET $2; -- name: ListActiveServiceSessionsByUser :many SELECT * FROM service_sessions WHERE user_id = $1 AND is_active = TRUE -ORDER BY issued_at DESC; +ORDER BY issued_at DESC +LIMIT $1 OFFSET $2; -- name: GetServiceSessionByAccessJTI :one SELECT * FROM service_sessions @@ -49,3 +51,11 @@ WHERE id = $1 SELECT * FROM service_sessions ORDER BY issued_at DESC LIMIT $1 OFFSET $2; + +-- name: GetServiceSessions :many +SELECT sqlc.embed(session), sqlc.embed(service), sqlc.embed(u) +FROM service_sessions AS session +JOIN api_services AS service ON service.id = session.service_id +JOIN users AS u ON u.id = session.user_id +ORDER BY session.issued_at DESC +LIMIT $1 OFFSET $2; diff --git a/queries/user_sessions.sql b/queries/user_sessions.sql index 734fe21..bc73d1c 100644 --- a/queries/user_sessions.sql +++ b/queries/user_sessions.sql @@ -49,3 +49,10 @@ WHERE id = $1 SELECT * FROM user_sessions ORDER BY issued_at DESC LIMIT $1 OFFSET $2; + +-- name: GetUserSessions :many +SELECT sqlc.embed(session), sqlc.embed(u) +FROM user_sessions AS session +JOIN users AS u ON u.id = session.user_id +ORDER BY session.issued_at DESC +LIMIT $1 OFFSET $2;