开发个人Go-ChatGPT--4 用户管理

开发个人Go-ChatGPT--4 用户管理

先看下我的目录结构,可以根据个人爱好,进行重构

bash 复制代码
|-- Dockerfile
|-- LICENSE
|-- common
|   |-- callmodel
|   |   |-- gemma.go
|   |   `-- models.go
|   |-- consts
|   |   |-- code.go
|   |   |-- common.go
|   |   |-- config.go
|   |   `-- consts.go
|   |-- cryptx
|   |   `-- crypt.go
|   |-- curlhttp
|   |   `-- curl.go
|   |-- database
|   |   |-- common.go
|   |   |-- connect.go
|   |   |-- dao.go
|   |   |-- ormLogx.go
|   |   |-- redisClient.go
|   |   `-- redisDao.go
|   |-- go.mod
|   |-- go.sum
|   |-- jwtx
|   |   `-- jwt.go
|   |-- middleware
|   |   `-- static.go
|   |-- model
|   |   |-- chat.sql
|   |   |-- chatmodel.go
|   |   |-- chatmodel_client.go
|   |   |-- prompt.sql
|   |   |-- promptmodel.go
|   |   |-- promptmodel_client.go
|   |   |-- readMe.md
|   |   |-- user.sql
|   |   |-- usermodel.go
|   |   `-- usermodel_client.go
|   `-- utils
|       `-- utils.go
|-- docker-compose.yaml
|-- nginx
|   `-- conf.d
|       `-- default.conf
|-- readme.md
`-- service
    |-- chat
    |   |-- api
    |   `-- rpc
    `-- user
        |-- api
        `-- rpc

