开发个人Ollama-WebUI--4 用户管理

开发个人Ollama-WebUI–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 业务处理

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

项目地址

[openui-frontend](jackwillsmith/openui-svelte-build (github.com))

[openui-backend-go](GitHub - jackwillsmith/openui-backend-go: openui-backend-go)

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

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

相关文章

股价持续低迷,业绩颓势不减,冀光恒难救平安银行?

文|新熔财经 作者|宏一 周一一上班,就听到旁边的同事感慨今年股市行情很不错,尤其是银行股,上半年累计上涨了17.02%,是涨幅最大的板块。 听到这里,我美滋滋地打开自己的账户,结…

如何使用PostgreSQL

要使用PostgreSQL,你可以按照以下步骤进行操作: 1. 安装PostgreSQL:根据你的操作系统,下载并安装相应版本的PostgreSQL。 2. 启动PostgreSQL服务器:安装完成后,你需要启动PostgreSQL服务器。在Windows上&…

spdlog一个非常好用的C++日志库(四): 源码分析之logger类

目录 1.简介 2.类图关系 3.logger数据成员 4.logger函数成员 4.1.构造与析构 4.1.1.构造函数 4.1.2.拷贝构造、移动构造 4.2.交换操作 4.3.log()记录日志消息 4.3.1.格式串 4.3.2.普通字符串 4.3.3.日志级别 4.3.4.宽字符支持 4.4.sink_it_:将log消息…

PLC工作原理

PLC(可编程逻辑控制器)的工作原理简述为:集中采样、集中输出、周期性循环扫描。 西门子PLC 一、集中采样 顺序读取所有输入端子的通断状态,并将所读取的信息存到输入映像寄存器中,此时输入映像寄存器被刷新&#xff…

三坐标测量机:柔性生产制造中的高精度测量解决方案

柔性生产制造是制造业的核心竞争力之一。它强调生产线的灵活性和适应性,以满足市场对产品多样化和个性化的需求。在当今快速变化的工业环境中,随着消费者对产品个性化和定制化需求的增加,柔性生产制造和三坐标测量机的结合,为智能…

尽量不写一行if...elseif...写出高质量可持续迭代的项目代码

背景 无论是前端代码还是后端代码,都存在着定位困难,不好抽离,改造困难的问题,造成代码开发越来越慢,此外因为代码耦合较高,总是出现改了一处地方,然后影响其他地方,要么就是要修改…

通讯录(C语言详细版)

1. 前言 通讯录是在动态顺序表的基础上实现的,其实就是顺序表的每个元素存储的不再是数字,而是存储一个联系人的结构体,所以如果有些小伙伴看不懂的话,可以移步参考一下动态顺序表的实现:顺序表(C语言详细…

【C语言】auto 关键字

在C语言中,auto关键字用于声明局部变量,但它的使用已经变得很少见。事实上,从C99标准开始,auto关键字的默认行为就是隐含的,因此在大多数情况下无需显式使用它。 基本用法 在C语言中,auto关键字用于指定变…

ntp服务

https://blog.csdn.net/weixin_39168541/article/details/123741031

SpringBoot应用配置桥接Prometheus入门

SpringBoot应用配置Prometheus步骤 SpringBoot应用依赖要求PrometheusGrafanaGrafana监控界面模板 SpringBoot应用依赖要求 <!-- 监控系统健康情况的工具 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

【3分钟准备前端面试】vue3

目录 Vue3比vue2有什么优势vue3升级了哪些重要功能生命周期变化Options APIComposition APIreftoRef和toRefstoReftoRefsHooks (代码复用)Vue3 script setupsetupdefineProps和defineEmitsdefineExposeVue3比vue2有什么优势 性能更好体积更小更好的TS支持更好的代码组织更好的逻…

104.二叉树的最大深度——二叉树专题复习

深度优先搜索&#xff08;DFS&#xff09;是一种常用的递归算法&#xff0c;用于解决树形结构的问题。在计算二叉树的最大深度时&#xff0c;DFS方法会从根节点开始&#xff0c;递归地计算左右子树的最大深度&#xff0c;然后在返回时更新当前节点所在路径的最大深度。 如果我…

PyAutoGUI 使用详解

文章目录 简介PyAutoGUI 的原理安装 PyAutoGUI基本使用示例鼠标控制键盘控制截屏图像识别消息框 高级功能防止误操作多屏幕支持鼠标平滑移动 结论 简介 PyAutoGUI 是一个用于自动化控制鼠标和键盘的 Python 库。它可以帮助开发者编写脚本&#xff0c;以模拟用户在计算机上的操…

每日复盘-20240704

今日关注&#xff1a; 20240704 六日涨幅最大: ------1--------300391--------- 长药控股 五日涨幅最大: ------1--------300391--------- 长药控股 四日涨幅最大: ------1--------300391--------- 长药控股 三日涨幅最大: ------1--------300391--------- 长药控股 二日涨幅最…

[笔记]小米CyberDog机器狗仿真调试记录

从官方github的所有源码库来看&#xff0c;所有的source命令只有两条&#xff0c;执行它以配置环境变量&#xff1a; source /opt/ros/galactic/setup.bash source /home/cyberdog_ws/install/setup.bash 如果运行脚本之后gazebo正常启动及机器狗模型在悬空状态&#xff0c;问…

三位数重新排列c++

题目描述 给你一个三位数 n&#xff08;保证最高位不是 0&#xff09;&#xff0c;你可以重新调整它三个数位的顺序&#xff0c;请输出结果最小的一种。 输入 第一行一个整数 n。 输出 一行一个整数&#xff0c;重新调整顺序后&#xff0c;最小的结果。 注意&#xff0c;…

文心一言 VS 讯飞星火 VS chatgpt (295)-- 算法导论21.4 4题

四、利用练习 21.4-2 &#xff0c;请给出一个简单的证明&#xff0c;证明在一个不相交集合森林上使用按秩合并策略而不使用路径压缩策略的运行时间为 O(m lgn) 。21.4-2 的内容是&#xff1a;“证明&#xff1a;每个结点的秩最多为 ⌊lgn⌋ 。”。如果要写代码&#xff0c;请用…

objdump

objdump是一个用于在Linux系统中查看和解析对象文件&#xff08;如可执行文件、目标文件和共享库&#xff09;的命令行工具。它可以展示文件的多种信息&#xff0c;包括汇编代码、符号表、调试信息等。objdump的常用选项包括&#xff1a; -d 或 --disassemble&#xff1a;反汇编…

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法&#xff0c;使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上&#xff0c;所有的vue模板都是语法层面的HTML&#xff0c;可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…

Kafka 为何如此之快?深度解析其背后的秘密

目录 前言 一、生产者 1. 异步发送 2. 多分区并行 3. 消息批量发送 4.支持消息压缩 二、存储端 1. 分区和副本 2. 页缓存 3. 磁盘顺序写入 4. 零拷贝技术 5. 稀疏索引 三、消费端 1. 消费者群组 2. 批量拉取 3. 高效的偏移量管理 4. 并行消费 总结 前言 Kafk…