removes ids on doctor,nurse,specialist-intern

This commit is contained in:
dpurbosakti
2025-11-06 12:08:36 +07:00
parent 444fc5ce28
commit a2015a5c7e
9 changed files with 55 additions and 49 deletions
@@ -0,0 +1,8 @@
-- Modify "Prescription" table
ALTER TABLE "public"."Prescription" ADD COLUMN "Doctor_Code" character varying(20) NULL;
-- Modify "Doctor" table
ALTER TABLE "public"."Doctor" DROP CONSTRAINT "fk_Doctor_Specialist", DROP CONSTRAINT "fk_Doctor_Subspecialist", DROP CONSTRAINT "fk_Doctor_Unit", DROP COLUMN "Unit_Id", DROP COLUMN "Specialist_Id", DROP COLUMN "Subspecialist_Id", ADD CONSTRAINT "fk_Doctor_Specialist" FOREIGN KEY ("Specialist_Code") REFERENCES "public"."Specialist" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION, ADD CONSTRAINT "fk_Doctor_Subspecialist" FOREIGN KEY ("Subspecialist_Code") REFERENCES "public"."Subspecialist" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION, ADD CONSTRAINT "fk_Doctor_Unit" FOREIGN KEY ("Unit_Code") REFERENCES "public"."Unit" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION;
-- Modify "Nurse" table
ALTER TABLE "public"."Nurse" DROP CONSTRAINT "fk_Nurse_Infra", DROP CONSTRAINT "fk_Nurse_Unit", DROP COLUMN "Unit_Id", DROP COLUMN "Infra_Id", ADD CONSTRAINT "fk_Nurse_Infra" FOREIGN KEY ("Infra_Code") REFERENCES "public"."Infra" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION, ADD CONSTRAINT "fk_Nurse_Unit" FOREIGN KEY ("Unit_Code") REFERENCES "public"."Unit" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION;
-- Modify "SpecialistIntern" table
ALTER TABLE "public"."SpecialistIntern" DROP CONSTRAINT "fk_SpecialistIntern_Specialist", DROP CONSTRAINT "fk_SpecialistIntern_Subspecialist", DROP COLUMN "Specialist_Id", DROP COLUMN "Subspecialist_Id", ADD CONSTRAINT "fk_SpecialistIntern_Specialist" FOREIGN KEY ("Specialist_Code") REFERENCES "public"."Specialist" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION, ADD CONSTRAINT "fk_SpecialistIntern_Subspecialist" FOREIGN KEY ("Subspecialist_Code") REFERENCES "public"."Subspecialist" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION;
+3 -2
View File
@@ -1,4 +1,4 @@
h1:Ke31uEMAxNobMdza6/1rFlWnbE7Z1dHVAAfRi+oXi4E= h1:97IUzyfSecffgKmYYs+a+HW5thHnIY3OuWDTQYy3hGQ=
20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k=
20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0=
20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI=
@@ -74,4 +74,5 @@ h1:Ke31uEMAxNobMdza6/1rFlWnbE7Z1dHVAAfRi+oXi4E=
20251106035305.sql h1:oQ7BwnxPuwY2q98adIVc+lNwL/Sz1OceLJeClDo9/TI= 20251106035305.sql h1:oQ7BwnxPuwY2q98adIVc+lNwL/Sz1OceLJeClDo9/TI=
20251106040137.sql h1:ppcqkVoT0o9jZcjI/TN7LuaPxXhJQhnIXEJtloP/46o= 20251106040137.sql h1:ppcqkVoT0o9jZcjI/TN7LuaPxXhJQhnIXEJtloP/46o=
20251106041333.sql h1:2JkxyelQ/EeB+boL5bfpnzefw32ttEGKvKchtQjWmAU= 20251106041333.sql h1:2JkxyelQ/EeB+boL5bfpnzefw32ttEGKvKchtQjWmAU=
20251106042006.sql h1:sVi3ilQnUapkKBzNi/z495eK4ivCF9ssU/D3oEldokM= 20251106042006.sql h1:ruppYa1kAJQUU3ufQBbKGMcXrGbGJJiRPclT+dNc/YQ=
20251106050412.sql h1:MiEMJ1HCFYnalKuq3Z38xJeogfBAMqsTv2sG4EF8dDw=
+11 -15
View File
@@ -10,21 +10,17 @@ import (
) )
type Doctor struct { type Doctor struct {
ecore.Main // adjust this according to the needs ecore.Main // adjust this according to the needs
Code *string `json:"code" gorm:"unique;size:20"` Code *string `json:"code" gorm:"unique;size:20"`
Employee_Id *uint `json:"employee_id"` Employee_Id *uint `json:"employee_id"`
Employee *ee.Employee `json:"employee,omitempty" gorm:"foreignKey:Employee_Id;references:Id"` Employee *ee.Employee `json:"employee,omitempty" gorm:"foreignKey:Employee_Id;references:Id"`
IHS_Number *string `json:"ihs_number" gorm:"unique;size:20"` IHS_Number *string `json:"ihs_number" gorm:"unique;size:20"`
SIP_Number *string `json:"sip_number" gorm:"unique;size:20"` SIP_Number *string `json:"sip_number" gorm:"unique;size:20"`
SIP_ExpiredDate *time.Time `json:"sip_expiredDate"` SIP_ExpiredDate *time.Time `json:"sip_expiredDate"`
Unit_Id *uint16 `json:"unit_id"` Unit_Code *string `json:"unit_code" gorm:"size:10"`
Unit_Code *string `json:"unit_code" gorm:"size:10"` Unit *eu.Unit `json:"unit,omitempty" gorm:"foreignKey:Unit_Code;references:Code"`
Unit *eu.Unit `json:"unit,omitempty" gorm:"foreignKey:Unit_Id;references:Id"`
// Unit *eu.Unit `json:"unit,omitempty" gorm:"foreignKey:Unit_Code;references:Code"`
Specialist_Id *uint16 `json:"specialist_id"`
Specialist_Code *string `json:"specialist_code" gorm:"size:10"` Specialist_Code *string `json:"specialist_code" gorm:"size:10"`
Specialist *es.Specialist `json:"specialist,omitempty" gorm:"foreignKey:Specialist_Id"` Specialist *es.Specialist `json:"specialist,omitempty" gorm:"foreignKey:Specialist_Code;references:Code"`
Subspecialist_Id *uint16 `json:"subspecialist_id"`
Subspecialist_Code *string `json:"subspecialist_code" gorm:"size:10"` Subspecialist_Code *string `json:"subspecialist_code" gorm:"size:10"`
Subspecialist *ess.Subspecialist `json:"subspecialist,omitempty" gorm:"foreignKey:Subspecialist_Id"` Subspecialist *ess.Subspecialist `json:"subspecialist,omitempty" gorm:"foreignKey:Subspecialist_Code;references:Code"`
} }
@@ -15,6 +15,7 @@ type Prescription struct {
Encounter_Id *uint `json:"encounter_id"` Encounter_Id *uint `json:"encounter_id"`
Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"` Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
Doctor_Id *uint `json:"doctor_id"` Doctor_Id *uint `json:"doctor_id"`
Doctor_Code *string `json:"doctor_code" gorm:"size:20"`
Doctor *ed.Doctor `json:"doctor,omitempty" gorm:"foreignKey:Doctor_Id;references:Id"` Doctor *ed.Doctor `json:"doctor,omitempty" gorm:"foreignKey:Doctor_Id;references:Id"`
IssuedAt *time.Time `json:"issuedAt"` IssuedAt *time.Time `json:"issuedAt"`
Status_Code erc.DataStatusCode `json:"status_code"` Status_Code erc.DataStatusCode `json:"status_code"`
@@ -12,12 +12,10 @@ type SpecialistIntern struct {
ecore.Main // adjust this according to the needs ecore.Main // adjust this according to the needs
Person_Id *uint `json:"person_id"` Person_Id *uint `json:"person_id"`
Person *ep.Person `json:"person,omitempty" gorm:"foreignKey:Person_Id"` Person *ep.Person `json:"person,omitempty" gorm:"foreignKey:Person_Id"`
Specialist_Id *uint16 `json:"specialist_id"`
Specialist_Code *string `json:"specialist_code" gorm:"size:10"` Specialist_Code *string `json:"specialist_code" gorm:"size:10"`
Specialist *es.Specialist `json:"specialist,omitempty" gorm:"foreignKey:Specialist_Id"` Specialist *es.Specialist `json:"specialist,omitempty" gorm:"foreignKey:Specialist_Code;references:Code"`
Subspecialist_Id *uint16 `json:"subspecialist_id"`
Subspecialist_Code *string `json:"subspecialist_code" gorm:"size:10"` Subspecialist_Code *string `json:"subspecialist_code" gorm:"size:10"`
Subspecialist *ess.Subspecialist `json:"subspecialist,omitempty" gorm:"foreignKey:Subspecialist_Id"` Subspecialist *ess.Subspecialist `json:"subspecialist,omitempty" gorm:"foreignKey:Subspecialist_Code;references:Code"`
User_Id *uint `json:"user_id"` User_Id *uint `json:"user_id"`
User *eu.User `json:"user,omitempty" gorm:"foreignKey:User_Id"` User *eu.User `json:"user,omitempty" gorm:"foreignKey:User_Id"`
} }
+6 -6
View File
@@ -14,12 +14,12 @@ type AuthInfo struct {
User_ContractPosition_code string User_ContractPosition_code string
Employee_Position_Code *string Employee_Position_Code *string
Employee_Id *uint Employee_Id *uint
Doctor_Id *uint Doctor_Code *string
Nurse_Id *uint Nurse_Code *string
Midwife_Id *uint Midwife_Code *string
Nutritionist_Id *uint Nutritionist_Code *string
Laborant_Id *uint Laborant_Code *string
Pharmachist_Id *uint Pharmachist_Code *string
Intern_Position_Code *string Intern_Position_Code *string
Roles []string Roles []string
// User_DivisionPositions []DivisionPosition // User_DivisionPositions []DivisionPosition
@@ -136,17 +136,17 @@ func GenToken(input eu.LoginDto) (*d.Data, error) {
if doctor.Id == 0 { if doctor.Id == 0 {
return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noDoctor", Message: el.GenMessage("auth-noDoctor")}} return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noDoctor", Message: el.GenMessage("auth-noDoctor")}}
} }
atClaims["doctor_id"] = doctor.Id atClaims["doctor_code"] = doctor.Code
outputData["doctor_id"] = doctor.Id outputData["doctor_code"] = doctor.Code
// specialist // specialist
if doctor.Specialist_Id != nil { if doctor.Specialist_Code != nil {
atClaims["specialist_id"] = doctor.Specialist_Id atClaims["specialist_code"] = doctor.Specialist_Code
outputData["specialist_id"] = doctor.Specialist_Id outputData["specialist_code"] = doctor.Specialist_Code
} }
if doctor.Subspecialist_Id != nil { if doctor.Subspecialist_Code != nil {
atClaims["subspecialist_id"] = doctor.Subspecialist_Id atClaims["subspecialist_code"] = doctor.Subspecialist_Code
outputData["subspecialist_id"] = doctor.Subspecialist_Id outputData["subspecialist_code"] = doctor.Subspecialist_Code
} }
case erg.EPCNur: case erg.EPCNur:
empData := en.Nurse{} empData := en.Nurse{}
@@ -154,16 +154,16 @@ func GenToken(input eu.LoginDto) (*d.Data, error) {
if empData.Id == 0 { if empData.Id == 0 {
return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noNurse", Message: el.GenMessage("auth-noNurse")}} return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noNurse", Message: el.GenMessage("auth-noNurse")}}
} }
atClaims["nurse_id"] = empData.Id atClaims["nurse_code"] = empData.Code
outputData["nurse_id"] = empData.Id outputData["nurse_code"] = empData.Code
case erg.EPCMwi: case erg.EPCMwi:
empData := em.Midwife{} empData := em.Midwife{}
dg.I.Where("\"Employee_Id\" = ?", employee.Id).First(&empData) dg.I.Where("\"Employee_Id\" = ?", employee.Id).First(&empData)
if empData.Id == 0 { if empData.Id == 0 {
return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noNurse", Message: el.GenMessage("auth-noNurse")}} return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noMidwife", Message: el.GenMessage("auth-noMidwife")}}
} }
atClaims["nurse_id"] = empData.Id atClaims["midwife_code"] = empData.Code
outputData["nurse_id"] = empData.Id outputData["midwife_code"] = empData.Code
} }
errorGetPosition := d.FieldErrors{"authentication": d.FieldError{Code: "auth-getData-failed", Message: el.GenMessage("auth-getData-failed")}} errorGetPosition := d.FieldErrors{"authentication": d.FieldError{Code: "auth-getData-failed", Message: el.GenMessage("auth-getData-failed")}}
@@ -308,12 +308,12 @@ func ExtractToken(r *http.Request, tokenType TokenType) (data *pa.AuthInfo, err
data.User_ContractPosition_code = checkStrClaims(claims, "contractPosition_code") data.User_ContractPosition_code = checkStrClaims(claims, "contractPosition_code")
data.Employee_Position_Code = checkStrPtrClaims(claims, "employee_position_code") data.Employee_Position_Code = checkStrPtrClaims(claims, "employee_position_code")
data.Doctor_Id = checkUntPtrClaims(claims, "doctor_id") data.Doctor_Code = checkStrPtrClaims(claims, "doctor_string")
data.Nurse_Id = checkUntPtrClaims(claims, "nurse_id") data.Nurse_Code = checkStrPtrClaims(claims, "nurse_string")
data.Midwife_Id = checkUntPtrClaims(claims, "midwife_id") data.Midwife_Code = checkStrPtrClaims(claims, "midwife_string")
data.Nutritionist_Id = checkUntPtrClaims(claims, "nutritionist_id") data.Nutritionist_Code = checkStrPtrClaims(claims, "nutritionist_string")
data.Laborant_Id = checkUntPtrClaims(claims, "laborant_id") data.Laborant_Code = checkStrPtrClaims(claims, "laborant_string")
data.Pharmachist_Id = checkUntPtrClaims(claims, "pharmachist_id") data.Pharmachist_Code = checkStrPtrClaims(claims, "pharmachist_string")
data.Intern_Position_Code = checkStrPtrClaims(claims, "intern_position_code") data.Intern_Position_Code = checkStrPtrClaims(claims, "intern_position_code")
data.Employee_Id = checkUntPtrClaims(claims, "employee_id") data.Employee_Id = checkUntPtrClaims(claims, "employee_id")
return return
@@ -4,10 +4,12 @@ import (
// std // std
"errors" "errors"
ere "simrs-vx/internal/domain/references/encounter" ere "simrs-vx/internal/domain/references/encounter"
// external // external
dg "github.com/karincake/apem/db-gorm-pg" dg "github.com/karincake/apem/db-gorm-pg"
gh "github.com/karincake/getuk" gh "github.com/karincake/getuk"
"gorm.io/gorm" "gorm.io/gorm"
// pkg // pkg
plh "simrs-vx/pkg/lib-helper" plh "simrs-vx/pkg/lib-helper"
pl "simrs-vx/pkg/logger" pl "simrs-vx/pkg/logger"
@@ -56,8 +58,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.En
} }
tx = tx.Model(&e.Encounter{}) tx = tx.Model(&e.Encounter{})
if input.AuthInfo.Doctor_Id != nil { if input.AuthInfo.Doctor_Code != nil {
tx.Where("\"Responsible_Doctor_Id\" = ?", *input.AuthInfo.Doctor_Id) tx.Where("\"Responsible_Doctor_Id\" = ?", *input.AuthInfo.Doctor_Code) // TODO: fix this
} }
tx.Scopes(gh.Preload(input.Includes)). tx.Scopes(gh.Preload(input.Includes)).
@@ -38,7 +38,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Prescription) {
data.Encounter_Id = inputSrc.Encounter_Id data.Encounter_Id = inputSrc.Encounter_Id
// data.Doctor_Id = inputSrc.Doctor_Id // data.Doctor_Id = inputSrc.Doctor_Id
data.Doctor_Id = inputSrc.AuthInfo.Doctor_Id data.Doctor_Code = inputSrc.AuthInfo.Doctor_Code
data.IssuedAt = inputSrc.IssuedAt data.IssuedAt = inputSrc.IssuedAt
} }