Skip to content

Commit ac16028

Browse files
authored
remove indexes from code, put them into migrations for one source of truth (#2378)
1 parent 30e3153 commit ac16028

File tree

6 files changed

+45
-84
lines changed

6 files changed

+45
-84
lines changed

taco/internal/query/common/org_indexes.go

Lines changed: 0 additions & 74 deletions
This file was deleted.

taco/internal/query/common/sql_store.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ type SQLStore struct {
2828
func NewSQLStore(db *gorm.DB) (*SQLStore, error) {
2929
store := &SQLStore{db: db}
3030

31-
// Create org-scoped indexes (not handled by Atlas migrations)
32-
if err := CreateOrgScopedIndexes(db); err != nil {
33-
return nil, fmt.Errorf("failed to create org-scoped indexes: %w", err)
34-
}
31+
// All org-scoped unique indexes are now managed by Atlas migrations:
32+
// - migrations/*/20251031000000_add_unique_unit_name_per_org.sql
33+
// - migrations/*/20251031000001_add_unique_org_constraints.sql
3534

3635
// Create database views (not handled by Atlas migrations)
3736
if err := store.createViews(); err != nil {

taco/internal/query/types/models.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import (
88

99
type Role struct {
1010
ID string `gorm:"type:varchar(36);primaryKey"`
11-
OrgID string `gorm:"type:varchar(36);index"` // Foreign key to organizations.id (UUID)
12-
Name string `gorm:"type:varchar(255);not null;index"` // Unique identifier (e.g., "admin", "viewer")
11+
OrgID string `gorm:"type:varchar(36);index;uniqueIndex:unique_org_role_name"` // Foreign key to organizations.id (UUID)
12+
Name string `gorm:"type:varchar(255);not null;index;uniqueIndex:unique_org_role_name"` // Unique identifier per org (e.g., "admin", "viewer")
1313
Description string
1414
Permissions []Permission `gorm:"many2many:role_permissions;constraint:OnDelete:CASCADE,OnUpdate:CASCADE"`
1515
CreatedAt time.Time
@@ -27,8 +27,8 @@ func (Role) TableName() string { return "roles" }
2727

2828
type Permission struct {
2929
ID string `gorm:"type:varchar(36);primaryKey"`
30-
OrgID string `gorm:"type:varchar(36);index"` // Foreign key to organizations.id (UUID)
31-
Name string `gorm:"type:varchar(255);not null;index"` // Unique identifier (e.g., "unit-read", "unit-write")
30+
OrgID string `gorm:"type:varchar(36);index;uniqueIndex:unique_org_permission_name"` // Foreign key to organizations.id (UUID)
31+
Name string `gorm:"type:varchar(255);not null;index;uniqueIndex:unique_org_permission_name"` // Unique identifier per org (e.g., "unit-read", "unit-write")
3232
Description string
3333
Rules []Rule `gorm:"constraint:OnDelete:CASCADE"`
3434
CreatedBy string
@@ -163,8 +163,8 @@ func (Unit) TableName() string { return "units" }
163163

164164
type Tag struct {
165165
ID string `gorm:"type:varchar(36);primaryKey"`
166-
OrgID string `gorm:"type:varchar(36);index"` // Foreign key to organizations.id (UUID)
167-
Name string `gorm:"type:varchar(255);not null;index"`
166+
OrgID string `gorm:"type:varchar(36);index;uniqueIndex:unique_org_tag_name"` // Foreign key to organizations.id (UUID)
167+
Name string `gorm:"type:varchar(255);not null;index;uniqueIndex:unique_org_tag_name"` // Unique per org
168168
}
169169

170170
func (t *Tag) BeforeCreate(tx *gorm.DB) error {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
-- Add unique constraints on (org_id, name) for roles, permissions, and tags tables
2+
-- This ensures names are unique within each organization
3+
4+
-- Create unique index on roles (org_id, name)
5+
CREATE UNIQUE INDEX `unique_org_role_name` ON `roles` (`org_id`, `name`);
6+
7+
-- Create unique index on permissions (org_id, name)
8+
CREATE UNIQUE INDEX `unique_org_permission_name` ON `permissions` (`org_id`, `name`);
9+
10+
-- Create unique index on tags (org_id, name)
11+
CREATE UNIQUE INDEX `unique_org_tag_name` ON `tags` (`org_id`, `name`);
12+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
-- Add unique constraints on (org_id, name) for roles, permissions, and tags tables
2+
-- This ensures names are unique within each organization
3+
4+
-- Create unique index on roles (org_id, name)
5+
CREATE UNIQUE INDEX "unique_org_role_name" ON "public"."roles" ("org_id", "name");
6+
7+
-- Create unique index on permissions (org_id, name)
8+
CREATE UNIQUE INDEX "unique_org_permission_name" ON "public"."permissions" ("org_id", "name");
9+
10+
-- Create unique index on tags (org_id, name)
11+
CREATE UNIQUE INDEX "unique_org_tag_name" ON "public"."tags" ("org_id", "name");
12+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
-- Add unique constraints on (org_id, name) for roles, permissions, and tags tables
2+
-- This ensures names are unique within each organization
3+
4+
-- Create unique index on roles (org_id, name)
5+
CREATE UNIQUE INDEX `unique_org_role_name` ON `roles` (`org_id`, `name`);
6+
7+
-- Create unique index on permissions (org_id, name)
8+
CREATE UNIQUE INDEX `unique_org_permission_name` ON `permissions` (`org_id`, `name`);
9+
10+
-- Create unique index on tags (org_id, name)
11+
CREATE UNIQUE INDEX `unique_org_tag_name` ON `tags` (`org_id`, `name`);
12+

0 commit comments

Comments
 (0)