一个基于Golang的简易银行,根据视频教程Backend Master Class写成,在某些地方有所改动
主要功能:创建用户时发送验证邮箱,用户的账号之间转账,用户登录的权限验证
蓝色线表示有外键约束
使用PostgreSQL数据库
- users 存储用户的各种信息,每个用户可以创建多个账号(account),一个账号对应一个币种
- verify_emails 存储创建用户时验证邮件的各种信息
- sessions 存储登录用户时的各种信息,比如刷新令牌(refresh token)
- accounts 存储用户下的账号信息
- entries 存储账号的收支记录
- transfers 存储不同账号之间的转账记录
使用sqlc
,在sqlc.yaml文件中设置好连接的数据库即可将SQL查询生成go代码文件
支持事务操作
附带各种操作的测试
使用gomigrate
进行数据库迁移
使用viper
,在.env文件中获取环境变量,更改配置不需要重新编译
使用Gin
搭建web服务器
使用gomock
创建假数据库,使用httptest
创建假web服务器,容易测试API
也可以使用grpc网关代替Gin
定义proto文件后,使用protoc
生成对应go代码,搭建grpc服务器
使用grpc gateway
把http请求转化为grpc请求,做到同时服务http和grpc请求
使用swagger UI
构建文档
使用zerolog
对不同的gprc请求打印对应的结构化日志(json格式)
使用JWT
/Pasteo
获取短期的访问令牌(access token)
数据库内部存储会话(session)
,会话中包含一个长时间的刷新令牌,以获得长期登录权限
使用asynq
与Redis
来解决任务处理持久化问题
在创建用户的同时发送验证邮件
使用Redis
进行该任务处理
使用事务,避免数据库创建用户成功但Redis处理失败,导致下一次无法创建用户(重复)的问题
无论使用哪种方法运行,都需要新建一个private.env
文件设置自己的邮件地址和密码:
EMAIL_SENDER_ADDRESS=youremail
EMAIL_SENDER_PASSWORD=yourpassword
注意:邮箱密码一般都不会是账号密码,而是需要生成一个应用专用密码
可以在配置好各种环境后,运行make server
命令来启动程序
本项目也配置好了docker-compose,其二进制文件与postgres一起组成容器
只需要运行docker-compose up
即可