From 8ec981c860f3598121e67de72e52ac2e8ecd8944 Mon Sep 17 00:00:00 2001 From: Jason Hilder Date: Sat, 25 Apr 2026 19:37:17 +0200 Subject: [PATCH] Updated sqlc setup for initial user creation. --- internal/db/models.go | 11 ++++-- internal/db/querier.go | 5 ++- internal/db/queries.sql.go | 81 +++++++++++++++++++++++++++----------- sql/queries.sql | 15 ++++--- sql/schema.sql | 7 ++-- 5 files changed, 82 insertions(+), 37 deletions(-) diff --git a/internal/db/models.go b/internal/db/models.go index 3e12d39..c980831 100644 --- a/internal/db/models.go +++ b/internal/db/models.go @@ -4,8 +4,13 @@ package db +import ( + "github.com/jackc/pgx/v5/pgtype" +) + type User struct { - ID int64 `json:"id"` - Name string `json:"name"` - Age int32 `json:"age"` + ID int64 `json:"id"` + Email string `json:"email"` + Password string `json:"password"` + CreatedAt pgtype.Timestamptz `json:"created_at"` } diff --git a/internal/db/querier.go b/internal/db/querier.go index 28ff344..4009e44 100644 --- a/internal/db/querier.go +++ b/internal/db/querier.go @@ -10,8 +10,9 @@ import ( type Querier interface { CreateUser(ctx context.Context, arg CreateUserParams) (User, error) - DeleteUser(ctx context.Context, id int64) error - GetUser(ctx context.Context, id int64) (User, error) + DeleteUser(ctx context.Context, arg DeleteUserParams) error + GetUserByEmail(ctx context.Context, dollar_1 string) (User, error) + GetUserById(ctx context.Context, id int64) (User, error) ListUsers(ctx context.Context) ([]User, error) UpdateUser(ctx context.Context, arg UpdateUserParams) error } diff --git a/internal/db/queries.sql.go b/internal/db/queries.sql.go index d750ae0..6650c84 100644 --- a/internal/db/queries.sql.go +++ b/internal/db/queries.sql.go @@ -11,50 +11,82 @@ import ( const createUser = `-- name: CreateUser :one INSERT INTO users ( - name, age + email, password ) VALUES ( $1, $2 ) -RETURNING id, name, age +RETURNING id, email, password, created_at ` type CreateUserParams struct { - Name string `json:"name"` - Age int32 `json:"age"` + 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.Name, arg.Age) + row := q.db.QueryRow(ctx, createUser, arg.Email, arg.Password) var i User - err := row.Scan(&i.ID, &i.Name, &i.Age) + 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 +WHERE id = $1 and email = $2 ` -func (q *Queries) DeleteUser(ctx context.Context, id int64) error { - _, err := q.db.Exec(ctx, deleteUser, id) +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 getUser = `-- name: GetUser :one -SELECT id, name, age FROM users +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) GetUser(ctx context.Context, id int64) (User, error) { - row := q.db.QueryRow(ctx, getUser, id) +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.Name, &i.Age) + err := row.Scan( + &i.ID, + &i.Email, + &i.Password, + &i.CreatedAt, + ) return i, err } const listUsers = `-- name: ListUsers :many -SELECT id, name, age FROM users -ORDER BY name +SELECT id, email, password, created_at FROM users +ORDER BY email ` func (q *Queries) ListUsers(ctx context.Context) ([]User, error) { @@ -66,7 +98,12 @@ func (q *Queries) ListUsers(ctx context.Context) ([]User, error) { var items []User for rows.Next() { var i User - if err := rows.Scan(&i.ID, &i.Name, &i.Age); err != nil { + if err := rows.Scan( + &i.ID, + &i.Email, + &i.Password, + &i.CreatedAt, + ); err != nil { return nil, err } items = append(items, i) @@ -79,18 +116,16 @@ func (q *Queries) ListUsers(ctx context.Context) ([]User, error) { const updateUser = `-- name: UpdateUser :exec UPDATE users - set name = $2, - age = $3 + set email = $2 WHERE id = $1 ` type UpdateUserParams struct { - ID int64 `json:"id"` - Name string `json:"name"` - Age int32 `json:"age"` + 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.Name, arg.Age) + _, err := q.db.Exec(ctx, updateUser, arg.ID, arg.Email) return err } diff --git a/sql/queries.sql b/sql/queries.sql index 02ddef0..f16f51d 100644 --- a/sql/queries.sql +++ b/sql/queries.sql @@ -1,14 +1,18 @@ --- name: GetUser :one +-- name: GetUserByEmail :one +SELECT id, email, password, created_at FROM users +WHERE email = $1::text LIMIT 1; + +-- name: GetUserById :one SELECT * FROM users WHERE id = $1 LIMIT 1; -- name: ListUsers :many SELECT * FROM users -ORDER BY name; +ORDER BY email; -- name: CreateUser :one INSERT INTO users ( - name, age + email, password ) VALUES ( $1, $2 ) @@ -16,10 +20,9 @@ RETURNING *; -- name: UpdateUser :exec UPDATE users - set name = $2, - age = $3 + set email = $2 WHERE id = $1; -- name: DeleteUser :exec DELETE FROM users -WHERE id = $1; +WHERE id = $1 and email = $2; diff --git a/sql/schema.sql b/sql/schema.sql index 0d9dd42..e4b3ac2 100644 --- a/sql/schema.sql +++ b/sql/schema.sql @@ -1,6 +1,7 @@ CREATE TABLE users ( - id BIGSERIAL PRIMARY KEY, - name text NOT NULL, - age int NOT NULL + id BIGSERIAL PRIMARY KEY, + email TEXT NOT NULL UNIQUE, + password TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() );