Files
satusehat-bridging/cmd/main.go
2025-11-24 09:13:08 +07:00

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