first commit
This commit is contained in:
76
services/doctor/doctor.store.go
Normal file
76
services/doctor/doctor.store.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package doctor
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
"sismedika.com/sas/westone/types"
|
||||
)
|
||||
|
||||
type Store struct {
|
||||
db *sqlx.DB
|
||||
}
|
||||
|
||||
func NewStore(db *sqlx.DB) *Store {
|
||||
return &Store{db: db}
|
||||
}
|
||||
|
||||
func (s *Store) SearchDoctor(keyword string, page int, perpage int) ([]types.DoctorResult, error) {
|
||||
var list_doctor []types.DoctorResult
|
||||
var sqlFilter []string
|
||||
|
||||
if keyword != "" {
|
||||
params := strings.Split(keyword, "+")
|
||||
if len(params) > 0 && params[0] != "" {
|
||||
sqlFilter = append(sqlFilter, "PersonName LIKE '%"+params[0]+"%'")
|
||||
}
|
||||
if len(params) > 1 && params[1] != "" {
|
||||
sqlFilter = append(sqlFilter, "PersonIdentifierValue = '"+params[1]+"'")
|
||||
}
|
||||
if len(params) > 2 && params[2] != "" {
|
||||
sqlFilter = append(sqlFilter, "DoctorCode = '"+params[2]+"'")
|
||||
}
|
||||
if len(params) > 3 && params[3] != "" {
|
||||
sqlFilter = append(sqlFilter, "PersonBirthDate = '"+params[3]+"'")
|
||||
}
|
||||
if len(params) > 4 && params[4] != "" {
|
||||
sqlFilter = append(sqlFilter, "PersonTelecomValue = '"+params[4]+"'")
|
||||
}
|
||||
}
|
||||
|
||||
doctor_tb := `DoctorID, DoctorCode, DoctorIHSNumber, DoctorPersonID`
|
||||
|
||||
person_tb := `PersonID, PersonName, PersonSalutation, PersonPrefix, PersonSuffix, PersonGender, PersonBirthPlace, PersonBirthDate,
|
||||
PersonReligionCode, PersonReligionSystem, PersonBloodTypeCode, PersonBloodTypeSystem, PersonRhesusCode, PersonRhesusSystem,
|
||||
PersonEducationCode, PersonEducationSystem, PersonJobClassCode, PersonJobClassSystem, PersonEtnicityCode, PersonEtnicitySystem,
|
||||
PersonMaritalBirth, PersonMaritalStatus`
|
||||
|
||||
person_address_tb := `PersonAddressID, PersonAddressPersonID, PersonAddressIsDefault, PersonAddressUse, PersonAddressType, PersonAddressText,
|
||||
PersonAddressLine1, PersonAddressLine2, PersonAddressRegionalCd, PersonAddressRT, PersonAddressRW, PersonAddressCity,
|
||||
PersonAddressDistrict, PersonAddressState, PersonAddressCountry`
|
||||
|
||||
person_identifier_tb := `PersonIdentifierID, PersonIdentifierPersonID, PersonIdentifierUse, PersonIdentifierTypeCode,
|
||||
PersonIdentifierTypeSystem, PersonIdentifierCode, PersonIdentifierSystem, PersonIdentifierValue`
|
||||
|
||||
person_telecom_tb := `PersonTelecomID, PersonTelecomPersonID, PersonTelecomSystem, PersonTelecomValue, PersonTelecomUse`
|
||||
|
||||
offset := (page - 1) * perpage
|
||||
sql := `SELECT ` + doctor_tb + `,` + person_tb + `,` + person_identifier_tb + `,` + person_address_tb + `,` + person_telecom_tb +
|
||||
` FROM doctor
|
||||
JOIN person ON PersonID = DoctorPersonID
|
||||
JOIN person_identifier ON PersonIdentifierPersonID = PersonID
|
||||
JOIN person_telecom ON PersonTelecomPersonID = PersonID
|
||||
JOIN person_address ON PersonAddressPersonID = PersonID
|
||||
WHERE DoctorIsActive = 'Y'`
|
||||
|
||||
if len(sqlFilter) > 0 {
|
||||
sql += " AND " + strings.Join(sqlFilter, " AND ")
|
||||
}
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
|
||||
if err := s.db.Select(&list_doctor, sql, perpage, offset); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return list_doctor, nil
|
||||
}
|
||||
Reference in New Issue
Block a user