From 8c04a222bae7d88031eb1d0ad4544428bf6e9909 Mon Sep 17 00:00:00 2001 From: mirza Date: Mon, 21 Apr 2025 13:58:28 +0700 Subject: [PATCH] udpate insert patient --- internal/server/server.go | 2 + pkg/database/mongo/patient.go | 10 +- pkg/handlers/patient/patient.go | 14 ++- pkg/models/patient/patient.go | 172 ++++++++++++++++++++++++++++++-- 4 files changed, 176 insertions(+), 22 deletions(-) diff --git a/internal/server/server.go b/internal/server/server.go index 6aa08f0..59db82b 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -2,6 +2,7 @@ package server import ( "fmt" + "log" "net/http" "os" "strconv" @@ -20,6 +21,7 @@ type Server struct { func NewServer() *http.Server { port, _ := strconv.Atoi(os.Getenv("PORT")) + log.Println("PORT: ", port) master := os.Getenv("BLUEPRINT_DB_MASTER") NewServer := &Server{ port: port, diff --git a/pkg/database/mongo/patient.go b/pkg/database/mongo/patient.go index ab0702a..1c7b36c 100644 --- a/pkg/database/mongo/patient.go +++ b/pkg/database/mongo/patient.go @@ -11,15 +11,7 @@ import ( func (s *DatabaseService) InsertPatient(req *patient.Patient) error { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - _, err := s.DB.Collection("patient").InsertOne(ctx, patient.Patient{ - ID: req.ID, - NoRM: req.NoRM, - Name: req.Name, - Telecom: req.Telecom, - Gender: req.Gender, - BirthDate: req.BirthDate, - Address: req.Address, - }) + _, err := s.DB.Collection("patient").InsertOne(ctx, req) if err != nil { log.Println(err) return err diff --git a/pkg/handlers/patient/patient.go b/pkg/handlers/patient/patient.go index b166396..172bede 100644 --- a/pkg/handlers/patient/patient.go +++ b/pkg/handlers/patient/patient.go @@ -2,12 +2,12 @@ package patient import ( "github.com/gin-gonic/gin" - "github.com/google/uuid" "net/http" "os" "template_blueprint/internal/database" "template_blueprint/pkg/database/mongo" "template_blueprint/pkg/models/patient" + "time" ) func InsertPatient(c *gin.Context) { @@ -18,14 +18,18 @@ func InsertPatient(c *gin.Context) { return } mongoDB := mongo.NewDatabaseService(db) - var reqInsert *patient.Patient - err := c.Bind(&reqInsert) + var req *patient.Patient + err := c.Bind(&req) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) return } - reqInsert.ID = uuid.New().String() - errInsert := mongoDB.InsertPatient(reqInsert) + + dateCreated := time.Now().Format("2006-01-02 15:04:05") + req.ResourceType = "Patient" + req.CreatedAt = dateCreated + + errInsert := mongoDB.InsertPatient(req) if errInsert != nil { c.JSON(http.StatusInternalServerError, gin.H{"message": errInsert.Error()}) return diff --git a/pkg/models/patient/patient.go b/pkg/models/patient/patient.go index d6ad546..fe81d03 100644 --- a/pkg/models/patient/patient.go +++ b/pkg/models/patient/patient.go @@ -1,11 +1,167 @@ package patient -type Patient struct { - ID string `bson:"_id"` - NoRM string `bson:"norm"` - Name string `bson:"name"` - Telecom string `bson:"telecom"` - Gender string `bson:"gender"` - BirthDate string `bson:"birthDate"` - Address string `bson:"address"` +type Coding struct { + System string `bson:"system,omitempty"` + Version string `bson:"version,omitempty"` + Code string `bson:"code,omitempty"` + Display string `bson:"display,omitempty"` + UserSelected bool `bson:"userSelected,omitempty"` +} + +type Identifier struct { + Use string `bson:"use,omitempty"` + Type CodeableConcept `bson:"type,omitempty"` + System string `bson:"system,omitempty"` + Value string `bson:"value,omitempty"` + Period Period `bson:"period,omitempty"` + Assigner struct{} `bson:"assigner,omitempty"` +} + +type CodeableConcept struct { + Coding []Coding `bson:"coding,omitempty"` + Text string `bson:"text,omitempty"` +} + +type Period struct { + Start string `bson:"start,omitempty"` + End string `bson:"end,omitempty"` +} + +type ContactPoint struct { + System string `bson:"system,omitempty"` + Value string `bson:"value,omitempty"` + Use string `bson:"use,omitempty"` + Rank int `bson:"rank,omitempty"` + Period Period `bson:"period,omitempty"` +} + +type HumanName struct { + Use string `bson:"use,omitempty"` + Text string `bson:"text,omitempty"` + Family string `bson:"family,omitempty"` + Given []string `bson:"given,omitempty"` + Prefix []string `bson:"prefix,omitempty"` + Suffix []string `bson:"suffix,omitempty"` + Period Period `bson:"period,omitempty"` +} + +type Address struct { + Use string `bson:"use,omitempty"` + Type string `bson:"type,omitempty"` + Text string `bson:"text,omitempty"` + Line []string `bson:"line,omitempty"` + City string `bson:"city,omitempty"` + District string `bson:"district,omitempty"` + State string `bson:"state,omitempty"` + PostalCode string `bson:"postalCode,omitempty"` + Country string `bson:"country,omitempty"` + Period Period `bson:"period,omitempty"` +} + +type Organization struct { + Reference string `bson:"reference,omitempty"` +} + +type Contact struct { + Relationship []CodeableConcept `bson:"relationship,omitempty"` + Name []HumanName `bson:"name,omitempty"` + Telecom []ContactPoint `bson:"telecom,omitempty"` + Address Address `bson:"address,omitempty"` + Organization Organization `bson:"organization,omitempty"` + Gender string `bson:"gender,omitempty"` + Period Period `bson:"period,omitempty"` +} + +type Communication struct { + Language CodeableConcept `bson:"language,omitempty"` + Preferred bool `bson:"preferred,omitempty"` +} + +type ReqInsertCommunication struct { + Language Coding `bson:"language,omitempty"` + Preferred bool `bson:"preferred,omitempty"` +} + +type Link struct { + RelatePerson []RelatePerson `bson:"relatePerson,omitempty"` +} + +type RelatePerson struct { + Identifier []Identifier `bson:"identifier,omitempty"` + Active bool `bson:"active"` + Patient string `bson:"patient"` + Relationship CodeableConcept `bson:"relationship"` + Name []HumanName `bson:"name,omitempty"` + Telecom []ContactPoint `bson:"telecom,omitempty"` + Gender string `bson:"gender,omitempty"` + BirthDate string `bson:"birthDate,omitempty"` + Address []Address `bson:"address,omitempty"` + Photo string `bson:"photo,omitempty"` + Period Period `bson:"period,omitempty"` + Communication []Communication `bson:"communication,omitempty"` + Preferred bool `bson:"preferred"` +} + +type Deceased struct { + DeceasedBoolean bool `bson:"deceasedBoolean,omitempty"` + DeceasedDateTime string `bson:"deceasedDateTime,omitempty"` +} + +type MultipleBirth struct { + MultipleBirthBoolean bool `bson:"multipleBirthBoolean,omitempty"` + MultipleBirthInteger int `bson:"multipleBirthInteger,omitempty"` +} + +type Patient struct { + ResourceType string `bson:"resourceType"` + ID string `bson:"_id"` + Identifier []Identifier `bson:"identifier,omitempty"` + Active bool `bson:"active"` + Name []HumanName `bson:"name,omitempty"` + Telecom []ContactPoint `bson:"telecom,omitempty"` + Gender string `bson:"gender,omitempty"` + BirthPlace string `bson:"birthPlace,omitempty"` + BirthDate string `bson:"birthDate,omitempty"` + Address []Address `bson:"address,omitempty"` + MaritalStatus CodeableConcept `bson:"maritalStatus,omitempty"` + Job CodeableConcept `bson:"job,omitempty"` + Religion CodeableConcept `bson:"religion,omitempty"` + Tribe CodeableConcept `bson:"tribe,omitempty"` + Link Link `bson:"link,omitempty"` + Communication []Communication `bson:"communication,omitempty"` + Disability bool `bson:"disability,omitempty"` + National string `bson:"national,omitempty"` + Deceased Deceased `bson:"deceased,omitempty"` + MultipleBirth MultipleBirth `bson:"multipleBirth,omitempty"` + CreatedAt string `bson:"createdAt"` + UpdatedAt string `bson:"updatedAt"` +} + +type ReqInsertIdentifier struct { + Use string `bson:"use,omitempty"` + Type Coding `bson:"type,omitempty"` + System string `bson:"system,omitempty"` + Value string `bson:"value,omitempty"` + Period Period `bson:"period,omitempty"` +} + +type ReqInsertPatient struct { + Identifier []ReqInsertIdentifier `bson:"identifier,omitempty"` + Active bool `bson:"active"` + Name []HumanName `bson:"name,omitempty"` + Telecom []ContactPoint `bson:"telecom,omitempty"` + Gender string `bson:"gender,omitempty"` + BirthPlace string `bson:"birthPlace,omitempty"` + BirthDate string `bson:"birthDate,omitempty"` + Address []Address `bson:"address,omitempty"` + MaritalStatus []CodeableConcept `bson:"maritalStatus,omitempty"` + Job []CodeableConcept `bson:"job,omitempty"` + Religion []CodeableConcept `bson:"religion,omitempty"` + Tribe []CodeableConcept `bson:"tribe,omitempty"` + Link Link `bson:"link,omitempty"` + Communication []Communication `bson:"communication,omitempty"` + Disability bool `bson:"disability,omitempty"` + National string `bson:"national,omitempty"` + Deceased Deceased `bson:"deceased,omitempty"` + MultipleBirth MultipleBirth `bson:"multipleBirth,omitempty"` }