udemy-go-web-1/sql/query.sql
2024-07-30 22:02:26 +02:00

202 lines
2.7 KiB
SQL

-- name: InsertReservation :one
INSERT INTO
reservations (
first_name,
last_name,
email,
phone,
start_date,
end_date,
room_id,
created_at,
updated_at
)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9)
RETURNING
id;
-- name: InsertRoomRestriction :exec
INSERT INTO
room_restrictions (
start_date,
end_date,
room_id,
reservation_id,
restriction_id,
created_at,
updated_at
)
VALUES
($1, $2, $3, $4, $5, $6, $7);
-- name: SearchAvailabilityByDatesByRoomID :one
SELECT
count(id)
FROM
room_restrictions
WHERE
room_id = $1
AND $2 < end_date
AND $3 > start_date;
-- name: SearchAvailabilityForAllRooms :many
SELECT
r.id,
r.room_name
FROM
rooms r
WHERE
r.id NOT IN (
SELECT
room_id
FROM
room_restrictions rr
WHERE
$1 < rr.end_date
AND $2 > rr.start_date
);
-- name: GetRoomById :one
SELECT
id,
room_name,
created_at,
updated_at
FROM
rooms
WHERE
id = $1;
-- name: GetUserByID :one
SELECT
id,
first_name,
last_name,
email,
password,
access_level,
created_at,
updated_at
FROM
users
WHERE
id = $1;
-- name: UpdateUser :exec
UPDATE users
SET
first_name = $1,
last_name = $2,
email = $3,
access_level = $4,
updated_at = $5;
-- name: GetUserCred :one
SELECT
id,
password
FROM
users
WHERE
email = $1;
-- name: AllReservations :many
SELECT
r.id,
r.first_name,
r.last_name,
r.email,
r.phone,
r.start_date,
r.end_date,
r.room_id,
r.created_at,
r.updated_at,
r.processed,
rm.id,
rm.room_name
FROM
reservations r
LEFT JOIN rooms rm ON (r.room_id = rm.id)
ORDER BY
r.start_date ASC;
-- name: AllNewReservations :many
SELECT
r.id,
r.first_name,
r.last_name,
r.email,
r.phone,
r.start_date,
r.end_date,
r.room_id,
r.created_at,
r.updated_at,
r.processed,
rm.id,
rm.room_name
FROM
reservations r
LEFT JOIN rooms rm ON (r.room_id = rm.id)
WHERE
r.processed = 0
ORDER BY
r.start_date ASC;
-- name: GetReservationByID :one
SELECT
r.id,
r.first_name,
r.last_name,
r.email,
r.phone,
r.start_date,
r.end_date,
r.room_id,
r.created_at,
r.updated_at,
r.processed,
rm.id,
rm.room_name
FROM
reservations r
LEFT JOIN rooms rm ON (r.room_id = rm.id)
WHERE
r.id = $1;
-- name: UpdateReservation :exec
UPDATE reservations
SET
first_name = $1,
last_name = $2,
email = $3,
phone = $4,
updated_at = $5
WHERE
id = $6;
-- name: DeleteReservation :exec
DELETE FROM reservations
WHERE
id = $1;
-- name: UpdateProcessedForReservation :exec
UPDATE reservations
SET
processed = $1
WHERE
id = $2;
-- name: AllRooms :many
SELECT
id,
room_name,
created_at,
updated_at
FROM
rooms
ORDER BY
room_name;