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) } }