diff --git a/internal/repository/db.go b/internal/repository/db.go new file mode 100644 index 0000000..89e33c0 --- /dev/null +++ b/internal/repository/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 + +package repository + +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, + } +} diff --git a/internal/repository/models.go b/internal/repository/models.go new file mode 100644 index 0000000..2c91228 --- /dev/null +++ b/internal/repository/models.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 + +package repository + +import ( + "github.com/google/uuid" + "github.com/jackc/pgx/v5/pgtype" +) + +type User struct { + ID uuid.UUID `json:"id"` + Email string `json:"email"` + FullName string `json:"full_name"` + PasswordHash string `json:"password_hash"` + IsAdmin bool `json:"is_admin"` + CreatedAt pgtype.Timestamptz `json:"created_at"` + UpdatedAt pgtype.Timestamptz `json:"updated_at"` + LastLogin pgtype.Timestamptz `json:"last_login"` +} diff --git a/internal/repository/users.sql.go b/internal/repository/users.sql.go new file mode 100644 index 0000000..68ab1a6 --- /dev/null +++ b/internal/repository/users.sql.go @@ -0,0 +1,73 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 +// source: users.sql + +package repository + +import ( + "context" + + "github.com/google/uuid" +) + +const findAllUsers = `-- name: FindAllUsers :many +SELECT id, email, full_name, password_hash, is_admin, created_at, updated_at, last_login FROM users +` + +func (q *Queries) FindAllUsers(ctx context.Context) ([]User, error) { + rows, err := q.db.Query(ctx, findAllUsers) + 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.FullName, + &i.PasswordHash, + &i.IsAdmin, + &i.CreatedAt, + &i.UpdatedAt, + &i.LastLogin, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const insertUser = `-- name: InsertUser :one +INSERT INTO users ( + email, full_name, password_hash, is_admin +) VALUES ( + $1, $2, $3, $4 +) +RETURNING id +` + +type InsertUserParams struct { + Email string `json:"email"` + FullName string `json:"full_name"` + PasswordHash string `json:"password_hash"` + IsAdmin bool `json:"is_admin"` +} + +func (q *Queries) InsertUser(ctx context.Context, arg InsertUserParams) (uuid.UUID, error) { + row := q.db.QueryRow(ctx, insertUser, + arg.Email, + arg.FullName, + arg.PasswordHash, + arg.IsAdmin, + ) + var id uuid.UUID + err := row.Scan(&id) + return id, err +}