From c6aa6ee4d014caa063ffeed39c61020daacd5405 Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 28 May 2024 10:50:24 +0200 Subject: [PATCH 01/14] Update dependencies --- go.sum | 1 - 1 file changed, 1 deletion(-) diff --git a/go.sum b/go.sum index f15845d..50da5a2 100644 --- a/go.sum +++ b/go.sum @@ -29,7 +29,6 @@ github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU= github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= From 52fa8dc99657641f4793cbd1d5bf28af0f7145ec Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 28 May 2024 10:55:05 +0200 Subject: [PATCH 02/14] Update go version --- go.sum | 1 + 1 file changed, 1 insertion(+) diff --git a/go.sum b/go.sum index 50da5a2..f15845d 100644 --- a/go.sum +++ b/go.sum @@ -29,6 +29,7 @@ github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU= github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= From c37c4d11218f82a3231e75bdaf32fae59dcc3a4f Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Sun, 4 Aug 2024 23:36:48 +0200 Subject: [PATCH 03/14] feat: implement missing crud handlers for investors locations and statuses --- controllers/locationsController.go | 10 ++++++ controllers/statusesController.go | 50 ++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/controllers/locationsController.go b/controllers/locationsController.go index 181f2af..6e41518 100644 --- a/controllers/locationsController.go +++ b/controllers/locationsController.go @@ -127,6 +127,16 @@ func UpdateLocation(c *gin.Context) { tx.Commit() + if err := tx.Save(&location.Address).Error; err != nil { + tx.Rollback() + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Failed to update address", + }) + return + } + + tx.Commit() + c.JSON(http.StatusOK, location) } diff --git a/controllers/statusesController.go b/controllers/statusesController.go index 3c002da..826f915 100644 --- a/controllers/statusesController.go +++ b/controllers/statusesController.go @@ -56,6 +56,30 @@ func UpdateStatus(c *gin.Context) { c.JSON(http.StatusOK, updatedStatus) } +func UpdateStatus(c *gin.Context) { + var body models.Status + + if c.BindJSON(&body) != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "error": "Invalid request body", + }) + return + } + + result := initializers.DB.Where("id", c.Param("id")).Updates(&body) + + if result.RowsAffected == 0 { + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Failed to update status", + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "message": "Status updated successfully", + }) +} + func GetStatuses(c *gin.Context) { var statuses []models.Status @@ -96,3 +120,29 @@ func DeleteStatus(c *gin.Context) { "message": "Status deleted", }) } + +func DeleteStatus(c *gin.Context) { + var status models.Status + + result := initializers.DB.First(&status, c.Param("id")) + + if result.Error != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Status not found", + }) + return + } + + deleteResult := initializers.DB.Delete(&status) + + if deleteResult.Error != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Failed to delete investor: " + deleteResult.Error.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "message": "Status deleted", + }) +} From 4934413f89dafec1e64a5ebc63dc5a3d91590be8 Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Fri, 16 Aug 2024 02:14:25 +0200 Subject: [PATCH 04/14] unify api behavior --- controllers/statusesController.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/controllers/statusesController.go b/controllers/statusesController.go index 826f915..f37d9fd 100644 --- a/controllers/statusesController.go +++ b/controllers/statusesController.go @@ -75,9 +75,10 @@ func UpdateStatus(c *gin.Context) { return } - c.JSON(http.StatusOK, gin.H{ - "message": "Status updated successfully", - }) + var updatedStatus models.Status + initializers.DB.First(&updatedStatus, c.Param("id")) + + c.JSON(http.StatusOK, updatedStatus) } func GetStatuses(c *gin.Context) { From 605af73c95b57dc8200a8906c913a9325d863ff0 Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 24 Sep 2024 22:46:16 +0200 Subject: [PATCH 05/14] add possibility to include decision date in location creation and update --- controllers/locationsController.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/controllers/locationsController.go b/controllers/locationsController.go index 6e41518..8ccb245 100644 --- a/controllers/locationsController.go +++ b/controllers/locationsController.go @@ -29,6 +29,7 @@ func CreateLocation(c *gin.Context) { IssueDate: body.IssueDate, InspectionDate: body.InspectionDate, InspectionDone: false, + DecisionDate: body.DecisionDate, DeforestationDate: body.DeforestationDate, DeforestationDone: false, PlantingDate: body.PlantingDate, @@ -86,6 +87,7 @@ func UpdateLocation(c *gin.Context) { location.IssueDate = body.IssueDate location.InspectionDate = body.InspectionDate location.InspectionDone = body.InspectionDone + location.DecisionDate = body.DecisionDate location.DeforestationDate = body.DeforestationDate location.DeforestationDone = body.DeforestationDone location.PlantingDate = body.PlantingDate From 5c44aa2ed81c9d135c3f4f34f377ae2fd3238f07 Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 24 Sep 2024 22:46:34 +0200 Subject: [PATCH 06/14] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 66baab7..f13adb5 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## dev quickstart :construction: ```bash -$ docker-compose up --build -d +$ docker compose up --build -d ``` --- From a14c2a6aaaa13bff4494d91e50dc6d9e86cdc890 Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 24 Sep 2024 23:29:34 +0200 Subject: [PATCH 07/14] preload locations status when fetching office --- controllers/officeController.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/officeController.go b/controllers/officeController.go index 75651ac..3a3c311 100644 --- a/controllers/officeController.go +++ b/controllers/officeController.go @@ -107,7 +107,7 @@ func GetOffices(c *gin.Context) { func GetSingleOffice(c *gin.Context) { var office models.Office - result := initializers.DB.Preload("Address").Preload("Locations").First(&office, c.Param("id")) + result := initializers.DB.Preload("Address").Preload("Locations").Preload("Locations.Status").First(&office, c.Param("id")) if result.Error != nil { c.JSON(http.StatusInternalServerError, gin.H{ From 4bb13d417e9da2f82e4bc5613dab32e9f9ff437a Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 29 Oct 2024 23:39:11 +0100 Subject: [PATCH 08/14] update application schema --- controllers/locationsController.go | 18 +++++++++--------- models/applicationModel.go | 14 +++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/controllers/locationsController.go b/controllers/locationsController.go index 8ccb245..d28fd71 100644 --- a/controllers/locationsController.go +++ b/controllers/locationsController.go @@ -35,14 +35,14 @@ func CreateLocation(c *gin.Context) { PlantingDate: body.PlantingDate, PlantingDone: false, Application: models.Application{ - UserID: user.(models.User).ID, - Signature: body.Application.Signature, - IsDeforestationCommercial: body.Application.IsDeforestationCommercial, - DeforestationCause: body.Application.DeforestationCause, - DeforestationDate: body.Application.DeforestationDate, - PlantingDate: body.Application.PlantingDate, - PlantingPlace: body.Application.PlantingPlace, - Species: body.Application.Species, + UserID: user.(models.User).ID, + Signature: body.Application.Signature, + IsCommercial: body.Application.IsCommercial, + DeforestationCause: body.Application.DeforestationCause, + DeforestationDate: body.Application.DeforestationDate, + PlantingDate: body.Application.PlantingDate, + PlantingPlace: body.Application.PlantingPlace, + Species: body.Application.Species, }, Address: models.Address{ UserID: user.(models.User).ID, @@ -97,7 +97,7 @@ func UpdateLocation(c *gin.Context) { location.InvestorID = body.InvestorID location.Application.Signature = body.Application.Signature - location.Application.IsDeforestationCommercial = body.Application.IsDeforestationCommercial + location.Application.IsCommercial = body.Application.IsCommercial location.Application.DeforestationCause = body.Application.DeforestationCause location.Application.DeforestationDate = body.Application.DeforestationDate location.Application.PlantingDate = body.Application.PlantingDate diff --git a/models/applicationModel.go b/models/applicationModel.go index 33bbb72..d4c3d74 100644 --- a/models/applicationModel.go +++ b/models/applicationModel.go @@ -7,11 +7,11 @@ type Application struct { UserID uint `json:"userId"` LocationID uint `json:"locationId"` - Signature string `json:"signature"` - IsDeforestationCommercial string `json:"isDeforestationCommercial"` - DeforestationCause string `json:"deforestationCause"` - DeforestationDate *time.Time `json:"deforestationDate"` - PlantingDate *time.Time `json:"plantingDate"` - PlantingPlace string `json:"plantingPlace"` - Species string `json:"species"` + Signature string `json:"signature"` + IsCommercial bool `json:"isCommercial"` + DeforestationCause string `json:"deforestationCause"` + DeforestationDate *time.Time `json:"deforestationDate"` + PlantingDate *time.Time `json:"plantingDate"` + PlantingPlace string `json:"plantingPlace"` + Species string `json:"species"` } From 0524c52174f0c30dad408e35731bd1e930c2d4ad Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Mon, 4 Nov 2024 21:50:55 +0100 Subject: [PATCH 09/14] fix investment status preloading when fetching investor --- controllers/investorsController.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/investorsController.go b/controllers/investorsController.go index 170a812..00d1417 100644 --- a/controllers/investorsController.go +++ b/controllers/investorsController.go @@ -121,7 +121,7 @@ func GetSingleInvestor(c *gin.Context) { user, _ := c.Get("user") var investor models.Investor - result := initializers.DB.Where("user_id = ?", user.(models.User).ID).Preload("Address").Preload("Locations").First(&investor, c.Param("id")) + result := initializers.DB.Where("user_id = ?", user.(models.User).ID).Preload("Address").Preload("Locations").Preload("Locations.Status").First(&investor, c.Param("id")) if result.Error != nil { c.JSON(http.StatusInternalServerError, gin.H{ From 083816950af57fff9ac2a8aaa59cf9e2dad43e29 Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 5 Nov 2024 15:04:49 +0100 Subject: [PATCH 10/14] add package publishing gh action --- .github/workflows/publish-ghcr.yaml | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/publish-ghcr.yaml diff --git a/.github/workflows/publish-ghcr.yaml b/.github/workflows/publish-ghcr.yaml new file mode 100644 index 0000000..e9ed7d8 --- /dev/null +++ b/.github/workflows/publish-ghcr.yaml @@ -0,0 +1,33 @@ +name: hedgeapp backend + +on: + push: + branches: [master, develop] + +jobs: + build-and-publish: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GH_PAT }} + + - name: Set image tag + run: | + if [[ $GITHUB_REF == refs/heads/master ]]; then + IMAGE_TAG=latest + elif [[ $GITHUB_REF == refs/heads/develop ]]; then + IMAGE_TAG=develop + fi + echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV + + - name: Build and push docker image + run: | + docker build --tag ghcr.io/szarbartosz/hedgeapp-back:$IMAGE_TAG + docker push ghcr.io/szarbartosz/hedgeapp-back:$IMAGE_TAG From d4a15fbe42e74e7cf7f4ee7223c4b3190758812a Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 5 Nov 2024 15:42:23 +0100 Subject: [PATCH 11/14] add missing argument --- .github/workflows/publish-ghcr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-ghcr.yaml b/.github/workflows/publish-ghcr.yaml index e9ed7d8..93346e9 100644 --- a/.github/workflows/publish-ghcr.yaml +++ b/.github/workflows/publish-ghcr.yaml @@ -29,5 +29,5 @@ jobs: - name: Build and push docker image run: | - docker build --tag ghcr.io/szarbartosz/hedgeapp-back:$IMAGE_TAG + docker build --tag ghcr.io/szarbartosz/hedgeapp-back:$IMAGE_TAG . docker push ghcr.io/szarbartosz/hedgeapp-back:$IMAGE_TAG From 21482fcd399fc8592f4d432a06193974dd17c6fc Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 5 Nov 2024 23:10:10 +0100 Subject: [PATCH 12/14] create minimal docker image configuration --- Dockerfile | 21 +++++++++++++++------ docker-compose.yaml | 30 ++++++++++++++++++++++-------- initializers/envVariablesLoader.go | 7 ++++++- main.go | 2 ++ 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/Dockerfile b/Dockerfile index f4f29d6..3f949a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,23 @@ -FROM golang:1.22.3-alpine +# build a binary +FROM golang:1.22.3-alpine AS builder -WORKDIR /app +RUN apk update && apk add --no-cache 'git=~2' -COPY go.mod go.sum ./ -RUN go mod download +ENV GO111MODULE=on +WORKDIR /app COPY . . -RUN go build -o main . +RUN go get -d -v + +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /binary . + +# build a small image +FROM alpine:3 + +WORKDIR / +COPY --from=builder /binary /main EXPOSE 8080 -CMD ["./main"] \ No newline at end of file +ENTRYPOINT ["/main"] \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 946155d..f95c6c7 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,28 +1,42 @@ services: database: image: postgres:alpine - container_name: hedheapp-db - restart: always + container_name: db + restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ports: - - 9920:5432 + - 5432:5432 networks: - app-network - backend: - build: . - container_name: hedgeapp-back - restart: always env_file: - .env + backend: + build: . + container_name: backend + restart: unless-stopped + environment: + PORT: ${PORT} + GIN_MODE: ${GIN_MODE} + JWT_SECRET: ${JWT_SECRET} + ALLOWED_ORIGIN: ${ALLOWED_ORIGIN} + COOKIE_DOMAIN: ${COOKIE_DOMAIN} + SECURE_COOKIE: ${SECURE_COOKIE} + DB_HOST: ${DB_HOST} + DB_PORT: ${DB_PORT} + DB_NAME: ${DB_NAME} + DB_USER: ${DB_USER} + DB_PASSWORD: ${DB_PASSWORD} ports: - - 4000:3000 + - 8080:8080 depends_on: - database networks: - app-network + env_file: + - .env networks: app-network: diff --git a/initializers/envVariablesLoader.go b/initializers/envVariablesLoader.go index 9f50a11..d5c75a5 100644 --- a/initializers/envVariablesLoader.go +++ b/initializers/envVariablesLoader.go @@ -2,6 +2,7 @@ package initializers import ( "log" + "os" "github.com/joho/godotenv" ) @@ -10,6 +11,10 @@ func LoadEnvVariables() { err := godotenv.Load() if err != nil { - log.Fatal("Error loading .env file") + if os.IsNotExist(err) { + log.Print("No .env file found - that's okay if running on docker.") + } else { + log.Panic("Error loading .env file!") + } } } diff --git a/main.go b/main.go index ac33536..41be673 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "main/controllers" "main/initializers" "main/middleware" + "os" "github.com/gin-gonic/gin" ) @@ -12,6 +13,7 @@ func init() { initializers.LoadEnvVariables() initializers.ConnectToDB() initializers.SyncDB() + gin.SetMode(os.Getenv("GIN_MODE")) } func main() { From 287ce381103a2ff040675e11ae1c0fec0dcbc413 Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 5 Nov 2024 23:24:09 +0100 Subject: [PATCH 13/14] remove duplicated functions --- controllers/statusesController.go | 51 ------------------------------- 1 file changed, 51 deletions(-) diff --git a/controllers/statusesController.go b/controllers/statusesController.go index f37d9fd..3c002da 100644 --- a/controllers/statusesController.go +++ b/controllers/statusesController.go @@ -56,31 +56,6 @@ func UpdateStatus(c *gin.Context) { c.JSON(http.StatusOK, updatedStatus) } -func UpdateStatus(c *gin.Context) { - var body models.Status - - if c.BindJSON(&body) != nil { - c.JSON(http.StatusBadRequest, gin.H{ - "error": "Invalid request body", - }) - return - } - - result := initializers.DB.Where("id", c.Param("id")).Updates(&body) - - if result.RowsAffected == 0 { - c.JSON(http.StatusInternalServerError, gin.H{ - "error": "Failed to update status", - }) - return - } - - var updatedStatus models.Status - initializers.DB.First(&updatedStatus, c.Param("id")) - - c.JSON(http.StatusOK, updatedStatus) -} - func GetStatuses(c *gin.Context) { var statuses []models.Status @@ -121,29 +96,3 @@ func DeleteStatus(c *gin.Context) { "message": "Status deleted", }) } - -func DeleteStatus(c *gin.Context) { - var status models.Status - - result := initializers.DB.First(&status, c.Param("id")) - - if result.Error != nil { - c.JSON(http.StatusInternalServerError, gin.H{ - "error": "Status not found", - }) - return - } - - deleteResult := initializers.DB.Delete(&status) - - if deleteResult.Error != nil { - c.JSON(http.StatusInternalServerError, gin.H{ - "error": "Failed to delete investor: " + deleteResult.Error.Error(), - }) - return - } - - c.JSON(http.StatusOK, gin.H{ - "message": "Status deleted", - }) -} From c0d02558c6f10d4be57e05448b4c2598448ce6c1 Mon Sep 17 00:00:00 2001 From: Bartosz Szar Date: Tue, 5 Nov 2024 23:28:47 +0100 Subject: [PATCH 14/14] update dependencies --- go.mod | 40 ++++++++++++++-------------- go.sum | 83 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 63 insertions(+), 60 deletions(-) diff --git a/go.mod b/go.mod index 373cdf1..ea3f6a3 100644 --- a/go.mod +++ b/go.mod @@ -5,44 +5,46 @@ go 1.22 require ( github.com/gin-gonic/gin v1.10.0 github.com/go-playground/assert/v2 v2.2.0 - github.com/golang-jwt/jwt/v4 v4.4.3 - github.com/joho/godotenv v1.4.0 - golang.org/x/crypto v0.23.0 - gorm.io/driver/postgres v1.5.7 - gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde + github.com/golang-jwt/jwt/v4 v4.5.1 + github.com/joho/godotenv v1.5.1 + golang.org/x/crypto v0.28.0 + gorm.io/driver/postgres v1.5.9 + gorm.io/gorm v1.25.12 ) require ( - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.20.0 // indirect - github.com/goccy/go-json v0.10.2 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect + github.com/goccy/go-json v0.10.3 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgx/v5 v5.4.3 // indirect + github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect + github.com/jackc/pgx/v5 v5.7.1 // 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/cpuid/v2 v2.2.7 // indirect + github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/kr/text v0.2.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect - golang.org/x/arch v0.8.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - google.golang.org/protobuf v1.34.1 // indirect + golang.org/x/arch v0.11.0 // indirect + golang.org/x/net v0.30.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect + google.golang.org/protobuf v1.35.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index f15845d..124be72 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,8 @@ -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= @@ -10,8 +11,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= @@ -22,32 +23,34 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= -github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU= -github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= +github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= -github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs= +github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= -github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= -github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= +github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= @@ -62,8 +65,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/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= @@ -71,45 +74,43 @@ github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= 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= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= -golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= +golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM= -gorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA= -gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde h1:9DShaph9qhkIYw7QF91I/ynrr4cOO2PZra2PFD7Mfeg= -gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8= +gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= +gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= +gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=