From a44ba9ab1cd133c8fa1c250c68f5ad2a4272208e Mon Sep 17 00:00:00 2001 From: vanilia Date: Wed, 3 Dec 2025 14:20:28 +0700 Subject: [PATCH] add partial index for patient number --- cmd/main-migration/migrations/atlas.sum | 4 ++-- internal/domain/main-entities/patient/entity.go | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cmd/main-migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum index c949eadc..341a35d3 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:MO6ze6e6ClW/WxUyiZxT6Lmhz8BDgXmmYeLDSN4xEJw= +h1:DgMML95zGYI7JMvZaIb/gySCvncMu62CANOIXNX0A6w= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= @@ -143,4 +143,4 @@ h1:MO6ze6e6ClW/WxUyiZxT6Lmhz8BDgXmmYeLDSN4xEJw= 20251202130629.sql h1:9mvalqfhqGCdkcJepJDzHprU2xb0i5sYys1Htf62ioo= 20251202160848.sql h1:Kd2/TziKSMezrt4XgbjQcYvY/Lo9rX0qw7/Lz0/oyKk= 20251202180207.sql h1:IHmSMIO3ia+YV5GULixbdlV1joaUAWtnjQHPd8+HKiM= -20251202231005.sql h1:iVzsqbqmfncDXPPXoRqCQdcvgvLBv57TbzdbzQAmSVc= +20251202231005.sql h1:lua0KKoeBptSfs/6ehZE6Azo6YUlNkOJwGFyb1HQWkY= diff --git a/internal/domain/main-entities/patient/entity.go b/internal/domain/main-entities/patient/entity.go index 83afa6ce..9ad63ce8 100644 --- a/internal/domain/main-entities/patient/entity.go +++ b/internal/domain/main-entities/patient/entity.go @@ -15,7 +15,14 @@ type Patient struct { RegisteredAt *time.Time `json:"registeredAt"` RegisteredBy_User_Name *string `json:"registeredBy_user_name" gorm:"size:100"` Status_Code erc.ActiveStatusCode `json:"status_code" gorm:"not null;size:10"` - Number *string `json:"number" gorm:"unique;size:15"` - Parent_Number *string `json:"parent_number"` - Parent *Patient `json:"parent,omitempty" gorm:"foreignKey:Parent_Number;references:Number"` + + // Normal UNIQUE index — required for the foreign key reference + Number *string `json:"number" gorm:"size:15;unique"` + + // Partial unique index — keeps Number unique only for non–soft-deleted records. + // Allows duplicate Number values when previous records are soft-deleted. + _ struct{} `gorm:"uniqueIndex:idx_number_active,where:\"DeletedAt\" IS NULL"` + + Parent_Number *string `json:"parent_number"` + Parent *Patient `json:"parent,omitempty" gorm:"foreignKey:Parent_Number;references:Number"` }