147 lines
5.6 KiB
Go
147 lines
5.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"satusehat-rssa/internal/config"
|
|
"satusehat-rssa/internal/handler"
|
|
"satusehat-rssa/internal/integration"
|
|
"satusehat-rssa/internal/midleware"
|
|
"satusehat-rssa/internal/routes"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
func main() {
|
|
var err error
|
|
|
|
// load environment
|
|
if err := godotenv.Load(); err != nil {
|
|
log.Println("No .env file found or error loading it")
|
|
}
|
|
|
|
// init gin engine
|
|
e := gin.Default()
|
|
|
|
err = e.SetTrustedProxies(nil)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// cors middleware
|
|
e.Use(func(c *gin.Context) {
|
|
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
|
c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, PATCH")
|
|
c.Writer.Header().Set("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, Authorization")
|
|
|
|
// log to ensure the middleware is being executed
|
|
c.Writer.Header().Set("Access-Control-Expose-Headers", "Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers, Content-Disposition")
|
|
if c.Request.Method == "OPTIONS" {
|
|
c.Writer.Header().Set("Access-Control-Max-Age", "86400")
|
|
c.AbortWithStatus(http.StatusOK)
|
|
return
|
|
}
|
|
|
|
c.Next()
|
|
})
|
|
|
|
// health check
|
|
e.GET("/health", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{
|
|
"message": "ok",
|
|
})
|
|
})
|
|
|
|
// route for handling 404
|
|
e.NoRoute(func(c *gin.Context) {
|
|
c.JSON(http.StatusNotFound, gin.H{"message": "Hello in API Satu Sehat Integration"})
|
|
})
|
|
|
|
//Load Akses
|
|
akses := config.LoadConfig()
|
|
authMiddleware := midleware.AuthMiddleware{}
|
|
|
|
oa := integration.NewOauthRequestRepo(akses)
|
|
at := integration.NewAllergancyToleranRepo(akses)
|
|
cp := integration.NewCarePlanRepo(akses)
|
|
qr := integration.NewQuestionnaireResponseRepo(akses)
|
|
ms := integration.NewMedicationStatementRepo(akses)
|
|
im := integration.NewImmunizationRepo(akses)
|
|
is := integration.NewImagingStudyRepo(akses)
|
|
mr := integration.NewMedicationRequestRepo(akses)
|
|
md := integration.NewMedicationDispenseRepo(akses)
|
|
gl := integration.NewGoalRepo(akses)
|
|
medic := integration.NewMedicineKfaRepo(akses)
|
|
patient := integration.NewPatientRepo(akses)
|
|
practioner := integration.NewPracticionerRepo(akses)
|
|
encounter := integration.NewEncounterRepo(akses)
|
|
clinicalImpression := integration.NewClinicalImpressionRepo(akses)
|
|
observation := integration.NewObservationRepo(akses)
|
|
organization := integration.NewOrganizationRepo(akses)
|
|
condition := integration.NewConditionRepo(akses)
|
|
dianosisReport := integration.NewDiagnosisReportRepo(akses)
|
|
serviceRequest := integration.NewServiceRequestRepository(akses)
|
|
specimen := integration.NewSpecimenRepository(akses)
|
|
episodeOfCare := integration.NewEpisodeOfCareRepo(akses)
|
|
procedure := integration.NewProcedureRepo(akses)
|
|
composition := integration.NewCompositionRepo(akses)
|
|
|
|
oahandler := handler.NewOuathHandler(oa)
|
|
athandler := handler.NewAllergancyToleranHandler(at)
|
|
cphandler := handler.NewCarePlanHandler(cp)
|
|
qrhandler := handler.NewQuestionnaireResponseHandler(qr)
|
|
mshandler := handler.NewMedicationStatementHandler(ms)
|
|
imhandler := handler.NewImmunizationHandler(im)
|
|
ishandler := handler.NewImagingStudyHandler(is)
|
|
mrhandler := handler.NewMedicationRequestHandler(mr)
|
|
mdhandler := handler.NewMedicationDispenseHandler(md)
|
|
glhandler := handler.NewGoalHandler(gl)
|
|
medicineHandler := handler.NewMedicineHandler(medic)
|
|
patientHandler := handler.NewPatientHandler(patient)
|
|
practicionerHandler := handler.NewPracticionerHandler(practioner)
|
|
encounterHandler := handler.NewEncounterHandler(encounter)
|
|
clinicalImpressionHandler := handler.NewClinicalImpressionHandler(clinicalImpression)
|
|
observationHandler := handler.NewObservationHandler(observation)
|
|
organizationHandler := handler.NewOrganizationHandler(organization)
|
|
conditionHandler := handler.NewConditionHandler(condition)
|
|
diagnosisReportHandler := handler.NewDiagnosisReportHandler(dianosisReport)
|
|
serviceRequestHandler := handler.NewServiceRequestHandler(serviceRequest)
|
|
specimenHandler := handler.NewSpecimenHandler(specimen)
|
|
episodeOfCareHandler := handler.NewEpisodeOfCareHandler(episodeOfCare)
|
|
procedureHandler := handler.NewProcedureHandler(procedure)
|
|
compositionHandler := handler.NewCompositionHandler(composition)
|
|
|
|
routes.Oauth(e, oahandler, authMiddleware)
|
|
routes.AllergancyToleran(e, athandler, authMiddleware)
|
|
routes.CarePlan(e, cphandler, authMiddleware)
|
|
routes.QuestionnaireResponse(e, qrhandler, authMiddleware)
|
|
routes.MedicationStatement(e, mshandler, authMiddleware)
|
|
routes.Immunization(e, imhandler, authMiddleware)
|
|
routes.ImagingStudy(e, ishandler, authMiddleware)
|
|
routes.MedicationRequest(e, mrhandler, authMiddleware)
|
|
routes.MedicationDispense(e, mdhandler, authMiddleware)
|
|
routes.Goal(e, glhandler, authMiddleware)
|
|
routes.MedicineKfa(e, medicineHandler, authMiddleware)
|
|
routes.Patient(e, patientHandler, authMiddleware)
|
|
routes.Practicioner(e, practicionerHandler, authMiddleware)
|
|
routes.Encounter(e, encounterHandler, authMiddleware)
|
|
routes.ClinicalImpression(e, clinicalImpressionHandler, authMiddleware)
|
|
routes.Observation(e, observationHandler, authMiddleware)
|
|
routes.Organization(e, organizationHandler, authMiddleware)
|
|
routes.Condition(e, conditionHandler, authMiddleware)
|
|
routes.DiagnosisReport(e, diagnosisReportHandler, authMiddleware)
|
|
routes.ServiceRequest(e, serviceRequestHandler, authMiddleware)
|
|
routes.Specimen(e, specimenHandler, authMiddleware)
|
|
routes.EpisodeOfCare(e, episodeOfCareHandler, authMiddleware)
|
|
routes.Procedure(e, procedureHandler, authMiddleware)
|
|
routes.Composition(e, compositionHandler, authMiddleware)
|
|
|
|
port := fmt.Sprintf(":%s", os.Getenv("HTTP_PORT"))
|
|
if err = e.Run(port); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|