diff --git a/api/gamelife/v1/gamelife.go b/api/gamelife/v1/gamelife.go new file mode 100644 index 0000000..b7b1f99 --- /dev/null +++ b/api/gamelife/v1/gamelife.go @@ -0,0 +1 @@ +package v1 diff --git a/api/upload/upload.go b/api/upload/upload.go new file mode 100644 index 0000000..ce6062e --- /dev/null +++ b/api/upload/upload.go @@ -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) +} diff --git a/api/upload/v1/upload.go b/api/upload/v1/upload.go new file mode 100644 index 0000000..c826d30 --- /dev/null +++ b/api/upload/v1/upload.go @@ -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"` +} diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go index 33106f6..4ae9b96 100644 --- a/internal/cmd/cmd.go +++ b/internal/cmd/cmd.go @@ -11,6 +11,7 @@ import ( "server/internal/controller/merchant" "server/internal/controller/rewardType" "server/internal/controller/role" + "server/internal/controller/upload" "server/internal/controller/wx" "server/internal/middleware" ) @@ -33,6 +34,7 @@ var ( group.Middleware(middleware.Auth) group.Middleware(middleware.Casbin) group.Bind( + upload.NewV1(), admin.NewV1(), role.NewV1(), merchant.NewV1(), diff --git a/internal/controller/upload/upload.go b/internal/controller/upload/upload.go new file mode 100644 index 0000000..791853f --- /dev/null +++ b/internal/controller/upload/upload.go @@ -0,0 +1,5 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package upload diff --git a/internal/controller/upload/upload_new.go b/internal/controller/upload/upload_new.go new file mode 100644 index 0000000..dce9590 --- /dev/null +++ b/internal/controller/upload/upload_new.go @@ -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{} +} diff --git a/internal/controller/upload/upload_v1_upload.go b/internal/controller/upload/upload_v1_upload.go new file mode 100644 index 0000000..a0a2f70 --- /dev/null +++ b/internal/controller/upload/upload_v1_upload.go @@ -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 +} diff --git a/internal/logic/logic.go b/internal/logic/logic.go index e846597..5fb7474 100644 --- a/internal/logic/logic.go +++ b/internal/logic/logic.go @@ -13,5 +13,6 @@ import ( _ "server/internal/logic/role" _ "server/internal/logic/store" _ "server/internal/logic/storeAdmin" + _ "server/internal/logic/upload" _ "server/internal/logic/user" ) diff --git a/internal/logic/merchant/merchant.go b/internal/logic/merchant/merchant.go index cc067d1..8b11bbd 100644 --- a/internal/logic/merchant/merchant.go +++ b/internal/logic/merchant/merchant.go @@ -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) { + // 管理员创建的商户,无需审核,直接可以使用,需要注意商户关联的主账号的 username + return } diff --git a/internal/logic/upload/upload.go b/internal/logic/upload/upload.go new file mode 100644 index 0000000..0d447f8 --- /dev/null +++ b/internal/logic/upload/upload.go @@ -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 +} diff --git a/internal/service/upload.go b/internal/service/upload.go new file mode 100644 index 0000000..15d80d3 --- /dev/null +++ b/internal/service/upload.go @@ -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 +} diff --git a/utility/myCasbin/casbin.go b/utility/myCasbin/casbin.go index 60075e7..0fdf4aa 100644 --- a/utility/myCasbin/casbin.go +++ b/utility/myCasbin/casbin.go @@ -38,8 +38,15 @@ func init() { enforcer.AddGroupingPolicy(consts.StoreRoleCode, consts.UserRoleCode) // 门店继承用户角色权限 enforcer.AddGroupingPolicy(consts.MerchantRoleCode, consts.StoreRoleCode) // 商户继承门店角色权限 enforcer.AddGroupingPolicy(consts.AdminRoleCode, consts.MerchantRoleCode) // 管理员继承商户角色权限 + // 游客 + { + // 任务 + } // 用户 { + // 上传图片 + enforcer.AddPolicy("user", "/x/upload/image", "POST", "上传图片") + // 反馈信息 enforcer.AddPolicy("user", "/x/feedback", "GET", "获取反馈信息列表") enforcer.AddPolicy("user", "/x/feedback", "POST", "添加反馈信息") @@ -49,12 +56,20 @@ func init() { } // 门店 { + // 门店:修改 + // 奖励类型 enforcer.AddPolicy("store", "/x/rewardType", "GET", "获取奖励类型列表") enforcer.AddPolicy("store", "/x/rewardType", "POST", "添加奖励类型") enforcer.AddPolicy("store", "/x/rewardType", "PUT", "更新奖励类型") enforcer.AddPolicy("store", "/x/rewardType/*", "DELETE", "删除奖励类型") } + // 商户 + { + // 商户:查 + // 门店:增删查 + } + // 管理员 { // admin