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

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

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

|-- 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

    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官方案例不同

    goctl model mysql ddl -src ./model/user.sql -dir ./model -c
    

4.2 生成 user api 服务

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

  • 创建 user.api 文件

    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 Loginpost /auths/signin (LoginRequest) returns (LoginResponse)@handler Registerpost /auths/signup (RegisterRequest) returns (RegisterResponse)
    }@server (jwt:    Authprefix: /api/v1
    )
    service User {@handler UserInfoget /auths returns (UserInfoResponse)
    }
  • 运行模板生成命令

    goctl api go -api ./api/user.api -dir ./api
    

4.3 生成 user rpc 服务

  • 创建 user.proto文件

    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);
    }
  • 运行模板生成命令

    goctl rpc protoc ./rpc/user.proto --go_out=./rpc/types --go-grpc_out=./rpc/types --zrpc_out=./rpc
    

4.3 配置文件

  • rpc/etc

    Name: user.rpc
    ListenOn: 0.0.0.0:9001Etcd:Hosts:- xxxxxxxxxxxxxxxxxxxxxxxxx:2379Key: user.rpcTimeout: 0Mysql:Host: xxxxxxxxxxxxxxPort: 3306DbName: openuiUser: xxxxxxPassword: "xxxxxxxxxxxxxxxxxxxxxxxxx"DBZone: "TS"Charset: utf8mb4MaxIdle: 10MaxOpen: 100LogMode: trueLoc: Asia/ShanghaiDebug: trueTablePrefix: "v1_"MaxLifetime: 300# redis 支持选择db, 不使用go-zero官方库
    CacheRedis:Name: "openui"Nettype: "tcp"Address: "redis:6379"Auth: ""DB: 0Salt: ********************#日志配置
    LogConf:ServiceName: user.rpcMode: fileTimeFormat: 2006-01-02 15:04:05.000Path: logsLevel: infoCompress: trueStat: false # 不记录CPU、内存等信息KeepDays: 10MaxBackups: 2
  • api/etc

    Name: user.rpc
    ListenOn: 0.0.0.0:9001Etcd:Hosts:- xxxxxxxxxxxxxxxxxxxxxxxxx:2379Key: user.rpcTimeout: 0Mysql:Host: xxxxxxxxxxxxxxPort: 3306DbName: openuiUser: xxxxxxPassword: "xxxxxxxxxxxxxxxxxxxxxxxxx"DBZone: "TS"Charset: utf8mb4MaxIdle: 10MaxOpen: 100LogMode: trueLoc: Asia/ShanghaiDebug: trueTablePrefix: "v1_"MaxLifetime: 300
    # redis 支持选择db, 不使用go-zero官方库
    CacheRedis:Name: "openui"Nettype: "tcp"Address: "redis:6379"Auth: ""DB: 0Salt: *****************#日志配置
    LogConf:ServiceName: user.rpcMode: fileTimeFormat: 2006-01-02 15:04:05.000Path: logsLevel: infoCompress: trueStat: false # 不记录CPU、内存等信息KeepDays: 10MaxBackups: 2

4.4 业务处理

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

项目地址

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s 部署RuoYi-Vue-Plus之nginx部署

1.挂载存储 可参考 之前文章设置 https://blog.csdn.net/weimeibuqieryu/article/details/140183843 2.部署yaml 先创建命名空间ruoyi, 有就不用创建了 kubectl create namespace ruoyi我暂不需要使用xxjob和Monitor模块, 所以去除了. 有需要再自行添加 需要先启动后端服务…

(ECCV,2022)Mask-CLIP:从CLIP中提取自由密集标签

文章目录 Extract Free Dense Labels from CLIP相关资料摘要引言方法Mask-CLIPMask-CLIP 实验 Extract Free Dense Labels from CLIP 相关资料 代码:https://github.com/chongzhou96/MaskCLIP 论文:https://arxiv.org/abs/2112.01071 摘要 对比语言-…

SprongBoot及其基础应用全套部署脚本和配置

POM.xml配置 </dependencies> <!--skywalking日志监控依赖--><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.5.0</version></dependency&g…

修改编译依赖openssl的libcrypto.so

由于centos7默认使用openssl1.0.2k的libcrypto.so.10共享库。即使openssl升级为3.0.11后&#xff0c;编译使用ldd命令查看共享库依旧会引用libcrypto.so.10。 现希望引用libcrypto.so.3&#xff0c;需要在生成动态链接库的CMakeLists.txt中增加如下配置&#xff0c;明确指定ope…

《警世贤文》摘抄:守法篇、惜时篇、修性篇、修身篇、待人篇、防人篇(建议多读书、多看报、少吃零食多睡觉)

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140243440 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

mysql 连接出现 Public Key Retrieval is not allowed

在MySQL连接中出现“Public Key Retrieval is not allowed”错误&#xff0c;通常是因为在使用安全套接字层&#xff08;SSL&#xff09;连接时遇到了问题。这是因为MySQL 8.0及以上版本对安全性要求更高&#xff0c;特别是在使用密码插件如caching_sha2_password时&#xff0c…

