diff --git a/.DS_Store b/.DS_Store index dc7f0bb3..a01125ca 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Dockerfile.dev b/Dockerfile.dev index 1236b180..8fda5df1 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -6,7 +6,7 @@ RUN apk add --no-cache git curl bash build-base # Install Air (pakai repo baru air-verse) RUN go install github.com/air-verse/air@v1.52.3 -WORKDIR /golang-boilerplate +WORKDIR /lti-api # Cache dependencies COPY go.mod go.sum ./ diff --git a/Dockerfile.prod b/Dockerfile.prod index d0315963..5f6eea89 100644 --- a/Dockerfile.prod +++ b/Dockerfile.prod @@ -3,7 +3,7 @@ FROM golang:1.23-alpine AS builder # Install tools build RUN apk add --no-cache git curl bash build-base -WORKDIR /golang-boilerplate +WORKDIR /lti-api # Cache dependencies COPY go.mod go.sum ./ @@ -20,13 +20,13 @@ FROM alpine:3.20 # Install tools RUN apk add --no-cache curl -WORKDIR /golang-boilerplate +WORKDIR /lti-api # Copy binary hasil build -COPY --from=builder /golang-boilerplate/app . +COPY --from=builder /lti-api/app . # Copy file env example -COPY --from=builder /golang-boilerplate/.env.example .env +COPY --from=builder /lti-api/.env.example .env EXPOSE 8080 diff --git a/Makefile b/Makefile index 754adf43..0534104b 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ endif # --- Konfigurasi umum --- COMPOSE ?= docker compose -f docker-compose.dev.yml -NETWORK ?= boilerplate-template_go-network +NETWORK ?= lti-api_go-network MIGRATE_IMAGE ?= migrate/migrate MIGRATIONS_DIR := $(PWD)/internal/database/migrations diff --git a/README.md b/README.md index 93527086..8ceab057 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Golang Boilerplate (golang-boilerplate) +# Lumbung Telur Indonesia ERP API (lti-api) -Boilerplate RESTful API, built with **Go, Fiber, GORM** and **PostgreSQL**. +Lumbung Telur Indonesia RESTful API, built with **Go, Fiber, GORM** and **PostgreSQL**. --- @@ -23,8 +23,8 @@ Boilerplate RESTful API, built with **Go, Fiber, GORM** and **PostgreSQL**. ### 1. Clone Project ```bash -git clone https://github.com/hafizhproject45/Golang-Boilerplate.git -cd golang-boilerplate +git clone https://gitlab.com/mbugroup/lti-api.git +cd lti-api ``` ### 2. Install Dependencies @@ -105,8 +105,8 @@ internal/ ## ✨ Author -Hafizh Athallah Yovanka +IT Development PT Mitra Berlian Unggas ## 📃 License -Free to use +Free to use --change here diff --git a/cmd/api/main.go b/cmd/api/main.go index 3cd71a7c..a06445f7 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -8,11 +8,11 @@ import ( "syscall" "time" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/config" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/database" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/middleware" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/route" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/utils" + "gitlab.com/mbugroup/lti-api.git/internal/config" + "gitlab.com/mbugroup/lti-api.git/internal/database" + "gitlab.com/mbugroup/lti-api.git/internal/middleware" + "gitlab.com/mbugroup/lti-api.git/internal/route" + "gitlab.com/mbugroup/lti-api.git/internal/utils" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/compress" diff --git a/cmd/seed/main.go b/cmd/seed/main.go index f80eec60..e3ef7294 100644 --- a/cmd/seed/main.go +++ b/cmd/seed/main.go @@ -3,9 +3,9 @@ package main import ( "log" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/config" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/database" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/database/seed" + "gitlab.com/mbugroup/lti-api.git/internal/config" + "gitlab.com/mbugroup/lti-api.git/internal/database" + "gitlab.com/mbugroup/lti-api.git/internal/database/seed" ) func main() { diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 0255eb6b..c3899882 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -47,9 +47,9 @@ services: context: . dockerfile: Dockerfile.dev image: cosmtrek/air:v1.52.3 - working_dir: /golang-boilerplate + working_dir: /lti-api volumes: - - .:/golang-boilerplate + - .:/lti-api - ./internal/config/jwtRS256.key:/run/keys/jwtRS256.key:ro - ./internal/config/jwtRS256.key.pub:/run/keys/jwtRS256.key.pub:ro command: air -c .air.toml @@ -84,5 +84,5 @@ volumes: networks: go-network: - name: boilerplate-template_go-network + name: lti-api_go-network driver: bridge diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index a63fbaf2..94a284bc 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -22,8 +22,8 @@ services: build: context: . dockerfile: Dockerfile.prod - image: golang-boilerplate-app - working_dir: /golang-boilerplate + image: lti-api-app + working_dir: /lti-api command: ./app # asumsi Dockerfile.prod menghasilkan binary bernama "app" env_file: - .env @@ -46,5 +46,5 @@ volumes: networks: go-network: - name: boilerplate-template_go-network + name: lti-api_go-network driver: bridge diff --git a/go.mod b/go.mod index ce983771..0883015c 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/hafizhproject45/Golang-Boilerplate.git +module gitlab.com/mbugroup/lti-api.git go 1.23 diff --git a/internal/.DS_Store b/internal/.DS_Store new file mode 100644 index 00000000..db68ea84 Binary files /dev/null and b/internal/.DS_Store differ diff --git a/internal/config/.DS_Store b/internal/config/.DS_Store new file mode 100644 index 00000000..5008ddfc Binary files /dev/null and b/internal/config/.DS_Store differ diff --git a/internal/config/auth.go b/internal/config/auth.go deleted file mode 100644 index 767853e0..00000000 --- a/internal/config/auth.go +++ /dev/null @@ -1,42 +0,0 @@ -package config - -import ( - "os" - "time" -) - -type AuthCfg struct { - Issuer string - JWTSecret string - AccessTTL time.Duration - RefreshTTL time.Duration - RefreshCookieName string - RefreshCookiePath string -} - -func LoadAuth() AuthCfg { - return AuthCfg{ - JWTSecret: getenv("JWT_SECRET", "dev-secret-change-me"), - AccessTTL: getenvDuration("ACCESS_TTL", 10*time.Minute), - RefreshTTL: getenvDuration("REFRESH_TTL", 30*24*time.Hour), - RefreshCookieName: getenv("REFRESH_COOKIE_NAME", "rt"), - RefreshCookiePath: getenv("REFRESH_COOKIE_PATH", "/api/auth"), - Issuer: getenv("ISSUER", "http://localhost:8080"), - } -} - -func getenv(k, def string) string { - if v := os.Getenv(k); v != "" { - return v - } - return def -} -func getenvDuration(k string, def time.Duration) time.Duration { - if v := os.Getenv(k); v != "" { - d, err := time.ParseDuration(v) - if err == nil { - return d - } - } - return def -} diff --git a/internal/config/config.go b/internal/config/config.go index cd1fbda0..65851394 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -3,7 +3,7 @@ package config import ( "fmt" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/utils" + "gitlab.com/mbugroup/lti-api.git/internal/utils" "github.com/spf13/viper" ) diff --git a/internal/config/fiber.go b/internal/config/fiber.go index dd833ff3..aea67b5f 100644 --- a/internal/config/fiber.go +++ b/internal/config/fiber.go @@ -1,7 +1,7 @@ package config import ( - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/utils" + "gitlab.com/mbugroup/lti-api.git/internal/utils" "github.com/bytedance/sonic" "github.com/gofiber/fiber/v2" diff --git a/internal/database/database.go b/internal/database/database.go index 9ebaa7f6..4d6b2551 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -4,8 +4,8 @@ import ( "fmt" "time" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/config" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/utils" + "gitlab.com/mbugroup/lti-api.git/internal/config" + "gitlab.com/mbugroup/lti-api.git/internal/utils" "gorm.io/driver/postgres" "gorm.io/gorm" diff --git a/internal/database/migrations/20250825071938_create-table-sso.down.sql b/internal/database/migrations/20250925040409_create_lti_tables.down.sql similarity index 100% rename from internal/database/migrations/20250825071938_create-table-sso.down.sql rename to internal/database/migrations/20250925040409_create_lti_tables.down.sql diff --git a/internal/database/migrations/20250825071938_create-table-sso.up.sql b/internal/database/migrations/20250925040409_create_lti_tables.up.sql similarity index 100% rename from internal/database/migrations/20250825071938_create-table-sso.up.sql rename to internal/database/migrations/20250925040409_create_lti_tables.up.sql diff --git a/internal/database/seed/seeder.go b/internal/database/seed/seeder.go index 4c031342..37ce6e84 100644 --- a/internal/database/seed/seeder.go +++ b/internal/database/seed/seeder.go @@ -3,7 +3,7 @@ package seed import ( "fmt" - mUser "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/models" + mUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/models" "gorm.io/gorm" ) diff --git a/internal/middleware/auth.go b/internal/middleware/auth.go index d8eef2d9..14a64337 100644 --- a/internal/middleware/auth.go +++ b/internal/middleware/auth.go @@ -3,9 +3,9 @@ package middleware import ( "strings" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/config" - service "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/services" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/utils" + "gitlab.com/mbugroup/lti-api.git/internal/config" + service "gitlab.com/mbugroup/lti-api.git/internal/modules/users/services" + "gitlab.com/mbugroup/lti-api.git/internal/utils" "github.com/gofiber/fiber/v2" ) diff --git a/internal/middleware/limiter.go b/internal/middleware/limiter.go index 2b1087db..205facd1 100644 --- a/internal/middleware/limiter.go +++ b/internal/middleware/limiter.go @@ -3,7 +3,7 @@ package middleware import ( "time" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/response" + "gitlab.com/mbugroup/lti-api.git/internal/response" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/limiter" diff --git a/internal/modules/users/controllers/user.controller.go b/internal/modules/users/controllers/user.controller.go index f8508e6a..88361557 100644 --- a/internal/modules/users/controllers/user.controller.go +++ b/internal/modules/users/controllers/user.controller.go @@ -4,10 +4,10 @@ import ( "math" "strconv" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/dto" - service "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/services" - validation "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/validations" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/response" + "gitlab.com/mbugroup/lti-api.git/internal/modules/users/dto" + service "gitlab.com/mbugroup/lti-api.git/internal/modules/users/services" + validation "gitlab.com/mbugroup/lti-api.git/internal/modules/users/validations" + "gitlab.com/mbugroup/lti-api.git/internal/response" "github.com/gofiber/fiber/v2" ) diff --git a/internal/modules/users/dto/user.dto.go b/internal/modules/users/dto/user.dto.go index 34f9ab7c..d06fb90c 100644 --- a/internal/modules/users/dto/user.dto.go +++ b/internal/modules/users/dto/user.dto.go @@ -3,7 +3,7 @@ package dto import ( "time" - model "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/models" + model "gitlab.com/mbugroup/lti-api.git/internal/modules/users/models" ) // === DTO Structs === diff --git a/internal/modules/users/module.go b/internal/modules/users/module.go index 4ccb354b..8f9db4e4 100644 --- a/internal/modules/users/module.go +++ b/internal/modules/users/module.go @@ -5,8 +5,8 @@ import ( "github.com/gofiber/fiber/v2" "gorm.io/gorm" - rUser "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/repositories" - sUser "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/services" + rUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/repositories" + sUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/services" ) type UserModule struct{} diff --git a/internal/modules/users/repositories/user.repository.go b/internal/modules/users/repositories/user.repository.go index cbe9f5f2..c7001a73 100644 --- a/internal/modules/users/repositories/user.repository.go +++ b/internal/modules/users/repositories/user.repository.go @@ -1,8 +1,8 @@ package repository import ( - model "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/models" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/repository" + model "gitlab.com/mbugroup/lti-api.git/internal/modules/users/models" + "gitlab.com/mbugroup/lti-api.git/internal/repository" "gorm.io/gorm" ) diff --git a/internal/modules/users/route.go b/internal/modules/users/route.go index 1a2a0de4..2c428f3a 100644 --- a/internal/modules/users/route.go +++ b/internal/modules/users/route.go @@ -1,8 +1,8 @@ package users import ( - controller "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/controllers" - user "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/services" + controller "gitlab.com/mbugroup/lti-api.git/internal/modules/users/controllers" + user "gitlab.com/mbugroup/lti-api.git/internal/modules/users/services" "github.com/gofiber/fiber/v2" ) diff --git a/internal/modules/users/services/user.service.go b/internal/modules/users/services/user.service.go index f8ec6acb..24b3ebc6 100644 --- a/internal/modules/users/services/user.service.go +++ b/internal/modules/users/services/user.service.go @@ -3,10 +3,10 @@ package service import ( "errors" - model "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/models" - repository "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/repositories" - validation "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/validations" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/utils" + model "gitlab.com/mbugroup/lti-api.git/internal/modules/users/models" + repository "gitlab.com/mbugroup/lti-api.git/internal/modules/users/repositories" + validation "gitlab.com/mbugroup/lti-api.git/internal/modules/users/validations" + "gitlab.com/mbugroup/lti-api.git/internal/utils" "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" diff --git a/internal/route/route.go b/internal/route/route.go index 69b19258..bc1125d3 100644 --- a/internal/route/route.go +++ b/internal/route/route.go @@ -1,13 +1,13 @@ package route import ( - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/validation" + "gitlab.com/mbugroup/lti-api.git/internal/modules" + "gitlab.com/mbugroup/lti-api.git/internal/validation" "github.com/gofiber/fiber/v2" "gorm.io/gorm" - users "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users" + users "gitlab.com/mbugroup/lti-api.git/internal/modules/users" // MODULE IMPORTS ) diff --git a/internal/utils/error.go b/internal/utils/error.go index 5c46ee27..2e5223bd 100644 --- a/internal/utils/error.go +++ b/internal/utils/error.go @@ -3,8 +3,8 @@ package utils import ( "errors" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/response" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/validation" + "gitlab.com/mbugroup/lti-api.git/internal/response" + "gitlab.com/mbugroup/lti-api.git/internal/validation" "github.com/gofiber/fiber/v2" ) diff --git a/tools/gen.go b/tools/gen.go index 10cf9284..e56c3cf4 100644 --- a/tools/gen.go +++ b/tools/gen.go @@ -156,7 +156,7 @@ func updateMainRoute(d Data) { pkgName := toPascalCase(d.Entity) + "Module" // Inject import - importLine := fmt.Sprintf("\t%[1]s \"%s/internal/modules/%s\"", modName, "github.com/hafizhproject45/Golang-Boilerplate.git", modPath) + importLine := fmt.Sprintf("\t%[1]s \"%s/internal/modules/%s\"", modName, "gitlab.com/mbugroup/lti-api.git", modPath) if !strings.Contains(string(content), importLine) { content = []byte(strings.Replace(string(content), "// MODULE IMPORTS", diff --git a/tools/templates/controller.tmpl b/tools/templates/controller.tmpl index 8a5e7e68..9fcf6d9b 100644 --- a/tools/templates/controller.tmpl +++ b/tools/templates/controller.tmpl @@ -4,10 +4,10 @@ import ( "math" "strconv" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/dto" - service "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/services" - validation "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/validations" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/response" + "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/dto" + service "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/services" + validation "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/validations" + "gitlab.com/mbugroup/lti-api.git/internal/response" "github.com/gofiber/fiber/v2" ) diff --git a/tools/templates/dto.tmpl b/tools/templates/dto.tmpl index c621612d..62550e6d 100644 --- a/tools/templates/dto.tmpl +++ b/tools/templates/dto.tmpl @@ -3,7 +3,7 @@ import ( "time" - model "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/models" + model "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/models" ) // === DTO Structs === diff --git a/tools/templates/module.tmpl b/tools/templates/module.tmpl index 3a0aa678..d7b638dc 100644 --- a/tools/templates/module.tmpl +++ b/tools/templates/module.tmpl @@ -5,11 +5,11 @@ import ( "github.com/gofiber/fiber/v2" "gorm.io/gorm" - r{{Pascal .Entity}} "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/repositories" - s{{Pascal .Entity}} "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/services" + r{{Pascal .Entity}} "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/repositories" + s{{Pascal .Entity}} "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/services" - rUser "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/repositories" - sUser "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/services" + rUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/repositories" + sUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/services" ) type {{Pascal .Entity}}Module struct{} diff --git a/tools/templates/repository.tmpl b/tools/templates/repository.tmpl index 7780ee44..ee6d625e 100644 --- a/tools/templates/repository.tmpl +++ b/tools/templates/repository.tmpl @@ -1,8 +1,8 @@ {{define "repository"}}package repository import ( - model "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/models" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/repository" + model "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/models" + "gitlab.com/mbugroup/lti-api.git/internal/repository" "gorm.io/gorm" ) diff --git a/tools/templates/route.tmpl b/tools/templates/route.tmpl index 2dddbec4..1d80ff03 100644 --- a/tools/templates/route.tmpl +++ b/tools/templates/route.tmpl @@ -1,10 +1,10 @@ {{define "route"}}package {{Kebab .Entity}}s import ( - m "github.com/hafizhproject45/Golang-Boilerplate.git/internal/middleware" - controller "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/controllers" - {{Camel .Entity}} "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/services" - user "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/users/services" + m "gitlab.com/mbugroup/lti-api.git/internal/middleware" + controller "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/controllers" + {{Camel .Entity}} "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/services" + user "gitlab.com/mbugroup/lti-api.git/internal/modules/users/services" "github.com/gofiber/fiber/v2" ) diff --git a/tools/templates/service.tmpl b/tools/templates/service.tmpl index b5c54955..451c315f 100644 --- a/tools/templates/service.tmpl +++ b/tools/templates/service.tmpl @@ -3,10 +3,10 @@ import ( "errors" - model "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/models" - repository "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/repositories" - validation "github.com/hafizhproject45/Golang-Boilerplate.git/internal/modules/{{Kebab .FeatName}}s/validations" - "github.com/hafizhproject45/Golang-Boilerplate.git/internal/utils" + model "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/models" + repository "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/repositories" + validation "gitlab.com/mbugroup/lti-api.git/internal/modules/{{Kebab .FeatName}}s/validations" + "gitlab.com/mbugroup/lti-api.git/internal/utils" "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2"