75 lines
1.6 KiB
SQL
75 lines
1.6 KiB
SQL
-- name: CreateEntry :one
|
|
INSERT INTO entries (
|
|
entry_id, user_id, title, body
|
|
) VALUES (
|
|
$1, $2, $3, $4
|
|
)
|
|
RETURNING entry_id, created_at, to_tsvector(body);
|
|
|
|
-- name: UpdateEntry :execrows
|
|
UPDATE entries SET
|
|
title = $2,
|
|
body = $3
|
|
WHERE entry_id = $1;
|
|
|
|
-- name: GetEntry :one
|
|
SELECT * FROM entries
|
|
WHERE entry_id = $1 and user_id = $2
|
|
LIMIT 1;
|
|
|
|
-- name: GetEntries :many
|
|
SELECT * FROM entries
|
|
WHERE user_id = $1;
|
|
|
|
-- name: DeleteEntry :execrows
|
|
DELETE FROM entries
|
|
WHERE entry_id = $1;
|
|
|
|
-- name: SimilarEntries :many
|
|
SELECT entry_id, similarity(body, $2) as similarity,
|
|
ts_headline('english', body, q) as headline,
|
|
title from entries,
|
|
to_tsquery($2) q
|
|
WHERE user_id = $1 and
|
|
similarity(body, $2) > 0.0
|
|
order by similarity DESC
|
|
LIMIT 10;
|
|
|
|
-- name: CreateUser :one
|
|
INSERT INTO users (
|
|
first_name, last_name, username, email, hash
|
|
) VALUES (
|
|
$1, $2, $3, $4, hash($5)
|
|
)
|
|
RETURNING user_id, username, token, token_expires;
|
|
|
|
-- name: GetUser :one
|
|
SELECT * FROM users
|
|
WHERE user_id = $1 LIMIT 1;
|
|
|
|
-- name: GetUserByToken :one
|
|
SELECT * FROM users
|
|
WHERE token = $1 LIMIT 1;
|
|
|
|
-- name: AuthUser :one
|
|
UPDATE users
|
|
SET
|
|
token = DEFAULT,
|
|
token_expires = DEFAULT
|
|
WHERE
|
|
username = $2 and
|
|
(hash = crypt($1, hash)) = true
|
|
RETURNING user_id, created_at, first_name, last_name, username, email, token, token_expires, true as authed;
|
|
|
|
-- name: DeleteUser :exec
|
|
DELETE FROM users CASCADE
|
|
WHERE user_id = $1;
|
|
|
|
-- name: ValidToken :one
|
|
SELECT now() < token_created FROM users
|
|
WHERE token = $1 LIMIT 1;
|
|
|
|
-- name: EntriesByToken :many
|
|
SELECT * FROM entries
|
|
WHERE user_id = (SELECT user_id FROM users WHERE token = $1 limit 1);
|