refactor: 移除业务ID字段并优化DAO层实现

This commit is contained in:
2026-03-19 17:35:38 +08:00
parent 8e2ea0bde1
commit 39fd187502
9 changed files with 27 additions and 58 deletions

View File

@@ -1,6 +1,7 @@
server: server:
address: ":3008" address: ":3008"
name: "oss" name: "oss"
workerId: 1
rate: rate:
limit: 200 limit: 200
burst: 300 burst: 300

View File

@@ -8,7 +8,6 @@ import (
"gitea.com/red-future/common/db/gfdb" "gitea.com/red-future/common/db/gfdb"
"github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/gconv"
"github.com/gogf/gf/v2/util/guid"
) )
var File = &file{} var File = &file{}
@@ -16,11 +15,14 @@ var File = &file{}
type file struct{} type file struct{}
// Insert 插入 // Insert 插入
func (d *file) Insert(ctx context.Context, req *dto.UploadFile) (res *entity.File, err error) { func (d *file) Insert(ctx context.Context, req *dto.UploadFile) (id int64, err error) {
var res *entity.File
if err = gconv.Struct(req, &res); err != nil { if err = gconv.Struct(req, &res); err != nil {
return return
} }
res.Bid = guid.S() r, err := gfdb.DB(ctx).Model(ctx, consts.FileCollection).Insert(&res)
_, err = gfdb.DB(ctx).Model(ctx, consts.FileCollection).Insert(&res) if err != nil {
return return
}
return r.LastInsertId()
} }

View File

@@ -7,9 +7,7 @@ import (
"oss/model/entity" "oss/model/entity"
"gitea.com/red-future/common/db/gfdb" "gitea.com/red-future/common/db/gfdb"
"github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/util/gconv"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/guid"
) )
var TenantOssTotal = &tenantOssTotal{} var TenantOssTotal = &tenantOssTotal{}
@@ -17,25 +15,16 @@ var TenantOssTotal = &tenantOssTotal{}
type tenantOssTotal struct{} type tenantOssTotal struct{}
// SaveOrUpdate 增加或更新 // SaveOrUpdate 增加或更新
func (d *tenantOssTotal) SaveOrUpdate(ctx context.Context, updateData []*dto.UpdateUsedOssReq) (err error) { func (d *tenantOssTotal) SaveOrUpdate(ctx context.Context, updateData []*dto.UpdateUsedOssReq) (rows int64, err error) {
if !g.IsEmpty(updateData) { var res []*entity.TenantOssTotal
data := make([]gdb.Map, 0, len(updateData)) if err = gconv.Structs(updateData, &res); err != nil {
for _, v := range updateData {
data = append(data, gdb.Map{
entity.TenantOssCol.Bid: guid.S(),
entity.TenantOssCol.TenantId: v.TenantId,
entity.TenantOssCol.UsedOssSize: v.UsedOssSize,
entity.TenantOssCol.TotalOssSize: v.TotalOssSize,
entity.TenantOssCol.Creator: v.Updater,
entity.TenantOssCol.Updater: v.Updater,
})
}
_, err = gfdb.DB(ctx).Model(ctx, consts.TenantOssTotalCollection).Data(data).OnConflict(entity.TenantOssCol.TenantId).Save()
if err != nil {
return err
}
}
return return
}
r, err := gfdb.DB(ctx).Model(ctx, consts.TenantOssTotalCollection).Data(res).OnConflict(entity.TenantOssCol.TenantId).Save()
if err != nil {
return
}
return r.RowsAffected()
} }
func (d *tenantOssTotal) GetOneByTenantId(ctx context.Context, req *dto.GetByTenantIdReq) (res *entity.TenantOssTotal, err error) { func (d *tenantOssTotal) GetOneByTenantId(ctx context.Context, req *dto.GetByTenantIdReq) (res *entity.TenantOssTotal, err error) {

View File

@@ -22,10 +22,3 @@ type UploadFileRes struct {
FileURL string `json:"fileURL" dc:"上传地址"` FileURL string `json:"fileURL" dc:"上传地址"`
FileAddressPrefix string `json:"fileAddressPrefix"` FileAddressPrefix string `json:"fileAddressPrefix"`
} }
type TenantOssTotal struct {
TenantId uint64 `json:"tenantId"`
UsedOssSize int `json:"usedOssSize"`
TotalOssSize int `json:"totalOssSize"`
Updater string `json:"updater"`
}

View File

@@ -24,9 +24,6 @@ type UpdateUsedOssReq struct {
TenantId uint64 `json:"tenantId" v:"required#租户id不能为空"` TenantId uint64 `json:"tenantId" v:"required#租户id不能为空"`
UsedOssSize int `json:"usedOssSize"` UsedOssSize int `json:"usedOssSize"`
TotalOssSize int `json:"totalOssSize"` TotalOssSize int `json:"totalOssSize"`
Updater string `json:"updater" v:"required#更新人不能为空"` Creator string `json:"creator"`
} Updater string `json:"updater"`
// UpdateUsedOssRes 更新使用存储总量响应
type UpdateUsedOssRes struct {
} }

