SMQ-2873 - Switch to TIMESTAMPZ in Postgres (#3015)

Signed-off-by: nyagamunene <stevenyaga2014@gmail.com>
This commit is contained in:
Steve Munene
2025-07-15 00:35:47 +03:00
committed by GitHub
parent b6080bc42b
commit d4dc7ffe35
18 changed files with 130 additions and 22 deletions
+5 -5
View File
@@ -413,12 +413,12 @@ CREATE TABLE IF NOT EXISTS pats (
user_id VARCHAR(36),
description TEXT,
secret TEXT,
issued_at TIMESTAMP,
expires_at TIMESTAMP,
updated_at TIMESTAMP,
issued_at TIMESTAMPTZ,
expires_at TIMESTAMPTZ,
updated_at TIMESTAMPTZ,
revoked BOOLEAN,
revoked_at TIMESTAMP,
last_used_at TIMESTAMP,
revoked_at TIMESTAMPTZ,
last_used_at TIMESTAMPTZ,
UNIQUE (id, name, secret)
)
+1 -1
View File
@@ -76,7 +76,7 @@ func (bh *bcryptHasher) Compare(plain, hashed string) error {
}
func generateSalt(length int) ([]byte, error) {
rand.New(rand.NewSource(time.Now().UnixNano()))
rand.New(rand.NewSource(time.Now().UTC().UnixNano()))
salt := make([]byte, length)
_, err := rand.Read(salt)
if err != nil {
+21
View File
@@ -104,6 +104,27 @@ func Migration() *migrate.MemoryMigrationSource {
`DROP TABLE IF EXISTS pat_scopes;`,
},
},
{
Id: "auth_6",
Up: []string{
`ALTER TABLE keys ALTER COLUMN issued_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE keys ALTER COLUMN expires_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE pats ALTER COLUMN issued_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE pats ALTER COLUMN expires_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE pats ALTER COLUMN updated_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE pats ALTER COLUMN revoked_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE pats ALTER COLUMN last_used_at TYPE TIMESTAMPTZ;`,
},
Down: []string{
`ALTER TABLE keys ALTER COLUMN issued_at TYPE TIMESTAMP;`,
`ALTER TABLE keys ALTER COLUMN expires_at TYPE TIMESTAMP;`,
`ALTER TABLE pats ALTER COLUMN issued_at TYPE TIMESTAMP;`,
`ALTER TABLE pats ALTER COLUMN expires_at TYPE TIMESTAMP;`,
`ALTER TABLE pats ALTER COLUMN updated_at TYPE TIMESTAMP;`,
`ALTER TABLE pats ALTER COLUMN revoked_at TYPE TIMESTAMP;`,
`ALTER TABLE pats ALTER COLUMN last_used_at TYPE TIMESTAMP;`,
},
},
},
}
}
+2 -2
View File
@@ -1218,7 +1218,7 @@ func toChannel(ch dbChannel) (channels.Channel, error) {
}
var updatedAt time.Time
if ch.UpdatedAt.Valid {
updatedAt = ch.UpdatedAt.Time
updatedAt = ch.UpdatedAt.Time.UTC()
}
connTypes := []connections.ConnType{}
@@ -1246,7 +1246,7 @@ func toChannel(ch dbChannel) (channels.Channel, error) {
ParentGroup: toString(ch.ParentGroup),
Metadata: metadata,
CreatedBy: createdBy,
CreatedAt: ch.CreatedAt,
CreatedAt: ch.CreatedAt.UTC(),
UpdatedAt: updatedAt,
UpdatedBy: updatedBy,
Status: ch.Status,
+11
View File
@@ -73,6 +73,17 @@ func Migration() (*migrate.MemoryMigrationSource, error) {
`ALTER TABLE channels DROP COLUMN route;`,
},
},
{
Id: "channels_04",
Up: []string{
`ALTER TABLE channels ALTER COLUMN created_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE channels ALTER COLUMN updated_at TYPE TIMESTAMPTZ;`,
},
Down: []string{
`ALTER TABLE channels ALTER COLUMN created_at TYPE TIMESTAMP;`,
`ALTER TABLE channels ALTER COLUMN updated_at TYPE TIMESTAMP;`,
},
},
},
}
channelsMigration.Migrations = append(channelsMigration.Migrations, rolesMigration.Migrations...)
+2 -2
View File
@@ -1093,7 +1093,7 @@ func ToClient(t DBClient) (clients.Client, error) {
var updatedAt time.Time
if t.UpdatedAt.Valid {
updatedAt = t.UpdatedAt.Time
updatedAt = t.UpdatedAt.Time.UTC()
}
var connTypes []connections.ConnType
@@ -1123,7 +1123,7 @@ func ToClient(t DBClient) (clients.Client, error) {
Secret: t.Secret,
},
Metadata: metadata,
CreatedAt: t.CreatedAt,
CreatedAt: t.CreatedAt.UTC(),
UpdatedAt: updatedAt,
UpdatedBy: updatedBy,
Status: t.Status,
+11
View File
@@ -65,6 +65,17 @@ func Migration() (*migrate.MemoryMigrationSource, error) {
`ALTER TABLE clients ADD CONSTRAINT clients_domain_id_name_key UNIQUE (domain_id, name)`,
},
},
{
Id: "clients_03",
Up: []string{
`ALTER TABLE clients ALTER COLUMN created_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE clients ALTER COLUMN updated_at TYPE TIMESTAMPTZ;`,
},
Down: []string{
`ALTER TABLE clients ALTER COLUMN created_at TYPE TIMESTAMP;`,
`ALTER TABLE clients ALTER COLUMN updated_at TYPE TIMESTAMP;`,
},
},
},
}
+2 -2
View File
@@ -612,7 +612,7 @@ func toDomain(d dbDomain) (domains.Domain, error) {
}
var updatedAt time.Time
if d.UpdatedAt.Valid {
updatedAt = d.UpdatedAt.Time
updatedAt = d.UpdatedAt.Time.UTC()
}
var mra []roles.MemberRoleActions
@@ -633,7 +633,7 @@ func toDomain(d dbDomain) (domains.Domain, error) {
Actions: d.Actions,
Status: d.Status,
CreatedBy: d.CreatedBy,
CreatedAt: d.CreatedAt,
CreatedAt: d.CreatedAt.UTC(),
UpdatedBy: updatedBy,
UpdatedAt: updatedAt,
MemberID: d.MemberID,
+19
View File
@@ -70,6 +70,25 @@ func Migration() (*migrate.MemoryMigrationSource, error) {
`ALTER TABLE domains RENAME COLUMN route TO alias;`,
},
},
{
Id: "domain_4",
Up: []string{
`ALTER TABLE domains ALTER COLUMN created_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE domains ALTER COLUMN updated_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE invitations ALTER COLUMN created_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE invitations ALTER COLUMN updated_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE invitations ALTER COLUMN confirmed_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE invitations ALTER COLUMN rejected_at TYPE TIMESTAMPTZ;`,
},
Down: []string{
`ALTER TABLE domains ALTER COLUMN created_at TYPE TIMESTAMP;`,
`ALTER TABLE domains ALTER COLUMN updated_at TYPE TIMESTAMP;`,
`ALTER TABLE invitations ALTER COLUMN created_at TYPE TIMESTAMP;`,
`ALTER TABLE invitations ALTER COLUMN updated_at TYPE TIMESTAMP;`,
`ALTER TABLE invitations ALTER COLUMN confirmed_at TYPE TIMESTAMP;`,
`ALTER TABLE invitations ALTER COLUMN rejected_at TYPE TIMESTAMP;`,
},
},
},
}
+3 -3
View File
@@ -243,10 +243,10 @@ func toInvitation(dbinv dbInvitation) domains.Invitation {
updatedAt = dbinv.UpdatedAt.Time
}
if dbinv.ConfirmedAt.Valid {
confirmedAt = dbinv.ConfirmedAt.Time
confirmedAt = dbinv.ConfirmedAt.Time.UTC()
}
if dbinv.RejectedAt.Valid {
rejectedAt = dbinv.RejectedAt.Time
rejectedAt = dbinv.RejectedAt.Time.UTC()
}
return domains.Invitation{
@@ -256,7 +256,7 @@ func toInvitation(dbinv dbInvitation) domains.Invitation {
DomainName: toString(dbinv.DomainName),
RoleID: dbinv.RoleID,
RoleName: toString(dbinv.RoleName),
CreatedAt: dbinv.CreatedAt,
CreatedAt: dbinv.CreatedAt.UTC(),
UpdatedAt: updatedAt,
ConfirmedAt: confirmedAt,
RejectedAt: rejectedAt,
+2 -2
View File
@@ -1243,7 +1243,7 @@ func toGroup(g dbGroup) (groups.Group, error) {
}
var updatedAt time.Time
if g.UpdatedAt.Valid {
updatedAt = g.UpdatedAt.Time
updatedAt = g.UpdatedAt.Time.UTC()
}
var updatedBy string
if g.UpdatedBy != nil {
@@ -1269,7 +1269,7 @@ func toGroup(g dbGroup) (groups.Group, error) {
Path: g.Path,
UpdatedAt: updatedAt,
UpdatedBy: updatedBy,
CreatedAt: g.CreatedAt,
CreatedAt: g.CreatedAt.UTC(),
Status: g.Status,
RoleID: g.RoleID,
RoleName: g.RoleName,
+11
View File
@@ -73,6 +73,17 @@ func Migration() (*migrate.MemoryMigrationSource, error) {
`ALTER TABLE groups DROP COLUMN tags`,
},
},
{
Id: "groups_05",
Up: []string{
`ALTER TABLE groups ALTER COLUMN created_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE groups ALTER COLUMN updated_at TYPE TIMESTAMPTZ;`,
},
Down: []string{
`ALTER TABLE groups ALTER COLUMN created_at TYPE TIMESTAMP;`,
`ALTER TABLE groups ALTER COLUMN updated_at TYPE TIMESTAMP;`,
},
},
},
}
+13
View File
@@ -50,6 +50,19 @@ func Migration() *migrate.MemoryMigrationSource {
`DROP TABLE IF EXISTS journal`,
},
},
{
Id: "journal_02",
Up: []string{
`ALTER TABLE journal ALTER COLUMN occurred_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE clients_telemetry ALTER COLUMN first_seen TYPE TIMESTAMPTZ;`,
`ALTER TABLE clients_telemetry ALTER COLUMN last_seen TYPE TIMESTAMPTZ;`,
},
Down: []string{
`ALTER TABLE journal ALTER COLUMN occurred_at TYPE TIMESTAMP;`,
`ALTER TABLE clients_telemetry ALTER COLUMN first_seen TYPE TIMESTAMP;`,
`ALTER TABLE clients_telemetry ALTER COLUMN last_seen TYPE TIMESTAMP;`,
},
},
},
}
}
+1 -1
View File
@@ -185,7 +185,7 @@ func toJournal(dbj dbJournal) (journal.Journal, error) {
return journal.Journal{
Operation: dbj.Operation,
Domain: dbj.Domain,
OccurredAt: dbj.OccurredAt,
OccurredAt: dbj.OccurredAt.UTC(),
Attributes: attributes,
Metadata: metadata,
}, nil
+11
View File
@@ -55,6 +55,17 @@ func Migration(rolesTableNamePrefix, entityTableName, entityIDColumnName string)
fmt.Sprintf(`DROP TABLE IF EXISTS %s_role_members`, rolesTableNamePrefix),
},
},
{
Id: fmt.Sprintf("%s_roles_2", rolesTableNamePrefix),
Up: []string{
fmt.Sprintf(`ALTER TABLE %s_roles ALTER COLUMN created_at TYPE TIMESTAMPTZ;`, rolesTableNamePrefix),
fmt.Sprintf(`ALTER TABLE %s_roles ALTER COLUMN updated_at TYPE TIMESTAMPTZ;`, rolesTableNamePrefix),
},
Down: []string{
fmt.Sprintf(`ALTER TABLE %s_roles ALTER COLUMN created_at TYPE TIMESTAMP;`, rolesTableNamePrefix),
fmt.Sprintf(`ALTER TABLE %s_roles ALTER COLUMN updated_at TYPE TIMESTAMP;`, rolesTableNamePrefix),
},
},
},
}, nil
}
+2 -2
View File
@@ -161,7 +161,7 @@ func toRole(r dbRole) roles.Role {
}
var createdAt time.Time
if r.CreatedAt.Valid {
createdAt = r.CreatedAt.Time
createdAt = r.CreatedAt.Time.UTC()
}
var updatedBy string
@@ -170,7 +170,7 @@ func toRole(r dbRole) roles.Role {
}
var updatedAt time.Time
if r.UpdatedAt.Valid {
updatedAt = r.UpdatedAt.Time
updatedAt = r.UpdatedAt.Time.UTC()
}
return roles.Role{
+11
View File
@@ -86,6 +86,17 @@ func Migration() *migrate.MemoryMigrationSource {
`ALTER TABLE users ALTER COLUMN last_name SET DEFAULT ''`,
},
},
{
Id: "clients_06",
Up: []string{
`ALTER TABLE users ALTER COLUMN created_at TYPE TIMESTAMPTZ;`,
`ALTER TABLE users ALTER COLUMN updated_at TYPE TIMESTAMPTZ;`,
},
Down: []string{
`ALTER TABLE users ALTER COLUMN created_at TYPE TIMESTAMP;`,
`ALTER TABLE users ALTER COLUMN updated_at TYPE TIMESTAMP;`,
},
},
},
}
}
+2 -2
View File
@@ -554,7 +554,7 @@ func ToUser(dbu DBUser) (users.User, error) {
}
var updatedAt time.Time
if dbu.UpdatedAt.Valid {
updatedAt = dbu.UpdatedAt.Time
updatedAt = dbu.UpdatedAt.Time.UTC()
}
user := users.User{
@@ -567,7 +567,7 @@ func ToUser(dbu DBUser) (users.User, error) {
},
Email: dbu.Email,
Metadata: metadata,
CreatedAt: dbu.CreatedAt,
CreatedAt: dbu.CreatedAt.UTC(),
UpdatedAt: updatedAt,
UpdatedBy: updatedBy,
Status: dbu.Status,