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

相关推荐
ToToBe9 小时前
L1G3000 提示工程(Prompt Engineering)
chatgpt·prompt
龙的爹23339 小时前
论文 | Legal Prompt Engineering for Multilingual Legal Judgement Prediction
人工智能·语言模型·自然语言处理·chatgpt·prompt
bytebeats11 小时前
我用 Spring AI 集成 OpenAI ChatGPT API 创建了一个 Spring Boot 小程序
spring boot·chatgpt·openai
于顾而言11 小时前
【笔记】Go Coding In Go Way
后端·go
qq_1728055911 小时前
GIN 反向代理功能
后端·golang·go
&永恒的星河&14 小时前
Hunyuan-Large:推动AI技术进步的下一代语言模型
人工智能·语言模型·自然语言处理·chatgpt·moe·llms
follycat18 小时前
2024强网杯Proxy
网络·学习·网络安全·go
OT.Ter20 小时前
【力扣打卡系列】单调栈
算法·leetcode·职场和发展·go·单调栈
探索云原生21 小时前
GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU
ai·云原生·kubernetes·go·gpu
waiting不是违停21 小时前
LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器
langchain·llm·ollama