Files
Ubuntu c68ea3b600 feat: 智能客服系统基础架构完成
 已完成功能:
1. 项目基础设施和Docker开发环境
2. 前端React 18 + TypeScript架构
3. 后端Golang + Gin框架
4. 多租户数据库设计
5. 完整API路由系统
6. 智能客服聊天界面
7. 详细文档和部署指南

🔧 技术栈:
- 前端:React 18, TypeScript, Vite, Zustand
- 后端:Golang, Gin, GORM, PostgreSQL
- 部署:Docker, Docker Compose

🎨 设计规范:
- 无渐变色,无紫色
- 简洁专业的中性色系
- 响应式布局

📊 状态:
- 前端开发服务器:http://localhost:5173
- 后端API服务:http://localhost:8080
- 数据库:PostgreSQL + Redis
- 完整的多租户架构

作者:小弟 (大哥的AI助手)
日期:2026-02-27
2026-02-27 17:00:15 +08:00

70 lines
1.5 KiB
Go

package server
import (
"context"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"smart-customer-service/config"
"smart-customer-service/internal/router"
"syscall"
"time"
)
type Server struct {
cfg *config.Config
router *router.Router
server *http.Server
}
func New(cfg *config.Config) *Server {
r := router.New(cfg)
return &Server{
cfg: cfg,
router: r,
server: &http.Server{
Addr: fmt.Sprintf(":%d", cfg.Server.Port),
Handler: r.SetupRoutes(),
ReadTimeout: time.Duration(cfg.Server.ReadTimeout) * time.Second,
WriteTimeout: time.Duration(cfg.Server.WriteTimeout) * time.Second,
},
}
}
func (s *Server) Run() error {
// 启动HTTP服务器
go func() {
log.Printf("Server starting on port %d", s.cfg.Server.Port)
if err := s.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("Failed to start server: %v", err)
}
}()
// 启动WebSocket服务器
go func() {
log.Printf("WebSocket server starting on port %d", s.cfg.WebSocket.Port)
// TODO: 启动WebSocket服务器
}()
// 等待中断信号
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("Shutting down server...")
// 优雅关闭
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if err := s.server.Shutdown(ctx); err != nil {
return fmt.Errorf("server forced to shutdown: %v", err)
}
log.Println("Server exited properly")
return nil
}