開發個人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.pswp.cn/web/41427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41427.shtml
英文地址,請注明出處:http://en.pswp.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緩存利用率&#…