Initial Database Schema
This commit is contained in:
12
sql/queries/click_log.sql
Normal file
12
sql/queries/click_log.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- name: TrackClick :one
|
||||
INSERT INTO click_logs (url_id, referrer, user_agent, ip_address)
|
||||
VALUES (
|
||||
$1,
|
||||
$2,
|
||||
$3,
|
||||
$4
|
||||
)
|
||||
RETURNING *;
|
||||
|
||||
-- name: GetClicks :many
|
||||
SELECT * FROM click_logs;
|
||||
22
sql/queries/urls.sql
Normal file
22
sql/queries/urls.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
-- name: CreateURL :one
|
||||
INSERT INTO urls (created_at, expires_at, long_url, short_code, is_active)
|
||||
VALUES (
|
||||
$1,
|
||||
$2,
|
||||
$3,
|
||||
$4,
|
||||
$5
|
||||
)
|
||||
RETURNING *;
|
||||
|
||||
-- name: GetURLs :many
|
||||
SELECT * FROM urls;
|
||||
|
||||
-- name: GetURLByShortCode :one
|
||||
SELECT url_id, long_url FROM urls WHERE is_active = true AND short_code = $1;
|
||||
|
||||
-- name: SetActive :one
|
||||
UPDATE urls SET is_active = $1 WHERE url_id = $2 RETURNING *;
|
||||
|
||||
-- name: DeleteURL :one
|
||||
DELETE FROM urls WHERE url_id = $1 RETURNING *;
|
||||
16
sql/schema/001_create_url_table.sql
Normal file
16
sql/schema/001_create_url_table.sql
Normal file
@@ -0,0 +1,16 @@
|
||||
-- +goose Up
|
||||
CREATE TABLE urls (
|
||||
url_id SERIAL PRIMARY KEY,
|
||||
long_url TEXT NOT NULL,
|
||||
short_code VARCHAR(10) UNIQUE NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||
expires_at TIMESTAMP WITH TIME ZONE,
|
||||
is_active BOOLEAN DEFAULT TRUE NOT NULL
|
||||
);
|
||||
|
||||
-- Crucial index for lightning-fast lookups when redirecting
|
||||
CREATE INDEX idx_urls_short_code ON urls(short_code);
|
||||
|
||||
-- +goose Down
|
||||
DROP INDEX idx_urls_short_code;
|
||||
DROP TABLE urls;
|
||||
16
sql/schema/002_create_click_logs_table.sql
Normal file
16
sql/schema/002_create_click_logs_table.sql
Normal file
@@ -0,0 +1,16 @@
|
||||
-- +goose Up
|
||||
CREATE TABLE click_logs (
|
||||
click_id BIGSERIAL PRIMARY KEY,
|
||||
url_id INT NOT NULL REFERENCES urls(url_id) ON DELETE CASCADE,
|
||||
clicked_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
referrer VARCHAR(255),
|
||||
user_agent TEXT,
|
||||
ip_address VARCHAR(45) -- Accommodates both IPv4 and IPv6
|
||||
);
|
||||
|
||||
-- Index to optimize analytics queries for a specific link
|
||||
CREATE INDEX idx_click_logs_url_id ON click_logs(url_id);
|
||||
|
||||
-- +goose Down
|
||||
DROP INDEX idx_click_logs_url_id;
|
||||
DROP TABLE click_logs;
|
||||
Reference in New Issue
Block a user