From 96dd5c863edce91130e7eef7bdb28403032092fc Mon Sep 17 00:00:00 2001 From: Jason Hilder Date: Thu, 30 Apr 2026 08:37:10 +0200 Subject: [PATCH] More queries forrefresh token sqlc files. --- internal/db/querier.go | 5 ++- internal/db/refresh_tokens.sql.go | 61 +++++++++++++++++++++++++++++-- sql/queries/refresh_tokens.sql | 23 +++++++++++- 3 files changed, 83 insertions(+), 6 deletions(-) diff --git a/internal/db/querier.go b/internal/db/querier.go index c73361c..3a0fbb8 100644 --- a/internal/db/querier.go +++ b/internal/db/querier.go @@ -9,15 +9,18 @@ import ( ) type Querier interface { + CountUserRefreshTokens(ctx context.Context, userID int64) (int64, error) CreateRefreshToken(ctx context.Context, arg CreateRefreshTokenParams) (RefreshToken, error) CreateUser(ctx context.Context, arg CreateUserParams) (User, error) DeleteAllUserRefreshTokens(ctx context.Context, userID int64) error - DeleteRefreshToken(ctx context.Context, tokenHash string) error + DeleteOldestRefreshToken(ctx context.Context, userID int64) error + DeleteRefreshToken(ctx context.Context, arg DeleteRefreshTokenParams) error DeleteUser(ctx context.Context, arg DeleteUserParams) error GetRefreshToken(ctx context.Context, tokenHash string) (RefreshToken, error) GetUserByEmail(ctx context.Context, dollar_1 string) (User, error) GetUserById(ctx context.Context, id int64) (User, error) GetUserRefreshTokens(ctx context.Context, userID int64) ([]RefreshToken, error) + GetValidRefreshToken(ctx context.Context, tokenHash string) (GetValidRefreshTokenRow, error) ListUsers(ctx context.Context) ([]User, error) UpdateUser(ctx context.Context, arg UpdateUserParams) error } diff --git a/internal/db/refresh_tokens.sql.go b/internal/db/refresh_tokens.sql.go index ccee176..5e9ef3f 100644 --- a/internal/db/refresh_tokens.sql.go +++ b/internal/db/refresh_tokens.sql.go @@ -11,6 +11,18 @@ import ( "github.com/jackc/pgx/v5/pgtype" ) +const countUserRefreshTokens = `-- name: CountUserRefreshTokens :one +SELECT count(*) FROM refresh_tokens +WHERE user_id = $1 +` + +func (q *Queries) CountUserRefreshTokens(ctx context.Context, userID int64) (int64, error) { + row := q.db.QueryRow(ctx, countUserRefreshTokens, userID) + var count int64 + err := row.Scan(&count) + return count, err +} + const createRefreshToken = `-- name: CreateRefreshToken :one INSERT INTO refresh_tokens (user_id, token_hash, expires_at) VALUES ($1, $2, $3) @@ -46,13 +58,34 @@ func (q *Queries) DeleteAllUserRefreshTokens(ctx context.Context, userID int64) return err } -const deleteRefreshToken = `-- name: DeleteRefreshToken :exec +const deleteOldestRefreshToken = `-- name: DeleteOldestRefreshToken :exec DELETE FROM refresh_tokens -WHERE token_hash = $1 +WHERE id = ( + SELECT id + FROM refresh_tokens rt + WHERE rt.user_id = $1 + ORDER BY rt.created_at ASC + LIMIT 1 +) ` -func (q *Queries) DeleteRefreshToken(ctx context.Context, tokenHash string) error { - _, err := q.db.Exec(ctx, deleteRefreshToken, tokenHash) +func (q *Queries) DeleteOldestRefreshToken(ctx context.Context, userID int64) error { + _, err := q.db.Exec(ctx, deleteOldestRefreshToken, userID) + return err +} + +const deleteRefreshToken = `-- name: DeleteRefreshToken :exec +DELETE FROM refresh_tokens +WHERE token_hash = $1 and user_id = $2 +` + +type DeleteRefreshTokenParams struct { + TokenHash string `json:"token_hash"` + UserID int64 `json:"user_id"` +} + +func (q *Queries) DeleteRefreshToken(ctx context.Context, arg DeleteRefreshTokenParams) error { + _, err := q.db.Exec(ctx, deleteRefreshToken, arg.TokenHash, arg.UserID) return err } @@ -104,3 +137,23 @@ func (q *Queries) GetUserRefreshTokens(ctx context.Context, userID int64) ([]Ref } return items, nil } + +const getValidRefreshToken = `-- name: GetValidRefreshToken :one +SELECT user_id, token_hash +FROM refresh_tokens +WHERE token_hash = $1 + AND expires_at > NOW() +LIMIT 1 +` + +type GetValidRefreshTokenRow struct { + UserID int64 `json:"user_id"` + TokenHash string `json:"token_hash"` +} + +func (q *Queries) GetValidRefreshToken(ctx context.Context, tokenHash string) (GetValidRefreshTokenRow, error) { + row := q.db.QueryRow(ctx, getValidRefreshToken, tokenHash) + var i GetValidRefreshTokenRow + err := row.Scan(&i.UserID, &i.TokenHash) + return i, err +} diff --git a/sql/queries/refresh_tokens.sql b/sql/queries/refresh_tokens.sql index a2e8833..10d251f 100644 --- a/sql/queries/refresh_tokens.sql +++ b/sql/queries/refresh_tokens.sql @@ -11,10 +11,31 @@ WHERE token_hash = $1 LIMIT 1; SELECT * FROM refresh_tokens WHERE user_id = $1; +-- name: CountUserRefreshTokens :one +SELECT count(*) FROM refresh_tokens +WHERE user_id = $1; + +-- name: GetValidRefreshToken :one +SELECT user_id, token_hash +FROM refresh_tokens +WHERE token_hash = $1 + AND expires_at > NOW() +LIMIT 1; + -- name: DeleteRefreshToken :exec DELETE FROM refresh_tokens -WHERE token_hash = $1; +WHERE token_hash = $1 and user_id = $2; -- name: DeleteAllUserRefreshTokens :exec DELETE FROM refresh_tokens WHERE user_id = $1; + +-- name: DeleteOldestRefreshToken :exec +DELETE FROM refresh_tokens +WHERE id = ( + SELECT id + FROM refresh_tokens rt + WHERE rt.user_id = $1 + ORDER BY rt.created_at ASC + LIMIT 1 +);