Update structure to domain driven architecture.

This commit is contained in:
2026-05-08 08:14:25 +02:00
parent 4f3692abd9
commit 2993cc04ef
21 changed files with 185 additions and 103 deletions
+32
View File
@@ -0,0 +1,32 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
package db
import (
"context"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
)
type DBTX interface {
Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
Query(context.Context, string, ...interface{}) (pgx.Rows, error)
QueryRow(context.Context, string, ...interface{}) pgx.Row
}
func New(db DBTX) *Queries {
return &Queries{db: db}
}
type Queries struct {
db DBTX
}
func (q *Queries) WithTx(tx pgx.Tx) *Queries {
return &Queries{
db: tx,
}
}
+24
View File
@@ -0,0 +1,24 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
package db
import (
"github.com/jackc/pgx/v5/pgtype"
)
type RefreshToken struct {
ID int64 `json:"id"`
UserID int64 `json:"user_id"`
TokenHash string `json:"token_hash"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
}
type User struct {
ID int64 `json:"id"`
Email string `json:"email"`
Password string `json:"password"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
+28
View File
@@ -0,0 +1,28 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
package db
import (
"context"
)
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
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
}
var _ Querier = (*Queries)(nil)
+159
View File
@@ -0,0 +1,159 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
// source: refresh_tokens.sql
package db
import (
"context"
"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)
RETURNING id, user_id, token_hash, created_at, expires_at
`
type CreateRefreshTokenParams struct {
UserID int64 `json:"user_id"`
TokenHash string `json:"token_hash"`
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
}
func (q *Queries) CreateRefreshToken(ctx context.Context, arg CreateRefreshTokenParams) (RefreshToken, error) {
row := q.db.QueryRow(ctx, createRefreshToken, arg.UserID, arg.TokenHash, arg.ExpiresAt)
var i RefreshToken
err := row.Scan(
&i.ID,
&i.UserID,
&i.TokenHash,
&i.CreatedAt,
&i.ExpiresAt,
)
return i, err
}
const deleteAllUserRefreshTokens = `-- name: DeleteAllUserRefreshTokens :exec
DELETE FROM refresh_tokens
WHERE user_id = $1
`
func (q *Queries) DeleteAllUserRefreshTokens(ctx context.Context, userID int64) error {
_, err := q.db.Exec(ctx, deleteAllUserRefreshTokens, userID)
return err
}
const deleteOldestRefreshToken = `-- 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
)
`
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
}
const getRefreshToken = `-- name: GetRefreshToken :one
SELECT id, user_id, token_hash, created_at, expires_at FROM refresh_tokens
WHERE token_hash = $1 LIMIT 1
`
func (q *Queries) GetRefreshToken(ctx context.Context, tokenHash string) (RefreshToken, error) {
row := q.db.QueryRow(ctx, getRefreshToken, tokenHash)
var i RefreshToken
err := row.Scan(
&i.ID,
&i.UserID,
&i.TokenHash,
&i.CreatedAt,
&i.ExpiresAt,
)
return i, err
}
const getUserRefreshTokens = `-- name: GetUserRefreshTokens :many
SELECT id, user_id, token_hash, created_at, expires_at FROM refresh_tokens
WHERE user_id = $1
`
func (q *Queries) GetUserRefreshTokens(ctx context.Context, userID int64) ([]RefreshToken, error) {
rows, err := q.db.Query(ctx, getUserRefreshTokens, userID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []RefreshToken
for rows.Next() {
var i RefreshToken
if err := rows.Scan(
&i.ID,
&i.UserID,
&i.TokenHash,
&i.CreatedAt,
&i.ExpiresAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
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
}
+19
View File
@@ -0,0 +1,19 @@
package db
import (
"github.com/jackc/pgx/v5/pgxpool"
)
type Store struct {
// embedded field, for easier access ie store.GetUser
*Queries
// named field for explicit calles ie db.Begin
db *pgxpool.Pool
}
func NewStore(db *pgxpool.Pool) *Store {
return &Store{
Queries: New(db),
db: db,
}
}
+131
View File
@@ -0,0 +1,131 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
// source: users.sql
package db
import (
"context"
)
const createUser = `-- name: CreateUser :one
INSERT INTO users (
email, password
) VALUES (
$1, $2
)
RETURNING id, email, password, created_at
`
type CreateUserParams struct {
Email string `json:"email"`
Password string `json:"password"`
}
func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, error) {
row := q.db.QueryRow(ctx, createUser, arg.Email, arg.Password)
var i User
err := row.Scan(
&i.ID,
&i.Email,
&i.Password,
&i.CreatedAt,
)
return i, err
}
const deleteUser = `-- name: DeleteUser :exec
DELETE FROM users
WHERE id = $1 and email = $2
`
type DeleteUserParams struct {
ID int64 `json:"id"`
Email string `json:"email"`
}
func (q *Queries) DeleteUser(ctx context.Context, arg DeleteUserParams) error {
_, err := q.db.Exec(ctx, deleteUser, arg.ID, arg.Email)
return err
}
const getUserByEmail = `-- name: GetUserByEmail :one
SELECT id, email, password, created_at FROM users
WHERE email = $1::text LIMIT 1
`
func (q *Queries) GetUserByEmail(ctx context.Context, dollar_1 string) (User, error) {
row := q.db.QueryRow(ctx, getUserByEmail, dollar_1)
var i User
err := row.Scan(
&i.ID,
&i.Email,
&i.Password,
&i.CreatedAt,
)
return i, err
}
const getUserById = `-- name: GetUserById :one
SELECT id, email, password, created_at FROM users
WHERE id = $1 LIMIT 1
`
func (q *Queries) GetUserById(ctx context.Context, id int64) (User, error) {
row := q.db.QueryRow(ctx, getUserById, id)
var i User
err := row.Scan(
&i.ID,
&i.Email,
&i.Password,
&i.CreatedAt,
)
return i, err
}
const listUsers = `-- name: ListUsers :many
SELECT id, email, password, created_at FROM users
ORDER BY email
`
func (q *Queries) ListUsers(ctx context.Context) ([]User, error) {
rows, err := q.db.Query(ctx, listUsers)
if err != nil {
return nil, err
}
defer rows.Close()
var items []User
for rows.Next() {
var i User
if err := rows.Scan(
&i.ID,
&i.Email,
&i.Password,
&i.CreatedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const updateUser = `-- name: UpdateUser :exec
UPDATE users
set email = $2
WHERE id = $1
`
type UpdateUserParams struct {
ID int64 `json:"id"`
Email string `json:"email"`
}
func (q *Queries) UpdateUser(ctx context.Context, arg UpdateUserParams) error {
_, err := q.db.Exec(ctx, updateUser, arg.ID, arg.Email)
return err
}