feat: Added last chapter and refactored whole project
This commit is contained in:
@@ -108,3 +108,37 @@ func (q *Queries) GetChirps(ctx context.Context) ([]Chirp, error) {
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getChirpsByUserid = `-- name: GetChirpsByUserid :many
|
||||
SELECT id, created_at, updated_at, body, user_id FROM chirps
|
||||
WHERE chirps.user_id = $1
|
||||
`
|
||||
|
||||
func (q *Queries) GetChirpsByUserid(ctx context.Context, userID uuid.UUID) ([]Chirp, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getChirpsByUserid, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []Chirp
|
||||
for rows.Next() {
|
||||
var i Chirp
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Body,
|
||||
&i.UserID,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
@@ -44,3 +44,30 @@ func (q *Queries) CreateRefreshToken(ctx context.Context, arg CreateRefreshToken
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const getUserFromRefreshToken = `-- name: GetUserFromRefreshToken :one
|
||||
SELECT user_id FROM refresh_tokens
|
||||
WHERE refresh_tokens.token = $1
|
||||
AND refresh_tokens.expires_at > NOW()
|
||||
AND refresh_tokens.revoked_at IS NULL
|
||||
`
|
||||
|
||||
func (q *Queries) GetUserFromRefreshToken(ctx context.Context, token string) (uuid.UUID, error) {
|
||||
row := q.db.QueryRowContext(ctx, getUserFromRefreshToken, token)
|
||||
var user_id uuid.UUID
|
||||
err := row.Scan(&user_id)
|
||||
return user_id, err
|
||||
}
|
||||
|
||||
const revokeRefreshToken = `-- name: RevokeRefreshToken :exec
|
||||
UPDATE refresh_tokens
|
||||
SET
|
||||
revoked_at = NOW(),
|
||||
updated_at = NOW()
|
||||
WHERE token = $1
|
||||
`
|
||||
|
||||
func (q *Queries) RevokeRefreshToken(ctx context.Context, token string) error {
|
||||
_, err := q.db.ExecContext(ctx, revokeRefreshToken, token)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.27.0
|
||||
// source: update_token.sql
|
||||
|
||||
package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
const revokeRefreshToken = `-- name: RevokeRefreshToken :exec
|
||||
UPDATE refresh_tokens
|
||||
SET
|
||||
revoked_at = NOW(),
|
||||
updated_at = NOW()
|
||||
WHERE token = $1
|
||||
`
|
||||
|
||||
func (q *Queries) RevokeRefreshToken(ctx context.Context, token string) error {
|
||||
_, err := q.db.ExecContext(ctx, revokeRefreshToken, token)
|
||||
return err
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.27.0
|
||||
// source: update_users.sql
|
||||
|
||||
package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
const updateUserCredentials = `-- name: UpdateUserCredentials :one
|
||||
UPDATE users
|
||||
SET email = $2,
|
||||
hashed_password = $3,
|
||||
updated_at = NOW()
|
||||
WHERE users.id = $1
|
||||
RETURNING id, created_at, updated_at, email, is_chirpy_red
|
||||
`
|
||||
|
||||
type UpdateUserCredentialsParams struct {
|
||||
ID uuid.UUID
|
||||
Email string
|
||||
HashedPassword string
|
||||
}
|
||||
|
||||
type UpdateUserCredentialsRow struct {
|
||||
ID uuid.UUID
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
Email string
|
||||
IsChirpyRed bool
|
||||
}
|
||||
|
||||
func (q *Queries) UpdateUserCredentials(ctx context.Context, arg UpdateUserCredentialsParams) (UpdateUserCredentialsRow, error) {
|
||||
row := q.db.QueryRowContext(ctx, updateUserCredentials, arg.ID, arg.Email, arg.HashedPassword)
|
||||
var i UpdateUserCredentialsRow
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Email,
|
||||
&i.IsChirpyRed,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.27.0
|
||||
// source: user_from_token.sql
|
||||
|
||||
package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
const getUserFromRefreshToken = `-- name: GetUserFromRefreshToken :one
|
||||
SELECT user_id FROM refresh_tokens
|
||||
WHERE refresh_tokens.token = $1
|
||||
AND refresh_tokens.expires_at > NOW()
|
||||
AND refresh_tokens.revoked_at IS NULL
|
||||
`
|
||||
|
||||
func (q *Queries) GetUserFromRefreshToken(ctx context.Context, token string) (uuid.UUID, error) {
|
||||
row := q.db.QueryRowContext(ctx, getUserFromRefreshToken, token)
|
||||
var user_id uuid.UUID
|
||||
err := row.Scan(&user_id)
|
||||
return user_id, err
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
@@ -80,6 +81,42 @@ func (q *Queries) GetUserByEmail(ctx context.Context, email string) (User, error
|
||||
return i, err
|
||||
}
|
||||
|
||||
const updateUserCredentials = `-- name: UpdateUserCredentials :one
|
||||
UPDATE users
|
||||
SET email = $2,
|
||||
hashed_password = $3,
|
||||
updated_at = NOW()
|
||||
WHERE users.id = $1
|
||||
RETURNING id, created_at, updated_at, email, is_chirpy_red
|
||||
`
|
||||
|
||||
type UpdateUserCredentialsParams struct {
|
||||
ID uuid.UUID
|
||||
Email string
|
||||
HashedPassword string
|
||||
}
|
||||
|
||||
type UpdateUserCredentialsRow struct {
|
||||
ID uuid.UUID
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
Email string
|
||||
IsChirpyRed bool
|
||||
}
|
||||
|
||||
func (q *Queries) UpdateUserCredentials(ctx context.Context, arg UpdateUserCredentialsParams) (UpdateUserCredentialsRow, error) {
|
||||
row := q.db.QueryRowContext(ctx, updateUserCredentials, arg.ID, arg.Email, arg.HashedPassword)
|
||||
var i UpdateUserCredentialsRow
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Email,
|
||||
&i.IsChirpyRed,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const upgradeUser = `-- name: UpgradeUser :exec
|
||||
UPDATE users
|
||||
SET is_chirpy_red = true
|
||||
|
||||
Reference in New Issue
Block a user