【周末闲谈】AI“抢饭碗”?绝对不是危言耸听

AI是在帮助开发者还是取代他们? 在软件开发领域,生成式人工智能(AIGC)正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试,AI工具正在成为开发者的得力助手。然而,这也引发了对开发者职业前景和技能需求变化的讨论。AI究竟是在帮助开发者还是取代他们?…

2024组装一台能跑AI大模型的电脑

title: 2024组装一台能跑AI大模型的电脑 tags: [组装电脑, AI大模型] categories: [其他, 电脑, windows] 这里不写组装步骤&#xff0c;哪里接线&#xff0c;购买什么品牌网上一大堆。 这里只写如何根据你自己的需求&#xff0c;选择合适的、兼容的配件。 概述 需求&#xff…

本地多卡(3090)部署通义千问Qwen2-72B大模型提速实践:从龟速到够用

最近在做文本风格转化&#xff0c;涉及千万token级别的文本。想用大模型转写&#xff0c;在线的模型一来涉及数据隐私&#xff0c;二来又不想先垫钱再找报销。本地的7-9B小模型又感觉效果有限&#xff0c;正好实验室给俺配了4卡3090的机子&#xff0c;反正也就是做个推理&#…

运维系列.Nginx配置中的高级指令和流程控制

运维专题 Nginx配置中的高级指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

ssrf结合redis未授权getshell

目录 漏洞介绍 SSRF Redis未授权 利用原理 环境搭建 利用过程 rockylinux cron计划任务反弹shell 写公钥免密登录 ubuntu 写公钥免密登录 漏洞介绍 SSRF SSRF&#xff08;server side request forgrey&#xff09;服务端请求伪造&#xff0c;因后端未过滤用户输入&…

桂花网蓝牙网关X1000:引领物联网新时代的智能连接

在物联网技术飞速发展的今天&#xff0c;蓝牙网关作为连接蓝牙设备与互联网的关键设备&#xff0c;其性能与稳定性直接影响到物联网系统的整体运行效果。桂花网蓝牙网关X1000凭借其卓越的性能和广泛的应用场景&#xff0c;成为了物联网领域的佼佼者。 一、产品概述 桂花网蓝牙…

【修仙小伙伴】第1章 天眼计划

自古以来&#xff0c;人类对于地外文明的探索&#xff0c;就不曾停止过。 而在古代文献《拾遗记》之中&#xff0c;就有「秦始皇」和所谓「宛渠之民」的对话记载&#xff1a; 始皇好神仙之事&#xff0c;有宛渠之民&#xff0c;乘螺舟而至。 舟形似螺&#xff0c;沉行海底&a…

服务端事件推送——HTTP协议的事件流(EventStream)

背景 最近由于工作要求需要使用Springboot搭建一个流式响应服务&#xff0c;即客户端发送一次请求&#xff0c;服务端需要多次响应才能返回完整的数据。使用场景就是与chatGPT对话&#xff0c;你问一个问题&#xff0c;页面会逐字将结果打印出来。 下面我在SpringBoot中可以简…

使用Ckman部署ClickHouse集群介绍

使用Ckman部署ClickHouse集群介绍 1. Ckman简介 ClickHouse Manager是一个为ClickHouse数据库量身定制的管理工具&#xff0c;它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&…

Leetcode 3213. Construct String with Minimum Cost

Leetcode 3213. Construct String with Minimum Cost 1. 解题思路2. 代码实现 题目链接&#xff1a;3213. Construct String with Minimum Cost 1. 解题思路 这一题的话思路上还是比较直接的&#xff0c;就是一个trie树加一个动态规划&#xff0c;通过trie树来快速寻找每一个…

k8s-第七节-ConfigMap Secret

ConfigMap & Secret ConfigMap 数据库连接地址&#xff0c;这种可能根据部署环境变化的或者其他容器配置选项的包括容器更新或者扩容时可以统一配置 Kubernetes 为我们提供了 ConfigMap&#xff0c;可以方便的配置一些变量。 https://kubernetes.io/zh/docs/concepts/c…

Angluar 实现pdf页面预览以及编辑

之前用过一个pdf预览的lib&#xff0c;并且还支持在线编辑&#xff0c;和直接下载编辑之后的pdf和直接打印&#xff0c;还不错&#xff0c;记录下 PdfShowcase 首先安装依赖 npm install ngx-extended-pdf-viewer 然后引入 import { NgxExtendedPdfViewerModule } from &q…

硅纪元视角 | 中国电信“星辰大模型·软件工厂”,两分钟完成应用开发,效率飞跃!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

【数据结构】链表带环问题分析及顺序表链表对比分析

【C语言】链表带环问题分析及顺序表链表对比分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】链表带环问题分析及顺序表链表对比分析前言一.顺序表和链表对比1.1顺序表和链表的区别1.2缓存利用率&#…