全局重命名:kefu_sys / kefu-sys 改为 kefu_cloud / kefu-cloud
- Go module 与全部 import 路径 - 数据库默认库名、Docker 服务/卷命名与部署文档
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# 客服云(kefu_sys)
|
||||
# 客服云(kefu_cloud)
|
||||
|
||||
多租户在线客服 SaaS:租户坐席工作台 + 访客 Widget + 平台超管后台。
|
||||
|
||||
@@ -81,11 +81,11 @@
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
kefu_sys/
|
||||
kefu_cloud/ # 仓库目录名(本地可能仍为旧名,以模块名为准)
|
||||
├── docker-compose.dev.yml # Postgres + MinIO
|
||||
├── Makefile
|
||||
├── docs/ # 产品原型 / 需求 HTML
|
||||
├── server/
|
||||
├── server/ # Go module: kefu-cloud/server
|
||||
│ ├── cmd/main.go # 服务入口
|
||||
│ ├── cmd/seed/ # 演示数据
|
||||
│ └── internal/
|
||||
@@ -205,7 +205,7 @@ make db-up
|
||||
| `SERVER_PORT` | `8080` | HTTP 端口 |
|
||||
| `GIN_MODE` | `debug` | Gin 模式 |
|
||||
| `DB_HOST` / `DB_PORT` | `localhost` / `5433` | 数据库 |
|
||||
| `DB_USER` / `DB_PASSWORD` / `DB_NAME` | `postgres` / `postgres` / `kefu_sys` | |
|
||||
| `DB_USER` / `DB_PASSWORD` / `DB_NAME` | `postgres` / `postgres` / `kefu_cloud` | |
|
||||
| `JWT_SECRET` | 内置开发密钥 | **生产务必修改** |
|
||||
| `STORAGE_ENDPOINT` | `localhost:9100` | MinIO/S3 |
|
||||
| `STORAGE_ACCESS_KEY` / `STORAGE_SECRET_KEY` | `minioadmin` | |
|
||||
|
||||
@@ -15,7 +15,7 @@ STORAGE_PUBLIC_BASE_URL=http://你的公网IP或域名/files
|
||||
# ========== 数据库 ==========
|
||||
DB_USER=kefu
|
||||
DB_PASSWORD=请改成强密码
|
||||
DB_NAME=kefu_sys
|
||||
DB_NAME=kefu_cloud
|
||||
DB_SSLMODE=disable
|
||||
|
||||
# ========== JWT(deploy.sh 可自动生成)==========
|
||||
|
||||
+2
-2
@@ -29,8 +29,8 @@ docker compose version
|
||||
4. 上传代码到服务器,例如:
|
||||
|
||||
```bash
|
||||
git clone <你的仓库地址> kefu_sys
|
||||
cd kefu_sys
|
||||
git clone <你的仓库地址> kefu_cloud
|
||||
cd kefu_cloud
|
||||
```
|
||||
|
||||
## 一键部署
|
||||
|
||||
@@ -23,10 +23,10 @@ set +a
|
||||
|
||||
mkdir -p "$OUT_DIR"
|
||||
STAMP="$(date +%Y%m%d_%H%M%S)"
|
||||
FILE="${OUT_DIR}/kefu_pg_${STAMP}.sql.gz"
|
||||
FILE="${OUT_DIR}/kefu_cloud_pg_${STAMP}.sql.gz"
|
||||
|
||||
echo "备份到 $FILE …"
|
||||
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T postgres \
|
||||
pg_dump -U "${DB_USER:-kefu}" "${DB_NAME:-kefu_sys}" | gzip > "$FILE"
|
||||
pg_dump -U "${DB_USER:-kefu}" "${DB_NAME:-kefu_cloud}" | gzip > "$FILE"
|
||||
|
||||
echo "完成: $FILE ($(du -h "$FILE" | awk '{print $1}'))"
|
||||
|
||||
@@ -196,7 +196,7 @@ cmd_down() {
|
||||
ensure_env
|
||||
log "停止容器(保留数据卷)…"
|
||||
compose down
|
||||
log "已停止。删除数据卷请手动: docker volume rm kefu-prod_kefu_pgdata kefu-prod_kefu_miniodata"
|
||||
log "已停止。删除数据卷请手动: docker volume rm kefu-cloud_kefu_cloud_pgdata kefu-cloud_kefu_cloud_miniodata"
|
||||
}
|
||||
|
||||
cmd_status() {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
container_name: kefu-db
|
||||
container_name: kefu-cloud-db
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: kefu_sys
|
||||
POSTGRES_DB: kefu_cloud
|
||||
ports:
|
||||
- "5433:5432"
|
||||
volumes:
|
||||
@@ -13,7 +13,7 @@ services:
|
||||
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: kefu-minio
|
||||
container_name: kefu-cloud-minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: minioadmin
|
||||
@@ -29,7 +29,7 @@ services:
|
||||
# 注意:容器网络内仍访问 minio:9000(服务端口),宿主机映射为 9100
|
||||
minio-init:
|
||||
image: minio/mc:latest
|
||||
container_name: kefu-minio-init
|
||||
container_name: kefu-cloud-minio-init
|
||||
depends_on:
|
||||
- minio
|
||||
restart: "no"
|
||||
|
||||
+25
-25
@@ -2,23 +2,23 @@
|
||||
# 使用:./deploy/scripts/deploy.sh
|
||||
# 或:docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod up -d --build
|
||||
|
||||
name: kefu-prod
|
||||
name: kefu-cloud
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
container_name: kefu-prod-db
|
||||
container_name: kefu-cloud-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: ${DB_USER:-kefu}
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD:?请在 deploy/.env.prod 设置 DB_PASSWORD}
|
||||
POSTGRES_DB: ${DB_NAME:-kefu_sys}
|
||||
POSTGRES_DB: ${DB_NAME:-kefu_cloud}
|
||||
volumes:
|
||||
- kefu_pgdata:/var/lib/postgresql/data
|
||||
- kefu_cloud_pgdata:/var/lib/postgresql/data
|
||||
networks:
|
||||
- kefu_net
|
||||
- kefu_cloud_net
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-kefu} -d ${DB_NAME:-kefu_sys}"]
|
||||
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-kefu} -d ${DB_NAME:-kefu_cloud}"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
@@ -26,27 +26,27 @@ services:
|
||||
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: kefu-prod-minio
|
||||
container_name: kefu-cloud-minio
|
||||
restart: unless-stopped
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: ${STORAGE_ACCESS_KEY:?请设置 STORAGE_ACCESS_KEY}
|
||||
MINIO_ROOT_PASSWORD: ${STORAGE_SECRET_KEY:?请设置 STORAGE_SECRET_KEY}
|
||||
volumes:
|
||||
- kefu_miniodata:/data
|
||||
- kefu_cloud_miniodata:/data
|
||||
networks:
|
||||
- kefu_net
|
||||
- kefu_cloud_net
|
||||
# 官方镜像极简,无 curl/bash;由 minio-init 重试建桶保证就绪
|
||||
|
||||
minio-init:
|
||||
image: minio/mc:latest
|
||||
container_name: kefu-prod-minio-init
|
||||
container_name: kefu-cloud-minio-init
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_started
|
||||
restart: "no"
|
||||
networks:
|
||||
- kefu_net
|
||||
- kefu_cloud_net
|
||||
entrypoint: >
|
||||
/bin/sh -c "
|
||||
set -e;
|
||||
@@ -70,8 +70,8 @@ services:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: deploy/docker/Dockerfile.api
|
||||
image: kefu-api:${IMAGE_TAG:-latest}
|
||||
container_name: kefu-prod-api
|
||||
image: kefu-cloud-api:${IMAGE_TAG:-latest}
|
||||
container_name: kefu-cloud-api
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
postgres:
|
||||
@@ -85,7 +85,7 @@ services:
|
||||
DB_PORT: "5432"
|
||||
DB_USER: ${DB_USER:-kefu}
|
||||
DB_PASSWORD: ${DB_PASSWORD}
|
||||
DB_NAME: ${DB_NAME:-kefu_sys}
|
||||
DB_NAME: ${DB_NAME:-kefu_cloud}
|
||||
DB_SSLMODE: ${DB_SSLMODE:-disable}
|
||||
JWT_SECRET: ${JWT_SECRET:?请设置 JWT_SECRET}
|
||||
STORAGE_ENDPOINT: minio:9000
|
||||
@@ -100,15 +100,15 @@ services:
|
||||
STORAGE_MAX_IMAGE_EDGE: ${STORAGE_MAX_IMAGE_EDGE:-1920}
|
||||
STORAGE_WEBP_QUALITY: ${STORAGE_WEBP_QUALITY:-80}
|
||||
networks:
|
||||
- kefu_net
|
||||
- kefu_cloud_net
|
||||
# 不对外暴露 8080,统一走 nginx
|
||||
|
||||
web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: deploy/docker/Dockerfile.web
|
||||
image: kefu-web:${IMAGE_TAG:-latest}
|
||||
container_name: kefu-prod-web
|
||||
image: kefu-cloud-web:${IMAGE_TAG:-latest}
|
||||
container_name: kefu-cloud-web
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
api:
|
||||
@@ -118,13 +118,13 @@ services:
|
||||
ports:
|
||||
- "${HTTP_PORT:-80}:80"
|
||||
networks:
|
||||
- kefu_net
|
||||
- kefu_cloud_net
|
||||
|
||||
# 可选:导入演示数据(profile seed)
|
||||
# docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod --profile seed run --rm seed
|
||||
seed:
|
||||
image: kefu-api:${IMAGE_TAG:-latest}
|
||||
container_name: kefu-prod-seed
|
||||
image: kefu-cloud-api:${IMAGE_TAG:-latest}
|
||||
container_name: kefu-cloud-seed
|
||||
profiles: ["seed"]
|
||||
depends_on:
|
||||
api:
|
||||
@@ -134,7 +134,7 @@ services:
|
||||
DB_PORT: "5432"
|
||||
DB_USER: ${DB_USER:-kefu}
|
||||
DB_PASSWORD: ${DB_PASSWORD}
|
||||
DB_NAME: ${DB_NAME:-kefu_sys}
|
||||
DB_NAME: ${DB_NAME:-kefu_cloud}
|
||||
DB_SSLMODE: ${DB_SSLMODE:-disable}
|
||||
JWT_SECRET: ${JWT_SECRET}
|
||||
STORAGE_ENDPOINT: minio:9000
|
||||
@@ -145,13 +145,13 @@ services:
|
||||
STORAGE_PUBLIC_BASE_URL: ${STORAGE_PUBLIC_BASE_URL}
|
||||
entrypoint: ["/app/seed"]
|
||||
networks:
|
||||
- kefu_net
|
||||
- kefu_cloud_net
|
||||
restart: "no"
|
||||
|
||||
networks:
|
||||
kefu_net:
|
||||
kefu_cloud_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
kefu_pgdata:
|
||||
kefu_miniodata:
|
||||
kefu_cloud_pgdata:
|
||||
kefu_cloud_miniodata:
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ DB_HOST=localhost
|
||||
DB_PORT=5433
|
||||
DB_USER=postgres
|
||||
DB_PASSWORD=postgres
|
||||
DB_NAME=kefu_sys
|
||||
DB_NAME=kefu_cloud
|
||||
DB_SSLMODE=disable
|
||||
|
||||
JWT_SECRET=kefu-sys-dev-secret-key
|
||||
JWT_SECRET=kefu-cloud-dev-secret-key
|
||||
|
||||
+7
-7
@@ -6,13 +6,13 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/config"
|
||||
"kefu-sys/server/internal/handler"
|
||||
"kefu-sys/server/internal/metrics"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-sys/server/internal/storage"
|
||||
"kefu-sys/server/internal/ws"
|
||||
"kefu-cloud/server/internal/config"
|
||||
"kefu-cloud/server/internal/handler"
|
||||
"kefu-cloud/server/internal/metrics"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
"kefu-cloud/server/internal/storage"
|
||||
"kefu-cloud/server/internal/ws"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
|
||||
"kefu-sys/server/internal/config"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/config"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
module kefu-sys/server
|
||||
module kefu-cloud/server
|
||||
|
||||
go 1.26.3
|
||||
|
||||
|
||||
@@ -57,11 +57,11 @@ func Load() *Config {
|
||||
Port: getEnv("DB_PORT", "5433"),
|
||||
User: getEnv("DB_USER", "postgres"),
|
||||
Password: getEnv("DB_PASSWORD", "postgres"),
|
||||
Name: getEnv("DB_NAME", "kefu_sys"),
|
||||
Name: getEnv("DB_NAME", "kefu_cloud"),
|
||||
SSLMode: getEnv("DB_SSLMODE", "disable"),
|
||||
},
|
||||
JWT: JWTConfig{
|
||||
Secret: getEnv("JWT_SECRET", "kefu-sys-secret-key"),
|
||||
Secret: getEnv("JWT_SECRET", "kefu-cloud-secret-key"),
|
||||
ExpireTime: 24 * time.Hour,
|
||||
},
|
||||
Storage: StorageConfig{
|
||||
|
||||
@@ -8,9 +8,9 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-sys/server/internal/storage"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
"kefu-cloud/server/internal/storage"
|
||||
)
|
||||
|
||||
type AdminHandler struct {
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-sys/server/internal/ws"
|
||||
"kefu-cloud/server/internal/model"
|
||||
"kefu-cloud/server/internal/ws"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -3,7 +3,7 @@ package handler
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
func TestPickLeastLoadedPrefersFewerSessions(t *testing.T) {
|
||||
|
||||
@@ -5,8 +5,8 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
type AuthHandler struct{}
|
||||
|
||||
@@ -9,8 +9,8 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
type ChannelHandler struct{}
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
type CustomerHandler struct{}
|
||||
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
// Export 导出客户列表 CSV(沿用列表筛选与坐席可见范围)。
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
type KnowledgeHandler struct{}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
|
||||
"kefu-sys/server/internal/storage"
|
||||
"kefu-cloud/server/internal/storage"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -10,11 +10,11 @@ import (
|
||||
"github.com/shirou/gopsutil/v4/cpu"
|
||||
"github.com/shirou/gopsutil/v4/disk"
|
||||
"github.com/shirou/gopsutil/v4/mem"
|
||||
"kefu-sys/server/internal/metrics"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-sys/server/internal/storage"
|
||||
"kefu-sys/server/internal/ws"
|
||||
"kefu-cloud/server/internal/metrics"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
"kefu-cloud/server/internal/storage"
|
||||
"kefu-cloud/server/internal/ws"
|
||||
)
|
||||
|
||||
// OpsMetrics 平台运维实时指标(当前 API 实例视角)。
|
||||
|
||||
@@ -2,9 +2,9 @@ package handler
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/config"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/storage"
|
||||
"kefu-cloud/server/internal/config"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/storage"
|
||||
)
|
||||
|
||||
func SetupRoutes(r *gin.Engine, store storage.ObjectStorage, storageCfg config.StorageConfig) {
|
||||
|
||||
@@ -15,11 +15,11 @@ import (
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
"kefu-sys/server/internal/config"
|
||||
"kefu-sys/server/internal/handler"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-sys/server/internal/storage"
|
||||
"kefu-cloud/server/internal/config"
|
||||
"kefu-cloud/server/internal/handler"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
"kefu-cloud/server/internal/storage"
|
||||
)
|
||||
|
||||
func setupRouter(t *testing.T) *gin.Engine {
|
||||
|
||||
@@ -9,9 +9,9 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-sys/server/internal/ws"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
"kefu-cloud/server/internal/ws"
|
||||
)
|
||||
|
||||
type SessionHandler struct{}
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
type SettingsHandler struct{}
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
type StaffHandler struct{}
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
type StatisticsHandler struct{}
|
||||
|
||||
@@ -9,10 +9,10 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/config"
|
||||
"kefu-sys/server/internal/media"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/storage"
|
||||
"kefu-cloud/server/internal/config"
|
||||
"kefu-cloud/server/internal/media"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/storage"
|
||||
)
|
||||
|
||||
type UploadHandler struct {
|
||||
|
||||
@@ -10,9 +10,9 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-sys/server/internal/ws"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/model"
|
||||
"kefu-cloud/server/internal/ws"
|
||||
)
|
||||
|
||||
type WidgetHandler struct{}
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/ws"
|
||||
"kefu-cloud/server/internal/middleware"
|
||||
"kefu-cloud/server/internal/ws"
|
||||
)
|
||||
|
||||
type WsHandler struct{}
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
var jwtSecret []byte
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
"kefu-sys/server/internal/config"
|
||||
"kefu-cloud/server/internal/config"
|
||||
)
|
||||
|
||||
// S3Storage 基于 minio-go 的 S3 兼容实现(MinIO / OSS / COS / AWS S3)
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-cloud/server/internal/model"
|
||||
)
|
||||
|
||||
var upgrader = websocket.Upgrader{
|
||||
|
||||
Reference in New Issue
Block a user