[server][breaking] Use timestamptz everywhere

This commit is contained in:
Abhishek Shroff
2025-07-09 01:04:31 +05:30
parent 719a77cb9f
commit e3142e7f7a
10 changed files with 37 additions and 38 deletions

View File

@@ -44,7 +44,7 @@ func (f *FileSystem) TrashList(cursor string, n uint) ([]Resource, string, error
} else {
t := int64(binary.LittleEndian.Uint64(d[16:]))
lastID, _ := uuid.FromBytes(d[:16])
lastTimestamp := time.Unix(t/1e9, t%1e9).UTC()
lastTimestamp := time.Unix(t/1e9, t%1e9)
q = q.Where(
goqu.Or(
goqu.I("deleted").Lt(goqu.V(lastTimestamp)),
@@ -127,7 +127,7 @@ func (f *FileSystem) selectTrash(time time.Time) (exp.AliasedExpression, *goqu.S
base = base.Where(goqu.L("r.permissions[?]::INTEGER <> 0", f.user.ID))
}
if !time.IsZero() {
base = base.Where(r.Col("deleted").Lt(goqu.V(time.UTC())))
base = base.Where(r.Col("deleted").Lt(goqu.V(time)))
}
rec := pg.

View File

@@ -71,11 +71,11 @@ WHERE user_id = @user_id::INT
if since == 0 {
sb.WriteString("AND deleted IS NULL\n")
} else {
sb.WriteString("AND modified >= @since::TIMESTAMP\n")
sb.WriteString("AND modified >= @since::TIMESTAMPTZ\n")
}
sb.WriteString("ORDER BY modified DESC")
if rows, err := db.Query(sb.String(), pgx.NamedArgs{"user_id": u.ID, "since": time.UnixMilli(since).UTC()}); err != nil {
if rows, err := db.Query(sb.String(), pgx.NamedArgs{"user_id": u.ID, "since": time.UnixMilli(since)}); err != nil {
return nil, err
} else if bookmarks, err := pgx.CollectRows(rows, scanBookmark); err != nil {
return nil, err

View File

@@ -44,9 +44,9 @@ func ListUsers(db db.Handler, since int64) ([]User, error) {
sb := strings.Builder{}
sb.WriteString("SELECT id, email, name, home, permissions FROM users")
if since > 0 {
sb.WriteString(" WHERE modified >= @since::TIMESTAMP")
sb.WriteString(" WHERE modified >= @since::TIMESTAMPTZ ")
}
if rows, err := db.Query(sb.String(), pgx.NamedArgs{"since": time.UnixMilli(since).UTC()}); err != nil {
if rows, err := db.Query(sb.String(), pgx.NamedArgs{"since": time.UnixMilli(since)}); err != nil {
return nil, err
} else {
return pgx.CollectRows(rows, scanUser)

View File

@@ -1,20 +1,20 @@
CREATE TABLE resources (
id uuid PRIMARY KEY,
name TEXT NOT NULL,
parent uuid REFERENCES resources(id) ON UPDATE CASCADE ON DELETE CASCADE,
dir BOOLEAN NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted TIMESTAMP,
permissions JSONB NOT NULL DEFAULT '{}',
grants JSONB NOT NULL DEFAULT '{}'
id uuid PRIMARY KEY,
name TEXT NOT NULL,
parent uuid REFERENCES resources(id) ON UPDATE CASCADE ON DELETE CASCADE,
dir BOOLEAN NOT NULL,
created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted TIMESTAMPTZ,
permissions JSONB NOT NULL DEFAULT '{}',
grants JSONB NOT NULL DEFAULT '{}'
);
CREATE TABLE resource_versions(
id UUID PRIMARY KEY,
resource_id UUID NOT NULL REFERENCES resources(id) ON DELETE CASCADE,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted TIMESTAMP,
created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted TIMESTAMPTZ,
size BIGINT NOT NULL,
mime_type TEXT NOT NULL,
sha256 TEXT NOT NULL

View File

@@ -1,8 +1,8 @@
CREATE TABLE users(
id SERIAL PRIMARY KEY,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted TIMESTAMP,
created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted TIMESTAMPTZ,
email TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
password_hash TEXT NOT NULL,

View File

@@ -1,8 +1,8 @@
CREATE TABLE api_keys(
id TEXT NOT NULL PRIMARY KEY,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires TIMESTAMP NOT NULL,
user_id INT NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE
id TEXT NOT NULL PRIMARY KEY,
created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires TIMESTAMPTZ NOT NULL,
user_id INT NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE
);
---- create above / drop below ----

View File

@@ -1,11 +1,11 @@
CREATE TABLE publinks(
id TEXT PRIMARY KEY,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
root UUID NOT NULL REFERENCES resources(id) ON UPDATE CASCADE ON DELETE CASCADE,
accessed INT NOT NULL DEFAULT 0,
access_limit INT NOT NULL DEFAULT 0,
password_hash TEXT NOT NULL DEFAULT '',
expires TIMESTAMP
id TEXT PRIMARY KEY,
created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
root UUID NOT NULL REFERENCES resources(id) ON UPDATE CASCADE ON DELETE CASCADE,
accessed INT NOT NULL DEFAULT 0,
access_limit INT NOT NULL DEFAULT 0,
password_hash TEXT NOT NULL DEFAULT '',
expires TIMESTAMPTZ
);
CREATE INDEX publinks_by_root ON publinks(root);

View File

@@ -3,9 +3,9 @@ CREATE TABLE bookmarks(
resource_id UUID NOT NULL REFERENCES resources(id),
name TEXT NOT NULL,
dir BOOLEAN NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted TIMESTAMP,
created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted TIMESTAMPTZ,
PRIMARY KEY(user_id, resource_id)
);

View File

@@ -1,7 +1,7 @@
CREATE TABLE reset_tokens(
user_id INT PRIMARY KEY REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
token TEXT NOT NULL,
expires TIMESTAMP NOT NULL
user_id INT PRIMARY KEY REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
token TEXT NOT NULL,
expires TIMESTAMPTZ NOT NULL
);

View File

@@ -8,5 +8,4 @@ CREATE UNLOGGED TABLE pending_logins(
---- create above / drop below ----
DROP TABLE pending_logins;