Compare commits
3 Commits
8626ef11ec
...
01bc12352a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01bc12352a | ||
|
|
a6cba3a219 | ||
|
|
4097440982 |
@@ -0,0 +1,7 @@
|
||||
.git
|
||||
.gitignore
|
||||
.env
|
||||
Dockerfile
|
||||
docker-compose*
|
||||
tmp/
|
||||
*.log
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
# ================================
|
||||
# 1️⃣ Builder Stage
|
||||
# ================================
|
||||
FROM golang:1.25.3-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install git jika pakai private module
|
||||
RUN apk add --no-cache git
|
||||
|
||||
# Cache dependency
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
# Copy source
|
||||
COPY . .
|
||||
|
||||
# Build dari cmd/api
|
||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
||||
go build -ldflags="-s -w" \
|
||||
-o app ./cmd/api
|
||||
|
||||
# ================================
|
||||
# 2️⃣ Final Stage (Distroless)
|
||||
# ================================
|
||||
FROM gcr.io/distroless/base-debian12
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder /app/app .
|
||||
|
||||
# Run as non-root (distroless default user)
|
||||
USER nonroot:nonroot
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
ENTRYPOINT ["/app/app"]
|
||||
@@ -64,7 +64,7 @@ func (s *service) loadFromConfig(cfg *config.Config) {
|
||||
|
||||
// Load primary databases
|
||||
for name, dbConfig := range cfg.Databases {
|
||||
fmt.Printf("db name : %s", name)
|
||||
// fmt.Printf("db name : %s", name)
|
||||
s.configs[name] = dbConfig
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ func (s *service) addDatabase(name string, config config.DatabaseConfig) error {
|
||||
var err error
|
||||
|
||||
dbType := DatabaseType(config.Type)
|
||||
log.Printf("Database type: %s", dbType)
|
||||
// log.Printf("Database type: %s", dbType)
|
||||
|
||||
switch dbType {
|
||||
case Postgres:
|
||||
@@ -164,7 +164,9 @@ func New(cfg *config.Config) Service {
|
||||
|
||||
log.Println("Initializing database service...")
|
||||
dbManager.loadFromConfig(cfg)
|
||||
fmt.Printf("%#v\n", dbManager.configs)
|
||||
if cfg.Server.Mode == "debug" {
|
||||
fmt.Printf("%#v\n", dbManager.configs)
|
||||
}
|
||||
|
||||
// Initialize all databases
|
||||
for name, dbConfig := range dbManager.configs {
|
||||
|
||||
@@ -52,7 +52,7 @@ func (s *service) configureSQLDB(name string, db *sql.DB, config config.Database
|
||||
sqlxDB := sqlx.NewDb(db, driverName)
|
||||
s.sqlxDatabases[name] = sqlxDB
|
||||
|
||||
log.Printf("Successfully connected to SQL database: %s", name)
|
||||
// log.Printf("Successfully connected to SQL database: %s", name)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -67,11 +67,24 @@ func (h AccessHandler) SyncKeycloakRole(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, shared.BaseResponse[SyncKeycloakRoleRequest]{
|
||||
// return eligible menu for this user
|
||||
eligibleMenu, err := h.repo.GetAvailablePageByKeycloakId(c, req.KeycloakId)
|
||||
if err != nil {
|
||||
errMessage := []string{err.Error()}
|
||||
c.JSON(500, shared.BaseErrorResponse{
|
||||
Success: false,
|
||||
Code: 500,
|
||||
Message: "error fetch eligible menu",
|
||||
Errors: errMessage,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, shared.BaseResponse[[]AvailableMenuResponse]{
|
||||
Success: true,
|
||||
Code: 200,
|
||||
Message: "success sync role",
|
||||
Data: req,
|
||||
Data: MapMenuModelToResponse(eligibleMenu),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -86,4 +86,16 @@ Project ini menggunakan seed data untuk integrasi dengan component di frontend.
|
||||
cd <project_name>
|
||||
|
||||
go run ./migrations/seeder.go
|
||||
```
|
||||
|
||||
## Docker
|
||||
```bash
|
||||
// masuk ke root project
|
||||
cd <project_name>
|
||||
|
||||
// build docker image
|
||||
docker build -t antrianoperasi-api:latest .
|
||||
|
||||
// run docker container
|
||||
docker run --env-file .env -p 8080:8080 antrianoperasi-api
|
||||
```
|
||||
Reference in New Issue
Block a user