View File

@@ -8,7 +8,6 @@ import (
type File struct { type File struct {
beans.SQLBaseDO `orm:",inherit"` // 嵌入基础字段Id, Bid, Creator, CreatedAt, Updater, UpdatedAt, Deleter, DeletedAt, IsDeleted beans.SQLBaseDO `orm:",inherit"` // 嵌入基础字段Id, Bid, Creator, CreatedAt, Updater, UpdatedAt, Deleter, DeletedAt, IsDeleted
// 业务字段 // 业务字段
Bid string `orm:"bid" json:"bid"`
TenantId uint64 `orm:"tenant_id" json:"tenantId"` // 租户ID TenantId uint64 `orm:"tenant_id" json:"tenantId"` // 租户ID
FileURL string `orm:"file_url" json:"fileURL"` // 文件URL FileURL string `orm:"file_url" json:"fileURL"` // 文件URL
FileSize int `orm:"file_size" json:"fileSize"` FileSize int `orm:"file_size" json:"fileSize"`
@@ -16,7 +15,6 @@ type File struct {
type fileCol struct { type fileCol struct {
beans.SQLBaseCol beans.SQLBaseCol
Bid string
TenantId string TenantId string
FileURL string FileURL string
FileSize string FileSize string
@@ -24,7 +22,6 @@ type fileCol struct {
var FileCol = fileCol{ var FileCol = fileCol{
SQLBaseCol: beans.DefSQLBaseCol, SQLBaseCol: beans.DefSQLBaseCol,
Bid: "bid",
TenantId: "tenant_id", TenantId: "tenant_id",
FileURL: "file_url", FileURL: "file_url",
FileSize: "file_size", FileSize: "file_size",

View File

@@ -76,10 +76,11 @@ func (f *file) UploadFile(ctx context.Context, req *dto.UploadFileReq) (res *dto
fileSize = tenantOssTotalEntity.UsedOssSize + fileSize fileSize = tenantOssTotalEntity.UsedOssSize + fileSize
totalFileSize = tenantOssTotalEntity.TotalOssSize totalFileSize = tenantOssTotalEntity.TotalOssSize
// 设置redis-租户存储容量总数 // 设置redis-租户存储容量总数
tenantOssTotalKeyMap := dto.TenantOssTotal{ tenantOssTotalKeyMap := dto.UpdateUsedOssReq{
TenantId: tenantId, TenantId: tenantId,
UsedOssSize: fileSize, UsedOssSize: fileSize,
TotalOssSize: totalFileSize, TotalOssSize: totalFileSize,
Creator: user.UserName,
Updater: user.UserName, Updater: user.UserName,
} }
// 修改redis-租户存储容量总数 超时时间10分钟 // 修改redis-租户存储容量总数 超时时间10分钟

View File

@@ -41,7 +41,7 @@ func (s *tenantOssTotal) UpdateUsedOssSize(ctx context.Context) (err error) {
} }
// 更新数据库 // 更新数据库
err = dao.TenantOssTotal.SaveOrUpdate(ctx, updateData) _, err = dao.TenantOssTotal.SaveOrUpdate(ctx, updateData)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -5,22 +5,17 @@
-- 存储文件表 -- 存储文件表
CREATE TABLE IF NOT EXISTS file ( CREATE TABLE IF NOT EXISTS file (
-- 基础字段 -- 基础字段
id BIGSERIAL PRIMARY KEY, id BIGINT PRIMARY KEY,
bid VARCHAR(64) NOT NULL,
creator VARCHAR(64) NOT NULL, creator VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL, updater VARCHAR(64) NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleter VARCHAR(64),
deleted_at timestamp(6), deleted_at timestamp(6),
-- 文件核心字段 -- 文件核心字段
tenant_id BIGINT NOT NULL, tenant_id BIGINT NOT NULL,
file_url VARCHAR(512) NOT NULL, file_url VARCHAR(512) NOT NULL,
file_size INT NOT NULL DEFAULT 0, file_size INT NOT NULL DEFAULT 0
-- 唯一索引 & 普通索引
CONSTRAINT uk_file_bid UNIQUE (bid)
); );
-- 为文件表添加索引 -- 为文件表添加索引
CREATE INDEX idx_file_tenant_id ON file(tenant_id); CREATE INDEX idx_file_tenant_id ON file(tenant_id);
@@ -29,12 +24,10 @@ CREATE INDEX idx_file_file_size ON file(file_size);
-- 文件表字段注释 -- 文件表字段注释
COMMENT ON TABLE file IS '存储文件表'; COMMENT ON TABLE file IS '存储文件表';
COMMENT ON COLUMN file.id IS '主键ID'; COMMENT ON COLUMN file.id IS '主键ID';
COMMENT ON COLUMN file.bid IS '业务ID';
COMMENT ON COLUMN file.creator IS '创建人'; COMMENT ON COLUMN file.creator IS '创建人';
COMMENT ON COLUMN file.created_at IS '创建时间'; COMMENT ON COLUMN file.created_at IS '创建时间';
COMMENT ON COLUMN file.updater IS '更新人'; COMMENT ON COLUMN file.updater IS '更新人';
COMMENT ON COLUMN file.updated_at IS '更新时间'; COMMENT ON COLUMN file.updated_at IS '更新时间';
COMMENT ON COLUMN file.deleter IS '删除人(软删)';
COMMENT ON COLUMN file.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN file.deleted_at IS '删除时间(软删)';
COMMENT ON COLUMN file.tenant_id IS '租户ID'; COMMENT ON COLUMN file.tenant_id IS '租户ID';
COMMENT ON COLUMN file.file_url IS '文件URL'; COMMENT ON COLUMN file.file_url IS '文件URL';
@@ -47,13 +40,11 @@ COMMENT ON COLUMN file.file_size IS '文件大小(字节)';
-- 租户存储服务总计表 -- 租户存储服务总计表
CREATE TABLE IF NOT EXISTS tenant_oss_total ( CREATE TABLE IF NOT EXISTS tenant_oss_total (
-- 基础字段 -- 基础字段
id BIGSERIAL PRIMARY KEY, -- 保留id作为主键 id BIGINT PRIMARY KEY, -- 保留id作为主键
bid VARCHAR(64) NOT NULL,
creator VARCHAR(64) NOT NULL, creator VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL, updater VARCHAR(64) NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleter VARCHAR(64),
deleted_at timestamp(6), deleted_at timestamp(6),
-- 租户存储字段 -- 租户存储字段
@@ -63,7 +54,7 @@ CREATE TABLE IF NOT EXISTS tenant_oss_total (
-- 唯一索引仅约束tenant_id唯一性不替代主键 -- 唯一索引仅约束tenant_id唯一性不替代主键
CONSTRAINT uk_tenant_oss_total_tenant_id UNIQUE (tenant_id) CONSTRAINT uk_tenant_oss_total_tenant_id UNIQUE (tenant_id)
); );
-- 为租户存储表添加索引 -- 为租户存储表添加索引
CREATE INDEX idx_tenant_oss_total_used_size ON tenant_oss_total(used_oss_size); CREATE INDEX idx_tenant_oss_total_used_size ON tenant_oss_total(used_oss_size);
@@ -72,12 +63,10 @@ CREATE INDEX idx_tenant_oss_total_total_size ON tenant_oss_total(total_oss_size)
-- 租户存储表字段注释 -- 租户存储表字段注释
COMMENT ON TABLE tenant_oss_total IS '租户存储服务总计表'; COMMENT ON TABLE tenant_oss_total IS '租户存储服务总计表';
COMMENT ON COLUMN tenant_oss_total.id IS '主键ID'; COMMENT ON COLUMN tenant_oss_total.id IS '主键ID';
COMMENT ON COLUMN tenant_oss_total.bid IS '业务ID';
COMMENT ON COLUMN tenant_oss_total.creator IS '创建人'; COMMENT ON COLUMN tenant_oss_total.creator IS '创建人';
COMMENT ON COLUMN tenant_oss_total.created_at IS '创建时间'; COMMENT ON COLUMN tenant_oss_total.created_at IS '创建时间';
COMMENT ON COLUMN tenant_oss_total.updater IS '更新人'; COMMENT ON COLUMN tenant_oss_total.updater IS '更新人';
COMMENT ON COLUMN tenant_oss_total.updated_at IS '更新时间'; COMMENT ON COLUMN tenant_oss_total.updated_at IS '更新时间';
COMMENT ON COLUMN tenant_oss_total.deleter IS '删除人(软删)';
COMMENT ON COLUMN tenant_oss_total.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN tenant_oss_total.deleted_at IS '删除时间(软删)';
COMMENT ON COLUMN tenant_oss_total.tenant_id IS '租户ID唯一'; COMMENT ON COLUMN tenant_oss_total.tenant_id IS '租户ID唯一';
COMMENT ON COLUMN tenant_oss_total.used_oss_size IS '已使用存储大小(字节)'; COMMENT ON COLUMN tenant_oss_total.used_oss_size IS '已使用存储大小(字节)';