开发个人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

相关推荐
苏三有春27 分钟前
五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)
git·go·github
AIGC大时代3 小时前
如何使用ChatGPT辅助文献综述,以及如何进行优化?一篇说清楚
人工智能·深度学习·chatgpt·prompt·aigc
hunteritself12 小时前
AI Weekly『12月16-22日』:OpenAI公布o3,谷歌发布首个推理模型,GitHub Copilot免费版上线!
人工智能·gpt·chatgpt·github·openai·copilot
我是前端小学生15 小时前
Go语言中的方法和函数
go
探索云原生20 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
测试者家园20 小时前
ChatGPT生成接口文档的方法与实践
软件测试·chatgpt·测试用例·接口测试·接口文档·ai赋能·用chatgpt做软件测试
小虚竹1 天前
如何利用ChatGPT生成不同类型的文章大纲
chatgpt
自在的LEE1 天前
当 Go 遇上 Windows:15.625ms 的时间更新困局
后端·kubernetes·go
AI小欧同学1 天前
【AIGC-ChatGPT进阶副业提示词】育儿锦囊:化解日常育儿难题的实用指南
chatgpt·aigc
测试者家园1 天前
ChatGPT接口测试用例生成的流程
软件测试·chatgpt·测试用例·接口测试·测试图书·质量效能·用chatgpt做测试