diff --git a/.env b/.env index b866ee7..eb6a8de 100644 --- a/.env +++ b/.env @@ -1,8 +1,8 @@ PORT=8084 SATUDATA_HOST=10.10.123.165 -SATUDATA_USERNAME=stim -SATUDATA_PASSWORD=stim*RS54 +SATUDATA_USER=stim +SATUDATA_PASS=stim*RS54 SATUDATA_NAME=satu_db SATUDATA_PORT=5000 @@ -13,8 +13,8 @@ SIMRS_NAME=simrs SIMRS_PORT=5000 SIMRS_STAG_HOST=10.10.123.223 -SIMRS_STAG_USERNAME=simtest -SIMRS_STAG_PASSWORD=12345 +SIMRS_STAG_USER=simtest +SIMRS_STAG_PASS=12345 SIMRS_STAG_NAME=simrs-stag SIMRS_STAG_PORT=5432 @@ -49,4 +49,11 @@ GET_FKRTL=/api/rs/validate GET_FKTP=/api/pcare/validate LIS_MIKROBIOLOGI_URL=http://10.10.123.218/ -LIS_REGISTERPASIEN=registerpasien \ No newline at end of file +LIS_REGISTERPASIEN=registerpasien + +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/docker-compose.yml b/docker-compose.yml index 53c9f00..f8837d5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,4 +41,11 @@ services: - PCARE_APLICARE=ihs # LIS MIKROBIOLOGI - LIS_MIKROBIOLOGI_URL=http://10.10.123.218/ - - LIS_REGISTERPA \ No newline at end of file + - LIS_REGISTERPA + # 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 29cc487..af5def3 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/joho/godotenv v1.5.1 github.com/testcontainers/testcontainers-go v0.36.0 github.com/testcontainers/testcontainers-go/modules/postgres v0.36.0 + go.mongodb.org/mongo-driver v1.17.3 gorm.io/driver/postgres v1.5.11 gorm.io/gorm v1.25.12 ) @@ -41,6 +42,7 @@ require ( github.com/go-playground/validator/v10 v10.26.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/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect @@ -63,6 +65,7 @@ require ( github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/montanaflynn/stats v0.7.1 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect @@ -77,6 +80,10 @@ require ( github.com/tklauser/numcpus v0.6.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.2 // indirect + github.com/xdg-go/stringprep v1.0.4 // indirect + github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect diff --git a/go.sum b/go.sum index 993a3c3..baf48b2 100644 --- a/go.sum +++ b/go.sum @@ -66,6 +66,8 @@ github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= 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/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= @@ -131,6 +133,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= +github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -175,10 +179,21 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/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.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= @@ -202,37 +217,50 @@ golang.org/x/arch v0.16.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +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/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= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= 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= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.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/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= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= @@ -241,6 +269,7 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/database/database.go b/internal/database/database.go index cbd347a..2ba5113 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -3,16 +3,18 @@ package database import ( "context" "fmt" + _ "github.com/jackc/pgx/v5/stdlib" + _ "github.com/joho/godotenv/autoload" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/mongo/readpref" + "gorm.io/driver/postgres" + "gorm.io/gorm" "log" "os" "strconv" "strings" "time" - - _ "github.com/jackc/pgx/v5/stdlib" - _ "github.com/joho/godotenv/autoload" - "gorm.io/driver/postgres" - "gorm.io/gorm" ) // Service represents a service that interacts with a database. @@ -20,11 +22,14 @@ type Service interface { Health() map[string]string Close() error GetDB(database string) *gorm.DB + GetMongoDB() *mongo.Database } type service struct { simrsDB *gorm.DB satuDataDB *gorm.DB + client *mongo.Client + mongoDB *mongo.Database } var ( @@ -38,10 +43,15 @@ var ( passwordSatudata = os.Getenv("SATUDATA_PASS") dbNameSatudata = os.Getenv("SATUDATA_NAME") portSatudata = os.Getenv("SATUDATA_PORT") - dbInstance *service + + hostMongo = os.Getenv("MONGODB_DEV_HOST") + portMongo = os.Getenv("MONGODB_DEV_PORT") + userMongo = os.Getenv("MONGODB_DEV_USER") + passMongo = os.Getenv("MONGODB_DEV_PASS") + dbInstance *service ) -func New() Service { +func New(database ...string) Service { // Reuse Connection if dbInstance != nil { return dbInstance @@ -62,9 +72,45 @@ func New() Service { } else { log.Println("Successfully connected to the database") } + mongoDBName := os.Getenv("MONGODB_DEV_MASTER") + if len(database) > 0 { + mongoDBName = database[0] + } + mongoURI := fmt.Sprintf("mongodb://%s:%s@%s:%s/%s?authSource=admin", + userMongo, passMongo, hostMongo, portMongo, database) + var client *mongo.Client + log.Println("Connecting to MongoDB...") + log.Println(mongoURI) + clientOptions := options.Client().ApplyURI(mongoURI) + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + for i := 0; i < 5; i++ { + client, err = mongo.Connect(ctx, clientOptions) + if err == nil { + log.Println("Connected to MongoDB") + break + } + log.Printf("Attempt %d: Failed to connect to MongoDB, retrying in 5 seconds...\n", i+1) + time.Sleep(5 * time.Second) + } + + if err != nil { + log.Fatalf("Failed to create client: %v", err) + } + + // Verify connection + if err = client.Ping(ctx, readpref.Primary()); err != nil { + log.Println("Failed to connect to MongoDB!!!") + log.Fatalf("Failed to connect to database: %v", err) + } + + log.Println("Successfully connected to MongoDB!") dbInstance = &service{ simrsDB: SimrsDB, satuDataDB: SatudataDB, + mongoDB: client.Database(mongoDBName), } return dbInstance } @@ -158,3 +204,7 @@ func (s *service) GetDB(database string) *gorm.DB { log.Println("Database tidak ditemukan") return nil } + +func (s *service) GetMongoDB() *mongo.Database { + return s.mongoDB +} diff --git a/pkg/database/satu_data/Practitioner.go b/pkg/database/satu_data/Practitioner.go index 3ccad7c..9823e50 100644 --- a/pkg/database/satu_data/Practitioner.go +++ b/pkg/database/satu_data/Practitioner.go @@ -9,7 +9,7 @@ import ( func (s *DatabaseService) PractitionerGetData() []*satu_data.PractitionerGetData { var datapractitioner []*satu_data.PractitionerGetData - query := `select dp.id,dp."NIP", + query := `select dp.id,dp."NIP", dk."Jenis_kelamin", array( select dgd. "Gelar_depan" from data_pegawai_daftar_gelar_depan dpdgd diff --git a/pkg/database/satu_data/address.go b/pkg/database/satu_data/address.go new file mode 100644 index 0000000..de0536e --- /dev/null +++ b/pkg/database/satu_data/address.go @@ -0,0 +1,24 @@ +package satu_data + +import ( + "api-poliklinik/pkg/models/satu_data" + "errors" + "gorm.io/gorm" + "log" +) + +func (s *DatabaseService) GetDataAddress(Status_pelayanan string) []*satu_data.PoliklinikGetData { + var dataaddress []*satu_data.PoliklinikGetData + query := `select dlr."Nama",dlr."Kode",dlr."id" from daftar_lokasi_ruang dlr where dlr."Status_pelayanan" = ?` + errQuery := s.DB.Debug().Raw(query, Status_pelayanan).Scan(&dataaddress).Error + if errQuery != nil { + if errors.Is(errQuery, gorm.ErrRecordNotFound) { + errMsg := errors.New("Data Tidak Ditemukan") + log.Println(errMsg) + return nil + } + log.Println(errQuery) + return nil + } + return dataaddress +} diff --git a/pkg/handlers/Practitioner/Practitioner.go b/pkg/handlers/Practitioner/Practitioner.go index ef583d2..0f2e081 100644 --- a/pkg/handlers/Practitioner/Practitioner.go +++ b/pkg/handlers/Practitioner/Practitioner.go @@ -29,6 +29,7 @@ func GetDataPractitioner(c *gin.Context) { responsePractitioner = append(responsePractitioner, satu_data.DataResponse{ ID: k.ID, NIP: k.NIP, + JenisKelamin: k.JenisKelamin, NamaLengkapFull: namaLengkap, }) } diff --git a/pkg/models/satu_data/Practitioner.go b/pkg/models/satu_data/Practitioner.go index d9e624a..005ebd6 100644 --- a/pkg/models/satu_data/Practitioner.go +++ b/pkg/models/satu_data/Practitioner.go @@ -3,6 +3,7 @@ package satu_data type PractitionerGetData struct { ID string `gorm:"column:id" json:"id"` NIP string `gorm:"column:nip" json:"nip"` + JenisKelamin string `gorm:"column:Jenis_kelamin" json:"Jenis_kelamin"` GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"` NamaLengkap string `gorm:"column:Nama_lengkap" json:"Nama_lengkap"` GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"` @@ -13,5 +14,6 @@ type PractitionerGetData struct { type DataResponse struct { ID string `gorm:"column:id" json:"id"` NIP string `gorm:"column:nip" json:"nip"` + JenisKelamin string `gorm:"column:Jenis_kelamin" json:"Jenis_kelamin"` NamaLengkapFull string `json:"nama_lengkap_full"` } diff --git a/pkg/models/satu_data/data_wilayah.go b/pkg/models/satu_data/data_wilayah.go new file mode 100644 index 0000000..360be81 --- /dev/null +++ b/pkg/models/satu_data/data_wilayah.go @@ -0,0 +1,27 @@ +package satu_data + +type Desakelurahan struct { + ID uint + NamaDesa string `gorm:"column:Desa_Kelurahan"` + Kecamatan Kecamatan `gorm:"foreignkey:Kecamatan_ID"` + Kecamatan_ID uint +} + +type Kecamatan struct { + ID uint + NamaKecamatan string `gorm:"column:Kecamatan"` + KabupatenKota KabupatenKota `gorm:"foreignkey:Kabupaten_kota_id"` + Kabupaten_kota_ID uint +} + +type KabupatenKota struct { + ID uint + NamaKabupaten string `gorm:"column:Kabupaten_Kota"` + Provinsi Provinsi `gorm:"foreignkey:Provinsi_id"` + Provinsi_id uint +} + +type Provinsi struct { + ID uint + NamaProvinsi string `gorm:"column:Provinsi"` +}