feat: update session + ps type overriding
This commit is contained in:
@ -8,7 +8,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/jackc/pgx/v5/pgtype"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type ApiService struct {
|
type ApiService struct {
|
||||||
@ -34,7 +33,7 @@ type ServiceSession struct {
|
|||||||
IssuedAt time.Time `json:"issued_at"`
|
IssuedAt time.Time `json:"issued_at"`
|
||||||
ExpiresAt *time.Time `json:"expires_at"`
|
ExpiresAt *time.Time `json:"expires_at"`
|
||||||
LastActive *time.Time `json:"last_active"`
|
LastActive *time.Time `json:"last_active"`
|
||||||
IpAddress pgtype.Text `json:"ip_address"`
|
IpAddress *string `json:"ip_address"`
|
||||||
UserAgent *string `json:"user_agent"`
|
UserAgent *string `json:"user_agent"`
|
||||||
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
||||||
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
||||||
@ -68,7 +67,7 @@ type UserSession struct {
|
|||||||
IssuedAt time.Time `json:"issued_at"`
|
IssuedAt time.Time `json:"issued_at"`
|
||||||
ExpiresAt *time.Time `json:"expires_at"`
|
ExpiresAt *time.Time `json:"expires_at"`
|
||||||
LastActive *time.Time `json:"last_active"`
|
LastActive *time.Time `json:"last_active"`
|
||||||
IpAddress pgtype.Text `json:"ip_address"`
|
IpAddress *string `json:"ip_address"`
|
||||||
UserAgent *string `json:"user_agent"`
|
UserAgent *string `json:"user_agent"`
|
||||||
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
||||||
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
||||||
|
@ -10,7 +10,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/jackc/pgx/v5/pgtype"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const createServiceSession = `-- name: CreateServiceSession :one
|
const createServiceSession = `-- name: CreateServiceSession :one
|
||||||
@ -32,7 +31,7 @@ type CreateServiceSessionParams struct {
|
|||||||
UserID *uuid.UUID `json:"user_id"`
|
UserID *uuid.UUID `json:"user_id"`
|
||||||
ExpiresAt *time.Time `json:"expires_at"`
|
ExpiresAt *time.Time `json:"expires_at"`
|
||||||
LastActive *time.Time `json:"last_active"`
|
LastActive *time.Time `json:"last_active"`
|
||||||
IpAddress pgtype.Text `json:"ip_address"`
|
IpAddress *string `json:"ip_address"`
|
||||||
UserAgent *string `json:"user_agent"`
|
UserAgent *string `json:"user_agent"`
|
||||||
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
||||||
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
||||||
|
@ -10,7 +10,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/jackc/pgx/v5/pgtype"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const createUserSession = `-- name: CreateUserSession :one
|
const createUserSession = `-- name: CreateUserSession :one
|
||||||
@ -31,7 +30,7 @@ type CreateUserSessionParams struct {
|
|||||||
SessionType string `json:"session_type"`
|
SessionType string `json:"session_type"`
|
||||||
ExpiresAt *time.Time `json:"expires_at"`
|
ExpiresAt *time.Time `json:"expires_at"`
|
||||||
LastActive *time.Time `json:"last_active"`
|
LastActive *time.Time `json:"last_active"`
|
||||||
IpAddress pgtype.Text `json:"ip_address"`
|
IpAddress *string `json:"ip_address"`
|
||||||
UserAgent *string `json:"user_agent"`
|
UserAgent *string `json:"user_agent"`
|
||||||
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
||||||
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
||||||
@ -233,3 +232,27 @@ func (q *Queries) UpdateSessionLastActive(ctx context.Context, id uuid.UUID) err
|
|||||||
_, err := q.db.Exec(ctx, updateSessionLastActive, id)
|
_, err := q.db.Exec(ctx, updateSessionLastActive, id)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const updateSessionTokens = `-- name: UpdateSessionTokens :exec
|
||||||
|
UPDATE user_sessions
|
||||||
|
SET access_token_id = $2, refresh_token_id = $3, expires_at = $4
|
||||||
|
WHERE id = $1
|
||||||
|
AND is_active = TRUE
|
||||||
|
`
|
||||||
|
|
||||||
|
type UpdateSessionTokensParams struct {
|
||||||
|
ID uuid.UUID `json:"id"`
|
||||||
|
AccessTokenID *uuid.UUID `json:"access_token_id"`
|
||||||
|
RefreshTokenID *uuid.UUID `json:"refresh_token_id"`
|
||||||
|
ExpiresAt *time.Time `json:"expires_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) UpdateSessionTokens(ctx context.Context, arg UpdateSessionTokensParams) error {
|
||||||
|
_, err := q.db.Exec(ctx, updateSessionTokens,
|
||||||
|
arg.ID,
|
||||||
|
arg.AccessTokenID,
|
||||||
|
arg.RefreshTokenID,
|
||||||
|
arg.ExpiresAt,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
@ -39,6 +39,12 @@ SET last_active = NOW()
|
|||||||
WHERE id = $1
|
WHERE id = $1
|
||||||
AND is_active = TRUE;
|
AND is_active = TRUE;
|
||||||
|
|
||||||
|
-- name: UpdateSessionTokens :exec
|
||||||
|
UPDATE user_sessions
|
||||||
|
SET access_token_id = $2, refresh_token_id = $3, expires_at = $4
|
||||||
|
WHERE id = $1
|
||||||
|
AND is_active = TRUE;
|
||||||
|
|
||||||
-- name: ListAllSessions :many
|
-- name: ListAllSessions :many
|
||||||
SELECT * FROM user_sessions
|
SELECT * FROM user_sessions
|
||||||
ORDER BY issued_at DESC
|
ORDER BY issued_at DESC
|
||||||
|
25
sqlc.yaml
25
sqlc.yaml
@ -41,20 +41,39 @@ sql:
|
|||||||
# ───── text ──────────────────────────────────────────
|
# ───── text ──────────────────────────────────────────
|
||||||
- db_type: "pg_catalog.text"
|
- db_type: "pg_catalog.text"
|
||||||
go_type: { type: "string" }
|
go_type: { type: "string" }
|
||||||
- db_type: "text" # or just "bool"
|
|
||||||
|
- db_type: "text"
|
||||||
go_type: { type: "string" }
|
go_type: { type: "string" }
|
||||||
|
|
||||||
- db_type: "pg_catalog.text"
|
- db_type: "pg_catalog.text"
|
||||||
nullable: true
|
nullable: true
|
||||||
go_type:
|
go_type:
|
||||||
type: "string"
|
type: "string"
|
||||||
pointer: true # ⇒ *bool for NULLable columns
|
pointer: true
|
||||||
|
|
||||||
- db_type: "text"
|
- db_type: "text"
|
||||||
nullable: true
|
nullable: true
|
||||||
go_type:
|
go_type:
|
||||||
type: "string"
|
type: "string"
|
||||||
pointer: true # ⇒ *bool for NULLable columns
|
pointer: true
|
||||||
|
|
||||||
|
- db_type: "pg_catalog.varchar"
|
||||||
|
go_type: { type: "string" }
|
||||||
|
|
||||||
|
- db_type: "varchar"
|
||||||
|
go_type: { type: "string" }
|
||||||
|
|
||||||
|
- db_type: "pg_catalog.varchar"
|
||||||
|
nullable: true
|
||||||
|
go_type:
|
||||||
|
type: "string"
|
||||||
|
pointer: true
|
||||||
|
|
||||||
|
- db_type: "varchar"
|
||||||
|
nullable: true
|
||||||
|
go_type:
|
||||||
|
type: "string"
|
||||||
|
pointer: true
|
||||||
|
|
||||||
# ───── timestamp (WITHOUT TZ) ────────────────────────
|
# ───── timestamp (WITHOUT TZ) ────────────────────────
|
||||||
- db_type: "pg_catalog.timestamp" # or "timestamp"
|
- db_type: "pg_catalog.timestamp" # or "timestamp"
|
||||||
|
Reference in New Issue
Block a user