diff --git a/Dockerfile b/Dockerfile index ea82372..80df985 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,42 +1,26 @@ -FROM golang:1.23 AS builder -# Install curl dan Tailwind dependencies -RUN apt-get update && apt-get install -y curl ca-certificates +FROM golang:1.23-alpine AS builder WORKDIR /app -# Copy go.mod dan go.sum untuk dependency management COPY go.mod go.sum ./ -RUN go mod download +RUN go mod tidy -# Copy seluruh project COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main ./cmd/api - -# Install Tailwind CSS untuk generate output.css -RUN go install github.com/a-h/templ/cmd/templ@latest && \ - templ generate && \ - curl -sL https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64 -o tailwindcss && \ - chmod +x tailwindcss && \ - ./tailwindcss -i cmd/web/assets/css/input.css -o cmd/web/assets/css/output.css +# RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest # Set timezone ke Asia/Jakarta ENV TZ=Asia/Jakarta -# Install dependensi runtime yang diperlukan RUN apk --no-cache add ca-certificates tzdata WORKDIR /root/ -# Copy binary yang sudah ter-build dari stage sebelumnya COPY --from=builder /app/main . COPY --from=builder /app/.env . - -# Expose port aplikasi -EXPOSE 8803 - -# Jalankan aplikasi -CMD ["./main"] +EXPOSE 8084 +CMD ["./main"] \ No newline at end of file diff --git a/cmd/api/main.go b/cmd/api/main.go index e88d59e..ad1a7fc 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -7,9 +7,8 @@ import ( "net/http" "os/signal" "syscall" - "time" - "template_blueprint/internal/server" + "time" ) func gracefulShutdown(apiServer *http.Server, done chan bool) { diff --git a/cmd/web/hello.go b/cmd/web/hello.go index 98cd24e..efb3895 100644 --- a/cmd/web/hello.go +++ b/cmd/web/hello.go @@ -1,21 +1 @@ package web - -import ( - "log" - "net/http" -) - -func HelloWebHandler(w http.ResponseWriter, r *http.Request) { - err := r.ParseForm() - if err != nil { - http.Error(w, "Bad Request", http.StatusBadRequest) - } - - name := r.FormValue("name") - component := HelloPost(name) - err = component.Render(r.Context(), w) - if err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - log.Fatalf("Error rendering in HelloWebHandler: %e", err) - } -} diff --git a/docker-compose.yml b/docker-compose.yml index b11a95a..6545c6e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,14 +3,33 @@ services: build: context: . dockerfile: Dockerfile + container_name: api-template restart: always ports: - - 8803:8803 + - 8084:8084 + volumes: + - .:/app + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro environment: - TZ: Asia/Jakarta - MONGODB_DEV_HOST: 10.10.123.206 - MONGODB_DEV_PORT: 27017 - MONGODB_DEV_USER: admin - MONGODB_DEV_PASS: stim*rs54 - MONGODB_DEV_MASTER: master - MONGODB_DEV_LOCAL: local \ No newline at end of file + # TIMEZONE + - TZ=Asia/Jakarta + # DATABASE SIMRS V3.0 + - SIMRS_STAG_HOST=10.10.123.223 + - SIMRS_STAG_PORT=5432 + - SIMRS_STAG_NAME=simrs-stag + - SIMRS_STAG_USER=simtest + - SIMRS_STAG_PASS=12345 + # DATABASE SATU DATA + - SATUDATA_HOST=10.10.123.165 + - SATUDATA_USER=stim + - SATUDATA_PASS=stim*RS54 + - SATUDATA_NAME=satu_db + - SATUDATA_PORT=5000 + # MONGODB DEV + - MONGODB_DEV_HOST=10.10.123.206 + - MONGODB_DEV_PORT=27017 + - MONGODB_DEV_USER=admin + - MONGODB_DEV_PASS=stim*rs54 + - MONGODB_DEV_MASTER=master + - MONGODB_DEV_LOCAL=local \ No newline at end of file diff --git a/go.mod b/go.mod index d59a11d..10ea9f9 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/jackc/pgx/v5 v5.7.5 github.com/joho/godotenv v1.5.1 github.com/testcontainers/testcontainers-go/modules/mongodb v0.35.0 - go.mongodb.org/mongo-driver v1.17.3 + go.mongodb.org/mongo-driver v1.17.4 gorm.io/driver/postgres v1.6.0 gorm.io/gorm v1.30.1 ) @@ -44,14 +44,14 @@ require ( github.com/go-playground/validator/v10 v10.25.0 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.18.0 // indirect github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect @@ -91,10 +91,10 @@ require ( go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect golang.org/x/arch v0.15.0 // indirect - golang.org/x/crypto v0.37.0 // indirect - golang.org/x/net v0.37.0 // indirect + golang.org/x/crypto v0.40.0 // indirect + golang.org/x/net v0.41.0 // indirect golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.32.0 // indirect + golang.org/x/sys v0.34.0 // indirect golang.org/x/text v0.27.0 // indirect google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 6461d23..674c0e4 100644 --- a/go.sum +++ b/go.sum @@ -72,6 +72,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -101,6 +103,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= @@ -198,6 +202,8 @@ github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFi github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.mongodb.org/mongo-driver v1.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ= go.mongodb.org/mongo-driver v1.17.3/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= +go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFXVw= +go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= @@ -222,6 +228,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= +golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -233,6 +241,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -258,10 +268,13 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= +golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= diff --git a/internal/server/routes.go b/internal/server/routes.go index cfeea4f..526a794 100644 --- a/internal/server/routes.go +++ b/internal/server/routes.go @@ -31,10 +31,6 @@ func (s *Server) RegisterRoutes() http.Handler { staticFiles, _ := fs.Sub(web.Files, "assets") r.StaticFS("/assets", http.FS(staticFiles)) - r.POST("/hello", func(c *gin.Context) { - web.HelloWebHandler(c.Writer, c.Request) - }) - v1 := r.Group("/api") patient := v1.Group("/patient") { diff --git a/pkg/handlers/master_data/master_data.go b/pkg/handlers/master_data/master_data.go index da6b291..f41b673 100644 --- a/pkg/handlers/master_data/master_data.go +++ b/pkg/handlers/master_data/master_data.go @@ -19,7 +19,7 @@ func InsertDataMaster(c *gin.Context) { "code": 400, }) } - db := database.New(master).GetDB() + db := database.New(master).GetMongoDB() mongoDB := mongo.NewDatabaseService(db) ReqInsertData.ID = uuid.New().String() errInsert := mongoDB.InsertDataMaster(ReqInsertData) diff --git a/pkg/handlers/mongo/mongo.go b/pkg/handlers/mongo/mongo.go index 8c7f565..a339d57 100644 --- a/pkg/handlers/mongo/mongo.go +++ b/pkg/handlers/mongo/mongo.go @@ -15,7 +15,7 @@ import ( func GetDataLog(c *gin.Context) { locals := os.Getenv("BLUEPRINT_DB_LOCAL") - db := database.New(locals).GetDB() + db := database.New(locals).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return diff --git a/pkg/handlers/patient/patient.go b/pkg/handlers/patient/patient.go index 172bede..e36a90a 100644 --- a/pkg/handlers/patient/patient.go +++ b/pkg/handlers/patient/patient.go @@ -12,7 +12,7 @@ import ( func InsertPatient(c *gin.Context) { local := os.Getenv("MONGODB_DEV_LOCAL") - db := database.New(local).GetDB() + db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return @@ -39,7 +39,7 @@ func InsertPatient(c *gin.Context) { func GetAllPatient(c *gin.Context) { local := os.Getenv("MONGODB_DEV_LOCAL") - db := database.New(local).GetDB() + db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return diff --git a/pkg/handlers/poliklinik/poliklinik.go b/pkg/handlers/poliklinik/poliklinik.go index ea65962..48f7e90 100644 --- a/pkg/handlers/poliklinik/poliklinik.go +++ b/pkg/handlers/poliklinik/poliklinik.go @@ -1,7 +1,6 @@ package poliklinik import ( - "" "github.com/gin-gonic/gin" "log" "net/http" diff --git a/pkg/handlers/user/user.go b/pkg/handlers/user/user.go index 2b332f0..066ef18 100644 --- a/pkg/handlers/user/user.go +++ b/pkg/handlers/user/user.go @@ -23,8 +23,8 @@ import ( // @Failure 500 {object} map[string]string "Database connection failed" // @Router /api/localinsertuser [post] func InsertUser(c *gin.Context) { - local := os.Getenv("BLUEPRINT_DB_LOCAL") - db := database.New(local).GetDB() + local := os.Getenv("MONGODB_DEV_LOCAL") + db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return @@ -60,8 +60,8 @@ func InsertUser(c *gin.Context) { // @Failure 500 {object} map[string]string "Database connection failed" // @Router /api/local/getalluser [get] func GetAllUser(c *gin.Context) { - local := os.Getenv("BLUEPRINT_DB_LOCAL") - db := database.New(local).GetDB() + local := os.Getenv("MONGODB_DEV_LOCAL") + db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return @@ -88,7 +88,7 @@ func GetAllUser(c *gin.Context) { // @Router /api/local/getuser/{id} [get] func GetUserByID(c *gin.Context) { local := os.Getenv("BLUEPRINT_DB_LOCAL") - db := database.New(local).GetDB() + db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return @@ -119,7 +119,7 @@ func GetUserByID(c *gin.Context) { // @Router /users [put] func UpdateUser(c *gin.Context) { local := os.Getenv("BLUEPRINT_DB_LOCAL") - db := database.New(local).GetDB() + db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return @@ -146,7 +146,7 @@ func UpdateUser(c *gin.Context) { func DeleteUser(c *gin.Context) { local := os.Getenv("BLUEPRINT_DB_LOCAL") - db := database.New(local).GetDB() + db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return