Merge remote-tracking branch 'origin/master'

This commit is contained in:
chy
2025-06-06 10:27:14 +08:00
12 changed files with 176 additions and 0 deletions

View File

@ -0,0 +1 @@
package v1

15
api/upload/upload.go Normal file
View File

@ -0,0 +1,15 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package upload
import (
"context"
"server/api/upload/v1"
)
type IUploadV1 interface {
Upload(ctx context.Context, req *v1.UploadReq) (res *v1.UploadRes, err error)
}

14
api/upload/v1/upload.go Normal file
View File

@ -0,0 +1,14 @@
package v1
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
type UploadReq struct {
g.Meta `path:"/upload/image" method:"post" tags:"WEB" summary:"上传文件"`
File *ghttp.UploadFile `json:"file"`
}
type UploadRes struct {
Url string `json:"url"`
}

View File

@ -11,6 +11,7 @@ import (
"server/internal/controller/merchant" "server/internal/controller/merchant"
"server/internal/controller/rewardType" "server/internal/controller/rewardType"
"server/internal/controller/role" "server/internal/controller/role"
"server/internal/controller/upload"
"server/internal/controller/wx" "server/internal/controller/wx"
"server/internal/middleware" "server/internal/middleware"
) )
@ -33,6 +34,7 @@ var (
group.Middleware(middleware.Auth) group.Middleware(middleware.Auth)
group.Middleware(middleware.Casbin) group.Middleware(middleware.Casbin)
group.Bind( group.Bind(
upload.NewV1(),
admin.NewV1(), admin.NewV1(),
role.NewV1(), role.NewV1(),
merchant.NewV1(), merchant.NewV1(),

View File

@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package upload

View File

@ -0,0 +1,15 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package upload
import (
"server/api/upload"
)
type ControllerV1 struct{}
func NewV1() upload.IUploadV1 {
return &ControllerV1{}
}

View File

@ -0,0 +1,17 @@
package upload
import (
"context"
"server/internal/model"
"server/internal/service"
"server/api/upload/v1"
)
func (c *ControllerV1) Upload(ctx context.Context, req *v1.UploadReq) (res *v1.UploadRes, err error) {
upload, err := service.Upload().Upload(ctx, &model.UploadIn{File: req.File})
if err != nil {
return nil, err
}
return &v1.UploadRes{Url: upload.Url}, nil
}

View File

@ -13,5 +13,6 @@ import (
_ "server/internal/logic/role" _ "server/internal/logic/role"
_ "server/internal/logic/store" _ "server/internal/logic/store"
_ "server/internal/logic/storeAdmin" _ "server/internal/logic/storeAdmin"
_ "server/internal/logic/upload"
_ "server/internal/logic/user" _ "server/internal/logic/user"
) )

View File

@ -78,5 +78,7 @@ func (s *sMerchant) Audit(ctx context.Context, in *model.MerchantAuditIn) (out *
} }
func (s *sMerchant) Create(ctx context.Context, in *model.MerchantCreateIn) (out *model.CreateOut, err error) { func (s *sMerchant) Create(ctx context.Context, in *model.MerchantCreateIn) (out *model.CreateOut, err error) {
// 管理员创建的商户,无需审核,直接可以使用,需要注意商户关联的主账号的 username
return return
} }

View File

@ -0,0 +1,57 @@
package upload
import (
"context"
"server/utility/ecode"
"server/utility/oss"
"strings"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/util/grand"
"server/internal/model"
"server/internal/service"
)
type sUpload struct {
oss struct{}
}
func New() service.IUpload {
return &sUpload{
oss: struct{}{},
}
}
func init() {
service.RegisterUpload(New())
}
func (s *sUpload) Upload(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error) {
// 判断文件格式
fileType := in.File.Header.Get("Content-Type")
if !strings.HasPrefix(fileType, "image/") {
return nil, gerror.New("图片格式错误")
}
//判断图片大小
if in.File.Size > 10*1024*1024 {
return nil, gerror.New("图片大小最多10M")
}
// 获取图片后缀
exit := strings.Split(fileType, "/")[1]
// 文件名称
fileName := strings.ToLower("image/" + grand.Letters(32) + "." + exit)
// 开始上传图片
client, ok := oss.GetClient("aliyun")
if !ok {
return nil, ecode.Fail.Sub("未配置OSS")
}
uploadRes, err := client.UploadFile(ctx, &model.OssUploadFileInput{
Filename: fileName,
File: in.File,
})
if err != nil {
return nil, err
}
return &model.UploadOut{
Url: uploadRes.Url,
}, nil
}

View File

@ -0,0 +1,32 @@
// ================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// You can delete these comments if you wish manually maintain this interface file.
// ================================================================================
package service
import (
"context"
"server/internal/model"
)
type (
IUpload interface {
Upload(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error)
}
)
var (
localUpload IUpload
)
func Upload() IUpload {
if localUpload == nil {
panic("implement not found for interface IUpload, forgot register?")
}
return localUpload
}
func RegisterUpload(i IUpload) {
localUpload = i
}

View File

@ -38,8 +38,15 @@ func init() {
enforcer.AddGroupingPolicy(consts.StoreRoleCode, consts.UserRoleCode) // 门店继承用户角色权限 enforcer.AddGroupingPolicy(consts.StoreRoleCode, consts.UserRoleCode) // 门店继承用户角色权限
enforcer.AddGroupingPolicy(consts.MerchantRoleCode, consts.StoreRoleCode) // 商户继承门店角色权限 enforcer.AddGroupingPolicy(consts.MerchantRoleCode, consts.StoreRoleCode) // 商户继承门店角色权限
enforcer.AddGroupingPolicy(consts.AdminRoleCode, consts.MerchantRoleCode) // 管理员继承商户角色权限 enforcer.AddGroupingPolicy(consts.AdminRoleCode, consts.MerchantRoleCode) // 管理员继承商户角色权限
// 游客
{
// 任务
}
// 用户 // 用户
{ {
// 上传图片
enforcer.AddPolicy("user", "/x/upload/image", "POST", "上传图片")
// 反馈信息 // 反馈信息
enforcer.AddPolicy("user", "/x/feedback", "GET", "获取反馈信息列表") enforcer.AddPolicy("user", "/x/feedback", "GET", "获取反馈信息列表")
enforcer.AddPolicy("user", "/x/feedback", "POST", "添加反馈信息") enforcer.AddPolicy("user", "/x/feedback", "POST", "添加反馈信息")
@ -50,12 +57,20 @@ func init() {
} }
// 门店 // 门店
{ {
// 门店:修改
// 奖励类型 // 奖励类型
enforcer.AddPolicy("store", "/x/rewardType", "GET", "获取奖励类型列表") enforcer.AddPolicy("store", "/x/rewardType", "GET", "获取奖励类型列表")
enforcer.AddPolicy("store", "/x/rewardType", "POST", "添加奖励类型") enforcer.AddPolicy("store", "/x/rewardType", "POST", "添加奖励类型")
enforcer.AddPolicy("store", "/x/rewardType", "PUT", "更新奖励类型") enforcer.AddPolicy("store", "/x/rewardType", "PUT", "更新奖励类型")
enforcer.AddPolicy("store", "/x/rewardType/*", "DELETE", "删除奖励类型") enforcer.AddPolicy("store", "/x/rewardType/*", "DELETE", "删除奖励类型")
} }
// 商户
{
// 商户:查
// 门店:增删查
}
// 管理员 // 管理员
{ {
// admin // admin