From 44de572f1bb45c86ddc2d3732cfc1a806fd55def Mon Sep 17 00:00:00 2001 From: landaiqing Date: Wed, 27 Nov 2024 21:13:46 +0800 Subject: [PATCH] :art: update --- .gitignore | 1 + README.md | 48 ++- controller/oauth_controller/qq_controller.go | 8 +- core/redis.go | 2 + example.config.yaml | 189 ++++++++ go.mod | 1 - go.sum | 25 +- model/sca_user_follows.go | 19 + model/sca_user_level.go | 23 + sql.sql | 428 +++++++++++++++++++ 10 files changed, 714 insertions(+), 30 deletions(-) create mode 100644 example.config.yaml create mode 100644 model/sca_user_follows.go create mode 100644 model/sca_user_level.go create mode 100644 sql.sql diff --git a/.gitignore b/.gitignore index 9b09d3b..354de4b 100644 --- a/.gitignore +++ b/.gitignore @@ -103,3 +103,4 @@ fabric.properties # Android studio 3.1+ serialized cache file .idea/caches/build_file_checksums.ser +config.yaml diff --git a/README.md b/README.md index 5e263be..ded2c29 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,47 @@ -# schisandra-cloud-album +# gin 模板代码 -五味子云相册 \ No newline at end of file +## 环境准备 + +- go 1.19+ + +## 功能说明 + +### 注册登录 + +- 手机号注册登录 +- 账号密码登录 +- 微信公众号扫码登录 +- 忘记密码 +- 第三方登录(QQ、Gitee、GitHub) + +### 评论 + +- 评论列表 +- 评论回复 +- 评论点赞 + +### 具体技术栈 + +- gin 框架 +- gorm 数据库ORM框架 +- jwt 双token验证 +- redis 缓存 +- powerWechat 微信公众号扫码登录 +- websocket 扫码登录监听状态 +- 第三方登录(QQ、Gitee、GitHub) +- 短信发送 (阿里云短信,短信宝) +- mongodb 数据库存储评论图片 +- 评论图片nsfw检测 +- go i18n 国际化 +- casbin 权限管理 +- ip2region 实现ip定位 +- nsq 消息队列(异步处理评论点赞) +- 日志记录(logrus 按天记录日志,按照等级分文件记录日志) +- 评论敏感词检测 +- go-captcha 验证码(滑动验证,旋转验证,点选验证) + + + + + + \ No newline at end of file diff --git a/controller/oauth_controller/qq_controller.go b/controller/oauth_controller/qq_controller.go index 715192d..7fc27f6 100644 --- a/controller/oauth_controller/qq_controller.go +++ b/controller/oauth_controller/qq_controller.go @@ -4,16 +4,18 @@ import ( "encoding/json" "errors" "fmt" + "net/http" + "strconv" + ginI18n "github.com/gin-contrib/i18n" "github.com/gin-gonic/gin" "github.com/yitter/idgenerator-go/idgen" "gorm.io/gorm" - "net/http" + "schisandra-cloud-album/common/enum" "schisandra-cloud-album/common/result" "schisandra-cloud-album/global" "schisandra-cloud-album/model" - "strconv" ) type AuthQQme struct { @@ -94,7 +96,7 @@ func GetQQToken(url string) (*QQToken, error) { global.LOG.Error(err) return nil, err } - //将响应体解析为 token,并返回 + // 将响应体解析为 token,并返回 var token QQToken if err = json.NewDecoder(res.Body).Decode(&token); err != nil { global.LOG.Error(err) diff --git a/core/redis.go b/core/redis.go index 88429ac..944c7ec 100644 --- a/core/redis.go +++ b/core/redis.go @@ -2,6 +2,7 @@ package core import ( "github.com/redis/go-redis/v9" + "schisandra-cloud-album/global" ) @@ -15,6 +16,7 @@ func InitRedis() { PoolSize: global.CONFIG.Redis.PoolSize, MinIdleConns: global.CONFIG.Redis.MinIdle, PoolTimeout: global.CONFIG.Redis.PoolTimeout, + ReadTimeout: -1, }) InitSession(rdb) global.REDIS = rdb diff --git a/example.config.yaml b/example.config.yaml new file mode 100644 index 0000000..7edab21 --- /dev/null +++ b/example.config.yaml @@ -0,0 +1,189 @@ +# 系统配置 +system: + # 主机地址 + host: 0.0.0.0 + # 端口 + port: 80 + # 环境 + env: debug + # 协议 + protocol: http + # 前端地址 + web: localhost:5173 + # 信任代理ip地址 + ip: 127.0.0.1 +#swagger配置 +swagger: + # 是否启用swagger + enable: true + # 文档标题 + title: Schisandra Cloud Album API + # 文档描述 + description: Schisandra Cloud Album API + # 用户名 + user: schisandra + # 密码 + password: schisandra +# MySQL配置 +mysql: + # 主机地址 + host: + # 端口 + port: 3306 + # 数据库名称 + db: schisandra-cloud-album + # 用户名 + user: root + # 密码 + password: xxxxxxxx + # 日志级别 + log-level: dev + # 最大连接数 + max-open-connes: 100 + # 最大空闲连接数 + max-idle-connes: 10 + # 连接配置 + config: charset=utf8mb4&parseTime=True&loc=Local +mongodb: + # 主机地址 + host: xxxxx + # 端口 + port: 27017 + # 认证源 + auth-source: admin + # 数据库名称 + db: schisandra-cloud-album + # 用户名 + user: xxxx + # 密码 + password: xxx + # 超时时间 + timeout: 5 + # 最大连接数 + max-open-connes: 100 + # 最大空闲连接数 + max-idle-connes: 10 +# 日志配置 +logger: + # 日志级别 + level: info + # 日志前缀 + prefix: schisandra + # 日志文件存放目录 + director: "tmp/logs" + # 是否显示文件行号 + show-line: true + # 日志文件名 + log-name: schisandra-cloud-album +# Redis配置 +redis: + # 主机地址 + host: + # 端口 + port: 6379 + # 密码 + password: xxxxx + # 数据库 + db: 0 + # 最大连接数 + max-active: 100 + # 最大空闲连接数 + max-idle: 10 + # 最小空闲连接数 + min-idle: 1 + # 连接池大小 + pool-size: 10 + # 连接池超时时间 + pool-timeout: 2000ms +# 短信配置 +sms: + ali: + # 阿里云API地址 + host: http://dysmsapi.aliyuncs.com + # 阿里云AccessKeyId + access-key-id: xxxxx + # 阿里云AccessKeySecret + access-key-secret: xxxxx + # 短信模板ID + template-id: SMS_154950909 + # 短信签名 + signature: 阿里云短信测试 + sms-bao: + # 短信宝用户账号 + user: xxx + # 短信宝用户密码 + password: xxx +# JWT配置 +jwt: + # JWT加密密钥 + secret: 52305be97465408891694329b94fd0b5 + # JWT请求头键名 + header-key: Authorization + # JWT请求头前缀 + header-prefix: Bearer + # JWT签发者 + issuer: schisandra-cloud-album +# 加密配置 +encrypt: + # 加密密钥 32位 + key: 38h0ex04du8qqf9ar2knn1quicdsm4s0 + # 加密向量 16位 + iv: qkwsbzdnzzcekt7g + # 公钥 + public-key: + # 私钥 + private-key: +# 微信配置 +wechat: + # 微信公众号APPID + app-id: xxxxx + # 微信公众号APPSECRET + app-secret: xxxx + # 微信公众号Token + token: xxxx + # 微信公众号EncodingAESKey + aes-key: +oauth: + # Github配置 + github: + # Github客户端ID + client-id: xxxx + # Github客户端密钥 + client-secret: xxxx + # Github回调地址 + redirect-uri: https://landaiqing.cn/api/oauth/github/callback + # Gitee配置 + gitee: + # Gitee客户端ID + client-id: xxxx + # Gitee客户端密钥 + client-secret: xxxx + # Gitee回调地址 + redirect-uri: https://landaiqing.cn/api/oauth/gitee/callback + # QQ配置 + qq: + # QQ客户端ID + client-id: xxxx + # QQ客户端密钥 + client-secret: xxxx + # QQ回调地址 + redirect-uri: https://landaiqing.cn/api/oauth/qq/callback +casbin: + # 权限模型文件路径 + model-path: config/rbac_model.conf + # 数据库前缀 + table-prefix: sca_auth_ + # 数据库表明 + table-name: permission_rule +# nsq配置 +nsq: + # nsqd地址 + host: xxx + # nsqd端口 + port: 4150 + # nsqlookupd地址 + lookupd-host: xxxx + # nsqlookupd端口 + lookupd-port: 4161 + + diff --git a/go.mod b/go.mod index 61b8403..09e95b2 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,6 @@ require ( github.com/swaggo/swag v1.16.4 github.com/wenlng/go-captcha-assets v1.0.1 github.com/wenlng/go-captcha/v2 v2.0.1 - github.com/wumansgy/goEncrypt v1.1.0 github.com/yitter/idgenerator-go v1.3.3 github.com/zmexing/go-sensitive-word v1.3.0 go.mongodb.org/mongo-driver v1.17.1 diff --git a/go.sum b/go.sum index 83f85b2..8cb1cd8 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,6 @@ github.com/ArtisanCloud/PowerLibs/v3 v3.2.6 h1:xNDXBJ1VNYAEgs4UG/lSygzU66/XG3mTA github.com/ArtisanCloud/PowerLibs/v3 v3.2.6/go.mod h1:xFGsskCnzAu+6rFEJbGVAlwhrwZPXAny6m7j71S/B5k= github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7 h1:P+erNlErr+X2v7Et+yTWaTfIRhw+HfpAPdvNIEwk9Gw= github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7/go.mod h1:VZQNCvcK/rldF3QaExiSl1gJEAkyc5/I8RLOd3WFZq4= -github.com/ArtisanCloud/PowerWeChat/v3 v3.2.50 h1:fuAnuGF1nV1ziva7Hme6/TyFhYdU+dL8DBNNP2euzfg= -github.com/ArtisanCloud/PowerWeChat/v3 v3.2.50/go.mod h1:HgdxYE6yV9OAMKIvHNRHUShq6auhFK0T2sIpUd1dG5o= github.com/ArtisanCloud/PowerWeChat/v3 v3.2.55 h1:NKyw6PPEeomEieDMoEXvtL0RkFP6oFepJ1Jsn/6zE9w= github.com/ArtisanCloud/PowerWeChat/v3 v3.2.55/go.mod h1:D2cB1wtwC1YgzYT1Ni8NWS5wJCm5n1T18TybXkFlwvo= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0/go.mod h1:ON4tFdPTwRcgWEaVDrN3584Ef+b7GgSJaXxe5fW9t4M= @@ -52,8 +50,6 @@ github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0 github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= -github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/casbin/casbin/v2 v2.100.0 h1:aeugSNjjHfCrgA22nHkVvw2xsscboHv5r0a13ljQKGQ= @@ -125,7 +121,6 @@ github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaC github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= @@ -152,8 +147,6 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20241009165004-a3522334989c h1:NDovD0SMpBYXlE1zJmS1q55vWB/fUQBcPAqAboZSccA= -github.com/google/pprof v0.0.0-20241009165004-a3522334989c/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -250,13 +243,10 @@ github.com/nicksnyder/go-i18n/v2 v2.4.1 h1:zwzjtX4uYyiaU02K5Ia3zSkpJZrByARkRB4V3 github.com/nicksnyder/go-i18n/v2 v2.4.1/go.mod h1:++Pl70FR6Cki7hdzZRnEEqdc2dJt+SAGotyFg/SvZMk= github.com/nsqio/go-nsq v1.1.0 h1:PQg+xxiUjA7V+TLdXw7nVrJ5Jbl3sN86EhGCQj4+FYE= github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY= -github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= -github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= -github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= -github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= +github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/orcaman/concurrent-map/v2 v2.0.1 h1:jOJ5Pg2w1oeB6PeDurIYf6k9PQ+aTITr/6lP/L/zp6c= github.com/orcaman/concurrent-map/v2 v2.0.1/go.mod h1:9Eq3TG2oBe5FirmYWQfYO5iH1q0Jv47PLaNK++uCdOM= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= @@ -276,14 +266,10 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.48.0 h1:2TCyvBrMu1Z25rvIAlnp2dPT4lgh/uTqLqiXVpp5AeU= -github.com/quic-go/quic-go v0.48.0/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/quic-go/quic-go v0.48.1 h1:y/8xmfWI9qmGTc+lBr4jKRUWLGSlSigv847ULJ4hYXA= github.com/quic-go/quic-go v0.48.1/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/rbcervilla/redisstore/v9 v9.0.0 h1:wOPbBaydbdxzi1gTafDftCI/Z7vnsXw0QDPCuhiMG0g= github.com/rbcervilla/redisstore/v9 v9.0.0/go.mod h1:q/acLpoKkTZzIsBYt0R4THDnf8W/BH6GjQYvxDSSfdI= -github.com/redis/go-redis/v9 v9.6.2 h1:w0uvkRbc9KpgD98zcvo5IrVUsn0lXpRMuhNgiHDJzdk= -github.com/redis/go-redis/v9 v9.6.2/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA= github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= @@ -292,13 +278,11 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -313,8 +297,6 @@ github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= -github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= -github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk= github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= @@ -325,8 +307,6 @@ github.com/wenlng/go-captcha-assets v1.0.1 h1:AdjRFMKmadPRWRTv0XEYfjDvcaayZ2yExI github.com/wenlng/go-captcha-assets v1.0.1/go.mod h1:yQqc7rRbxgLCg+tWtVp+7Y317D1wIZDan/yIwt8wSac= github.com/wenlng/go-captcha/v2 v2.0.1 h1:N6XSHymJ7e9Z/LyWWTWLMAkAXtW27ZROZpvNrqPhSnA= github.com/wenlng/go-captcha/v2 v2.0.1/go.mod h1:5hac1em3uXoyC5ipZ0xFv9umNM/waQvYAQdr0cx/h34= -github.com/wumansgy/goEncrypt v1.1.0 h1:Krr2FJL4GEsMTBvLfsnoTmgWb7rkGnL4siJ9K2cxMs0= -github.com/wumansgy/goEncrypt v1.1.0/go.mod h1:dWgF7mi5Ujmt8V5EoyRqjH6XtZ8wmNQyT4u2uvH8Pyg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= @@ -355,8 +335,6 @@ go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HY go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -408,7 +386,6 @@ golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/model/sca_user_follows.go b/model/sca_user_follows.go new file mode 100644 index 0000000..6dac83f --- /dev/null +++ b/model/sca_user_follows.go @@ -0,0 +1,19 @@ +package model + +import ( + "time" +) + +// ScaUserFollows 用户关注表 +type ScaUserFollows struct { + FollowerId string `gorm:"column:follower_id;type:varchar(20);primary_key;comment:关注者" json:"follower_id"` + FolloweeId string `gorm:"column:followee_id;type:varchar(20);comment:被关注者;NOT NULL" json:"followee_id"` + Status int `gorm:"column:status;type:tinyint(1);default:0;comment:关注状态(0 未互关 1 互关)" json:"status"` + CreatedTime *time.Time `gorm:"column:created_time;type:datetime;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_time"` + UpdateTime *time.Time `gorm:"column:update_time;type:datetime;default:CURRENT_TIMESTAMP;comment:更新时间" json:"update_time"` +} + +// TableName ScaUserFollows 表名 +func (ScaUserFollows) TableName() string { + return "sca_user_follows" +} diff --git a/model/sca_user_level.go b/model/sca_user_level.go new file mode 100644 index 0000000..ecf27c0 --- /dev/null +++ b/model/sca_user_level.go @@ -0,0 +1,23 @@ +package model + +import ( + "time" +) + +// ScaUserLevel 用户等级表 +type ScaUserLevel struct { + Id int64 `gorm:"column:id;type:bigint(20);primary_key;comment:主键" json:"id"` + UserId string `gorm:"column:user_id;type:varchar(20);comment:用户Id" json:"user_id"` + LevelType int `gorm:"column:level_type;type:tinyint(1);comment:等级类型" json:"level_type"` + Level int `gorm:"column:level;type:int(11);comment:等级" json:"level"` + LevelName string `gorm:"column:level_name;type:varchar(50);comment:等级名称" json:"level_name"` + ExpStart int64 `gorm:"column:exp_start;type:bigint(20);comment:开始经验值" json:"exp_start"` + ExpEnd int64 `gorm:"column:exp_end;type:bigint(20);comment:结束经验值" json:"exp_end"` + LevelDescription string `gorm:"column:level_description;type:text;comment:等级描述" json:"level_description"` + CreatedTime *time.Time `gorm:"column:created_time;type:datetime;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_time"` + UpdateTime *time.Time `gorm:"column:update_time;type:datetime;default:CURRENT_TIMESTAMP;comment:更新时间" json:"update_time"` +} + +func (m *ScaUserLevel) TableName() string { + return "sca_user_level" +} diff --git a/sql.sql b/sql.sql new file mode 100644 index 0000000..8fefa86 --- /dev/null +++ b/sql.sql @@ -0,0 +1,428 @@ +/* + Navicat Premium Dump SQL + + Source Server : Cloud MySQL + Source Server Type : MySQL + Source Server Version : 50744 (5.7.44) + Source Host : 1.95.0.111:3306 + Source Schema : schisandra-cloud-album + + Target Server Type : MySQL + Target Server Version : 50744 (5.7.44) + File Encoding : 65001 + + Date: 12/11/2024 22:47:39 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for sca_auth_permission +-- ---------------------------- +DROP TABLE IF EXISTS `sca_auth_permission`; +CREATE TABLE `sca_auth_permission` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `permission_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限名称', + `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父ID', + `type` tinyint(4) NULL DEFAULT 0 COMMENT '类型 0 菜单 1 接口 ', + `path` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路径', + `method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方式', + `status` tinyint(4) NULL DEFAULT 0 COMMENT '状态 0 启用 1 停用', + `icon` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标', + `permission_key` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限关键字', + `order` int(11) NULL DEFAULT NULL COMMENT '排序', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注 描述', + `created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_auth_permission +-- ---------------------------- +INSERT INTO `sca_auth_permission` VALUES (1, 'test', 0, NULL, 'test', 'get', NULL, 'test', 'test', 0, '2024-09-02 22:50:11', '2024-09-02 22:50:11', NULL, 'test', NULL, NULL); +INSERT INTO `sca_auth_permission` VALUES (2, 'test1', 0, NULL, 'test1', 'get', NULL, 'test1', 'test1', 0, '2024-09-02 22:51:22', '2024-09-02 22:51:22', NULL, 'test1', NULL, NULL); +INSERT INTO `sca_auth_permission` VALUES (3, 'test2', 0, NULL, 'test2', 'post', NULL, 'test2', 'test2', 0, '2024-09-02 22:51:22', '2024-09-02 22:51:22', NULL, 'test2', NULL, NULL); + +-- ---------------------------- +-- Table structure for sca_auth_permission_rule +-- ---------------------------- +DROP TABLE IF EXISTS `sca_auth_permission_rule`; +CREATE TABLE `sca_auth_permission_rule` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `ptype` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `v0` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `v1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `v2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `v3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `v4` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `v5` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `idx_sca_auth_casbin_rule`(`ptype`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`) USING BTREE, + UNIQUE INDEX `idx_sca_auth_permission_rule`(`ptype`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色/权限/用户关系表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_auth_permission_rule +-- ---------------------------- +INSERT INTO `sca_auth_permission_rule` VALUES (35, 'g', '607492814274629', 'user', '', '', '', ''); +INSERT INTO `sca_auth_permission_rule` VALUES (28, 'p', 'user', '/api/auth/comment/cancel_like', 'POST', '', NULL, NULL); +INSERT INTO `sca_auth_permission_rule` VALUES (27, 'p', 'user', '/api/auth/comment/like', 'POST', NULL, NULL, NULL); +INSERT INTO `sca_auth_permission_rule` VALUES (24, 'p', 'user', '/api/auth/comment/list', 'POST', NULL, NULL, NULL); +INSERT INTO `sca_auth_permission_rule` VALUES (22, 'p', 'user', '/api/auth/comment/submit', 'POST', NULL, NULL, NULL); +INSERT INTO `sca_auth_permission_rule` VALUES (1, 'p', 'user', '/api/auth/permission/get_user_permissions', 'POST', '', '', ''); +INSERT INTO `sca_auth_permission_rule` VALUES (25, 'p', 'user', '/api/auth/reply/list', 'POST', NULL, NULL, NULL); +INSERT INTO `sca_auth_permission_rule` VALUES (26, 'p', 'user', '/api/auth/reply/reply/submit', 'POST', NULL, NULL, NULL); +INSERT INTO `sca_auth_permission_rule` VALUES (23, 'p', 'user', '/api/auth/reply/submit', 'POST', NULL, NULL, NULL); +INSERT INTO `sca_auth_permission_rule` VALUES (30, 'p', 'user', '/api/captcha/slide/generate', 'GET', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for sca_auth_role +-- ---------------------------- +DROP TABLE IF EXISTS `sca_auth_role`; +CREATE TABLE `sca_auth_role` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `role_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色名称', + `role_key` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色关键字', + `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_at` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除 0 未删除 1已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_auth_role +-- ---------------------------- +INSERT INTO `sca_auth_role` VALUES (1, '超级管理员', 'root', '2024-08-13 16:58:21', '2024-08-22 15:15:44', 0); +INSERT INTO `sca_auth_role` VALUES (2, '管理员', 'admin', '2024-08-13 16:58:34', '2024-08-13 16:58:34', 0); +INSERT INTO `sca_auth_role` VALUES (3, '普通用户', 'user', '2024-08-13 16:59:00', '2024-08-13 16:59:00', 0); + +-- ---------------------------- +-- Table structure for sca_auth_user +-- ---------------------------- +DROP TABLE IF EXISTS `sca_auth_user`; +CREATE TABLE `sca_auth_user` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `uid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '唯一ID', + `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名', + `nickname` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称', + `email` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `phone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话', + `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码', + `gender` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别', + `avatar` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '头像', + `status` tinyint(4) NULL DEFAULT 0 COMMENT '状态 0 正常 1 封禁', + `introduce` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '介绍', + `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_at` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除 0 未删除 1 已删除', + `blog` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '博客', + `location` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址', + `company` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uid`(`uid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 51 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_auth_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_auth_user_device +-- ---------------------------- +DROP TABLE IF EXISTS `sca_auth_user_device`; +CREATE TABLE `sca_auth_user_device` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户ID', + `ip` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录IP', + `location` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址', + `agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备信息', + `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_at` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除', + `browser` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '浏览器', + `operating_system` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作系统', + `browser_version` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '浏览器版本', + `mobile` int(11) NULL DEFAULT NULL COMMENT '是否为手机 0否1是', + `bot` int(11) NULL DEFAULT NULL COMMENT '是否为bot 0否1是', + `mozilla` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '火狐版本', + `platform` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '平台', + `engine_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '引擎名称', + `engine_version` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '引擎版本', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 39 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户设备信息' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_auth_user_device +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_auth_user_social +-- ---------------------------- +DROP TABLE IF EXISTS `sca_auth_user_social`; +CREATE TABLE `sca_auth_user_social` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID', + `open_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方用户的 open id', + `source` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方用户来源', + `status` int(11) NULL DEFAULT 0 COMMENT '状态 0正常 1 封禁', + `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_at` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '社会用户信息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_auth_user_social +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_comment_likes +-- ---------------------------- +DROP TABLE IF EXISTS `sca_comment_likes`; +CREATE TABLE `sca_comment_likes` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `topic_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '话题ID', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID', + `comment_id` bigint(20) NOT NULL COMMENT '评论ID', + `like_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '点赞时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `user_id`(`user_id`) USING BTREE, + INDEX `comment_id`(`comment_id`) USING BTREE, + INDEX `topic_id`(`topic_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 81 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '评论点赞表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_comment_likes +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_comment_message +-- ---------------------------- +DROP TABLE IF EXISTS `sca_comment_message`; +CREATE TABLE `sca_comment_message` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `topic_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '话题Id', + `from_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '来自人', + `to_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '送达人', + `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '消息内容', + `is_read` int(11) NULL DEFAULT NULL COMMENT '是否已读', + `created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除 0否 1是', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `id`(`id`) USING BTREE, + INDEX `topic_id`(`topic_id`) USING BTREE, + INDEX `from_id`(`from_id`) USING BTREE, + INDEX `to_id`(`to_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_comment_message +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_comment_reply +-- ---------------------------- +DROP TABLE IF EXISTS `sca_comment_reply`; +CREATE TABLE `sca_comment_reply` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '评论用户id', + `topic_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '评论话题id', + `topic_type` int(11) NULL DEFAULT NULL COMMENT '话题类型', + `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '评论内容', + `comment_type` int(11) NULL DEFAULT NULL COMMENT '评论类型 0评论 1 回复', + `reply_to` bigint(20) NULL DEFAULT NULL COMMENT '回复子评论ID', + `reply_id` bigint(20) NULL DEFAULT NULL COMMENT '回复父评论Id', + `reply_user` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '回复人id', + `author` int(11) NULL DEFAULT 0 COMMENT '评论回复是否作者 0否 1是', + `likes` bigint(20) NULL DEFAULT 0 COMMENT '点赞数', + `reply_count` bigint(20) NULL DEFAULT 0 COMMENT '回复数量', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除 0未删除 1 已删除', + `created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `browser` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '浏览器', + `operating_system` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作系统', + `comment_ip` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP地址', + `location` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址', + `agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备信息', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `comment_id`(`id`) USING BTREE, + INDEX `user_id`(`user_id`) USING BTREE, + INDEX `reply_id`(`reply_id`) USING BTREE, + INDEX `topic_id`(`topic_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 146 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '评论表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_comment_reply +-- ---------------------------- +INSERT INTO `sca_comment_reply` VALUES (142, '607492814274629', '123', 0, 'waht?', 0, 0, 0, '', 1, 0, 1, '2024-11-04 17:54:50', '2024-11-04 18:33:34', 0, '607492814274629', '', 'Chrome', 'Windows 10', '127.0.0.1', '内网IP|内网IP', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); +INSERT INTO `sca_comment_reply` VALUES (143, '607492814274629', '123', 0, '什么\"emoji', 1, 0, 142, '607492814274629', 1, 0, 0, '2024-11-04 17:56:17', '2024-11-04 17:56:17', 0, '607492814274629', '', 'Chrome', 'Windows 10', '127.0.0.1', '内网IP|内网IP', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); +INSERT INTO `sca_comment_reply` VALUES (144, '607492814274629', '123', 0, '哈哈哈哈哈哈哈哈', 0, 0, 0, '', 1, 0, 0, '2024-11-04 18:42:24', '2024-11-05 16:38:36', 0, '607492814274629', '', 'Chrome', 'Windows 10', '127.0.0.1', '内网IP|内网IP', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); +INSERT INTO `sca_comment_reply` VALUES (145, '607492814274629', '123', 0, '图像测试\"emoji\"emoji', 0, 0, 0, '', 1, 0, 0, '2024-11-04 19:03:15', '2024-11-04 19:03:15', 0, '607492814274629', '', 'Chrome', 'Windows 10', '127.0.0.1', '内网IP|内网IP', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); + +-- ---------------------------- +-- Table structure for sca_file_folder +-- ---------------------------- +DROP TABLE IF EXISTS `sca_file_folder`; +CREATE TABLE `sca_file_folder` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `folder_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件夹名称', + `parent_folder_id` bigint(20) NULL DEFAULT NULL COMMENT '父文件夹编号', + `folder_addr` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件夹名称', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户编号', + `folder_source` int(11) NULL DEFAULT NULL COMMENT '文件夹来源 0相册 1 评论', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除 0 未删除 1 已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文件夹信息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_file_folder +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_file_info +-- ---------------------------- +DROP TABLE IF EXISTS `sca_file_info`; +CREATE TABLE `sca_file_info` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `file_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名', + `file_size` double NULL DEFAULT NULL COMMENT '文件大小', + `file_type_id` bigint(20) NULL DEFAULT NULL COMMENT '文件类型编号', + `upload_time` datetime NULL DEFAULT NULL COMMENT '上传时间', + `folder_id` bigint(20) NULL DEFAULT NULL COMMENT '文件夹编号', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户编号', + `file_source` int(11) NULL DEFAULT NULL COMMENT '文件来源 0 相册 1 评论', + `status` int(11) NULL DEFAULT NULL COMMENT '文件状态', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除 0 未删除 1 已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文件信息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_file_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_file_recycle_bin +-- ---------------------------- +DROP TABLE IF EXISTS `sca_file_recycle_bin`; +CREATE TABLE `sca_file_recycle_bin` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `file_id` bigint(20) NULL DEFAULT NULL COMMENT '文件编号', + `folder_id` bigint(20) NULL DEFAULT NULL COMMENT '文件夹编号', + `type` int(11) NULL DEFAULT NULL COMMENT '类型 0 文件 1 文件夹', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户编号', + `deleted_at` datetime NULL DEFAULT NULL COMMENT '删除时间', + `original_path` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '原始路径', + `deleted` int(11) NULL DEFAULT NULL COMMENT '是否被永久删除 0否 1是', + `file_source` int(11) NULL DEFAULT NULL COMMENT '文件来源 0 相册 1 评论', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文件回收站表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_file_recycle_bin +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_file_type +-- ---------------------------- +DROP TABLE IF EXISTS `sca_file_type`; +CREATE TABLE `sca_file_type` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `type_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型名称', + `mime_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'MIME 类型', + `status` int(11) NULL DEFAULT NULL COMMENT '类型状态', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除 0 未删除 1 已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文件类型表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_file_type +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_message_report +-- ---------------------------- +DROP TABLE IF EXISTS `sca_message_report`; +CREATE TABLE `sca_message_report` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户Id', + `type` int(11) NULL DEFAULT NULL COMMENT '举报类型 0评论 1 相册', + `comment_id` bigint(20) NULL DEFAULT NULL COMMENT '评论Id', + `topic_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '话题Id', + `report_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '举报', + `report_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '举报说明内容', + `report_tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '举报标签', + `status` int(11) NULL DEFAULT NULL COMMENT '状态(0 未处理 1 已处理)', + `created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` int(11) NULL DEFAULT 0 COMMENT '是否删除 0否 1是', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '举报信息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_message_report +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_user_follows +-- ---------------------------- +DROP TABLE IF EXISTS `sca_user_follows`; +CREATE TABLE `sca_user_follows` ( + `follower_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关注者', + `followee_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '被关注者', + `status` tinyint(1) NULL DEFAULT 0 COMMENT '关注状态(0 未互关 1 互关)', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`follower_id`, `followee_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户关注表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_user_follows +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sca_user_level +-- ---------------------------- +DROP TABLE IF EXISTS `sca_user_level`; +CREATE TABLE `sca_user_level` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户Id', + `level_type` tinyint(1) NULL DEFAULT NULL COMMENT '等级类型', + `level` int(11) NULL DEFAULT NULL COMMENT '等级', + `level_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '等级名称', + `exp_start` bigint(20) NULL DEFAULT NULL COMMENT '开始经验值', + `exp_end` bigint(20) NULL DEFAULT NULL COMMENT '结束经验值', + `level_description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '等级描述', + `created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户等级表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sca_user_level +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 1;