package repository import ( "fmt" "time" "devone.aplikasi.web.id/gitea/mario/go-ohif-proxy/internal/database" ) // DBStudy represents a study from the database type DBStudy struct { ID int `db:"id"` Study_PatientID string `db:"Study_PatientID"` Study_IUID string `db:"Study_IUID"` Study_AccessionNumber string `db:"Study_AccessionNumber"` StudyDate time.Time `db:"StudyDate"` StudyCreatedAt time.Time `db:"StudyCreatedAt"` StudyUpdatedAt time.Time `db:"StudyUpdatedAt"` } // StudyRepository handles database operations related to studies type StudyRepository struct { *Repository } // NewStudyRepository creates a new study repository func NewStudyRepository() *StudyRepository { return &StudyRepository{ Repository: NewRepository(), } } // GetPatientStudies retrieves all studies for a patient func (r *StudyRepository) GetPatientStudies(patientID string) ([]string, []string, error) { var studies []DBStudy query := `SELECT * FROM study WHERE Study_PatientID = ?` err := database.DB.Select(&studies, query, patientID) if err != nil { return nil, nil, fmt.Errorf("database error getting patient studies: %w", err) } var studyUIDs []string var accessionNumbers []string for _, study := range studies { studyUIDs = append(studyUIDs, study.Study_IUID) if study.Study_AccessionNumber != "" { accessionNumbers = append(accessionNumbers, study.Study_AccessionNumber) } } return studyUIDs, accessionNumbers, nil } // GetStudyByUID retrieves a study by its UID func (r *StudyRepository) GetStudyByUID(studyUID string) (*DBStudy, error) { var study DBStudy query := `SELECT * FROM study WHERE Study_IUID = ?` err := database.DB.Get(&study, query, studyUID) if err != nil { return nil, fmt.Errorf("database error getting study: %w", err) } return &study, nil }