4.1 生成 user model 模型

  • 创建 sql 文件 OpenUI 前端需要的字段,不可缺少。mysql服务需提前创建 openui库, user table

    sql 复制代码
    CREATE TABLE `user` (
                            `id` bigint unsigned NOT NULL AUTO_INCREMENT,
                            `name` varchar(255)  NOT NULL DEFAULT '' COMMENT '用户姓名',
                            `email` varchar(255)  NOT NULL DEFAULT '' COMMENT '用户电话',
                            `password` varchar(255)  NOT NULL DEFAULT '' COMMENT '用户密码',
                            `role` varchar(264)  NOT NULL DEFAULT '' COMMENT '用户角色',
                            `profile_image_url` varchar(255)  NOT NULL DEFAULT '' COMMENT '用户头像',
                            `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
                            `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                            PRIMARY KEY (`id`),
                            UNIQUE KEY `idx_email_unique` (`email`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;
  • 运行模板生成命令 model文件放置在通用目录,和go-zero官方案例不同

    bash 复制代码
    goctl model mysql ddl -src ./model/user.sql -dir ./model -c

4.2 生成 user api 服务

前缀,路由,传参,响应不可变,否则 openui调用失败

  • 创建 user.api 文件

    bash 复制代码
    type (
    	// 用户登录
    	LoginRequest {
    		Email    string `json:"email"`
    		Password string `json:"password"`
    	}
    	LoginResponse {
    		Id              int64  `json:"id"`
    		Name            string `json:"name"`
    		Role            string `json:"role"`
    		ProfileImageUrl string `json:"profile_image_url"`
    		Token           string `json:"token"`
    	}
    	// 用户登录
    	// 用户注册
    	RegisterRequest {
    		Name            string `json:"name"`
    		Email           string `json:"email"`
    		Password        string `json:"password"`
    		ProfileImageUrl string `json:"profile_image_url"`
    	}
    	RegisterResponse {
    		Id    int64  `json:"id"`
    		Name  string `json:"name"`
    		Token string `json:"token"`
    	}
    	// 用户注册
    	// 用户信息
    	UserInfoResponse {
    		Id              int64  `json:"id"`
    		Name            string `json:"name"`
    		Email           string `json:"email"`
    		Role            string `json:"role"`
    		ProfileImageUrl string `json:"
    profile_image_url"`
    	}
    // 用户信息
    )
    
    @server (
    	prefix: /api/v1
    )
    service User {
    	@handler Login
    	post /auths/signin (LoginRequest) returns (LoginResponse)
    
    	@handler Register
    	post /auths/signup (RegisterRequest) returns (RegisterResponse)
    }
    
    @server (
    	jwt:    Auth
    	prefix: /api/v1
    )
    service User {
    	@handler UserInfo
    	get /auths returns (UserInfoResponse)
    }
  • 运行模板生成命令

    bash 复制代码
    goctl api go -api ./api/user.api -dir ./api

4.3 生成 user rpc 服务

  • 创建 user.proto文件

    protobuf 复制代码
    syntax = "proto3";
    
    package userclient;
    
    option go_package = "./user";
    
    // 用户登录
    message LoginRequest {
        string Email = 1;
        string Password = 2;
    }
    message LoginResponse {
        int64 Id = 1;
        string Name = 2;
        string Token = 3;
        string Role = 4;
        string ProfileImageUrl = 5;
    }
    // 用户登录
    
    // 用户注册
    message RegisterRequest {
        string Name = 1;
        string Email = 2;
        string Password = 3;
        string ProfileImageUrl = 4;
    }
    message RegisterResponse {
        int64 Id = 1;
        string Name = 2;
        string Token = 3;
    }
    // 用户注册
    
    // 用户信息
    message UserInfoRequest {
        int64 Id = 1;
    }
    message UserInfoResponse {
        int64 Id = 1;
        string Name = 2;
        string Email = 3;
        string Role = 4;
        string ProfileImageUrl = 5;
    }
    // 用户信息
    
    service User {
        rpc Login(LoginRequest) returns(LoginResponse);
        rpc Register(RegisterRequest) returns(RegisterResponse);
        rpc UserInfo(UserInfoRequest) returns(UserInfoResponse);
    }
  • 运行模板生成命令

    bash 复制代码
    goctl rpc protoc ./rpc/user.proto --go_out=./rpc/types --go-grpc_out=./rpc/types --zrpc_out=./rpc

4.3 配置文件

  • rpc/etc

    yaml 复制代码
    Name: user.rpc
    ListenOn: 0.0.0.0:9001
    
    Etcd:
        Hosts:
            - xxxxxxxxxxxxxxxxxxxxxxxxx:2379
        Key: user.rpc
    
    Timeout: 0
    
    Mysql:
        Host: xxxxxxxxxxxxxx
        Port: 3306
        DbName: openui
        User: xxxxxx
        Password: "xxxxxxxxxxxxxxxxxxxxxxxxx"
        DBZone: "TS"
        Charset: utf8mb4
        MaxIdle: 10
        MaxOpen: 100
        LogMode: true
        Loc: Asia/Shanghai
        Debug: true
        TablePrefix: "v1_"
        MaxLifetime: 300
    
    # redis 支持选择db, 不使用go-zero官方库
    CacheRedis:
        Name: "openui"
        Nettype: "tcp"
        Address: "redis:6379"
        Auth: ""
        DB: 0
    
    Salt: ********************
    
    #日志配置
    LogConf:
        ServiceName: user.rpc
        Mode: file
        TimeFormat: 2006-01-02 15:04:05.000
        Path: logs
        Level: info
        Compress: true
        Stat: false # 不记录CPU、内存等信息
        KeepDays: 10
        MaxBackups: 2
  • api/etc

    yaml 复制代码
    Name: user.rpc
    ListenOn: 0.0.0.0:9001
    
    Etcd:
        Hosts:
            - xxxxxxxxxxxxxxxxxxxxxxxxx:2379
        Key: user.rpc
    
    Timeout: 0
    
    Mysql:
        Host: xxxxxxxxxxxxxx
        Port: 3306
        DbName: openui
        User: xxxxxx
        Password: "xxxxxxxxxxxxxxxxxxxxxxxxx"
        DBZone: "TS"
        Charset: utf8mb4
        MaxIdle: 10
        MaxOpen: 100
        LogMode: true
        Loc: Asia/Shanghai
        Debug: true
        TablePrefix: "v1_"
        MaxLifetime: 300
    # redis 支持选择db, 不使用go-zero官方库
    CacheRedis:
        Name: "openui"
        Nettype: "tcp"
        Address: "redis:6379"
        Auth: ""
        DB: 0
    
    Salt: *****************
    
    #日志配置
    LogConf:
        ServiceName: user.rpc
        Mode: file
        TimeFormat: 2006-01-02 15:04:05.000
        Path: logs
        Level: info
        Compress: true
        Stat: false # 不记录CPU、内存等信息
        KeepDays: 10
        MaxBackups: 2

4.4 业务处理

  • 业务处理就不过多描述了,具体处理流程可以看相应文件的实现

项目地址

jackwillsmith/openui-svelte-build (github.com)
GitHub - jackwillsmith/openui-backend-go: openui-backend-go

相关推荐
二川bro8 小时前
从AlphaGo到ChatGPT:AI技术如何一步步改变世界?
人工智能·chatgpt
松小鼠呀10 小时前
生活破破烂烂,AI 缝缝补补(附提示词)
人工智能·chatgpt·生活·程序员创富·投资·财富自由
我重来不说话1 天前
免费Ollama大模型集成系统——Golang
golang·gin·ollama·免费大模型
浪淘沙jkp1 天前
AI大模型学习十八、利用Dify+deepseekR1 +本地部署Stable Diffusion搭建 AI 图片生成应用
人工智能·stable diffusion·agent·dify·ollama·deepseek
小声读源码1 天前
【技巧】使用frpc点对点安全地内网穿透访问ollama服务
内网穿透·frpc·ollama·安全访问
一丝晨光2 天前
数值溢出保护?数值溢出应该是多少?Swift如何让整数计算溢出不抛出异常?类型最大值和最小值?
java·javascript·c++·rust·go·c·swift
小洛~·~2 天前
多模态RAG与LlamaIndex——1.deepresearch调研
人工智能·python·深度学习·神经网络·chatgpt
pedestrian_h2 天前
Spring AI 开发本地deepseek对话快速上手笔记
java·spring boot·笔记·llm·ollama·deepseek
木偶彡2 天前
如何通过http访问ollama接口
大模型·ollama·deepseek
Narutolxy3 天前
大模型数据分析破局之路20250512
人工智能·chatgpt·数据分析