diff --git a/go.mod b/go.mod index 74865b3..aa376b5 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.18 require ( github.com/gogf/gf/contrib/drivers/mysql/v2 v2.8.1 github.com/gogf/gf/v2 v2.8.1 + github.com/rs/cors v1.11.1 ) require ( diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go index c53fb6e..8568148 100644 --- a/internal/cmd/cmd.go +++ b/internal/cmd/cmd.go @@ -15,6 +15,23 @@ import ( "github.com/gogf/gf/v2/os/gcmd" ) +/*自定义的允许跨域请求中间件*/ +func MiddlewareCORS(r *ghttp.Request) { + /* 没有起到应起到的作用,还是所有的都可以访问 + //自定义授权跨域的Origin + corsOptions := r.Response.DefaultCORSOptions() + corsOptions.AllowDomain = []string{"localhost"} //数组中的为允许访问的 + if !r.Response.CORSAllowedOrigin(corsOptions) { + r.Response.WriteStatus(http.StatusForbidden) + return + } + r.Response.CORS(corsOptions) + r.Middleware.Next()*/ + //默认的跨域设置 + r.Response.CORSDefault() + r.Middleware.Next() +} + var ( Main = gcmd.Command{ Name: "main", @@ -32,10 +49,15 @@ var ( ) }) + s.BindHandler("/*any", func(r *ghttp.Request) { + r.Response.CORSDefault() + }) + // 定义一个路由组,路径为/mainpage s.Group("/mainpage", func(group *ghttp.RouterGroup) { // 添加中间件,用于处理响应 - group.Middleware(ghttp.MiddlewareHandlerResponse) + //group.Middleware(ghttp.MiddlewareHandlerResponse) + group.Middleware(MiddlewareCORS) // 绑定路由,将mainPage.NewMainPage()绑定到该路由组 group.Bind( mainPage.NewMainPage(), @@ -45,7 +67,8 @@ var ( // 定义一个路由组,路径为/clubpage s.Group("/clubpage", func(group *ghttp.RouterGroup) { // 添加中间件,用于处理响应 - group.Middleware(ghttp.MiddlewareHandlerResponse) + //group.Middleware(ghttp.MiddlewareHandlerResponse) + group.Middleware(MiddlewareCORS) // 绑定路由,将mainPage.NewMainPage()绑定到该路由组 group.Bind( clubPage.NewClubPage(), diff --git a/internal/controller/clubPage/clubPage.go b/internal/controller/clubPage/clubPage.go index 48f3d5d..a55230f 100644 --- a/internal/controller/clubPage/clubPage.go +++ b/internal/controller/clubPage/clubPage.go @@ -2,6 +2,7 @@ package clubPage import ( "github.com/gogf/gf/v2/net/ghttp" + "practice_Go/internal/model/dto" "practice_Go/internal/service" ) @@ -13,19 +14,36 @@ func NewClubPage() *ClubPage { // GetClub 获取俱乐部信息 func (c ClubPage) GetClub(req *ghttp.Request) { + club, err := service.GetClubs().GetClubs(req.Context()) if err == nil { - req.Response.WriteJson(club) + req.Response.WriteJson(dto.Result{ + Code: 200, + Message: "success", + Data: club, + }) } else { - req.Response.WriteJson(err) + req.Response.WriteJson(dto.Result{ + Code: 500, + Message: "error", + Data: err, + }) } } func (c ClubPage) GetClubShows(req *ghttp.Request) { shows, err := service.GetClubs().GetClubShows(req.Context()) if err == nil { - req.Response.WriteJson(shows) + req.Response.WriteJson(dto.Result{ + Code: 200, + Message: "success", + Data: shows, + }) } else { - req.Response.WriteJson(err) + req.Response.WriteJson(dto.Result{ + Code: 500, + Message: "error", + Data: err, + }) } } diff --git a/internal/controller/mainPage/mainPage.go b/internal/controller/mainPage/mainPage.go index 65b1e8b..7e3cd1d 100644 --- a/internal/controller/mainPage/mainPage.go +++ b/internal/controller/mainPage/mainPage.go @@ -1,8 +1,11 @@ package mainPage import ( + "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" + "practice_Go/internal/model/dto" "practice_Go/internal/service" + "time" ) // 定义一个MainPage结构体 @@ -17,9 +20,17 @@ func NewMainPage() *MainPage { func (c *MainPage) GetShows(req *ghttp.Request) { shows, err := service.GetShows().GetShows(req.Context()) if err == nil { - req.Response.WriteJson(shows) + req.Response.WriteJson(dto.Result{ + Code: 200, + Message: "success", + Data: shows, + }) } else { - req.Response.WriteJson(err) + req.Response.WriteJson(dto.Result{ + Code: 500, + Message: "error", + Data: err, + }) } } @@ -27,7 +38,103 @@ func (c *MainPage) GetShows(req *ghttp.Request) { func (c *MainPage) GetVideos(req *ghttp.Request) { shows, err := service.GetShows().GetVideos(req.Context()) if err == nil { - req.Response.WriteJson(shows) + req.Response.WriteJson(dto.Result{ + Code: 200, + Message: "success", + Data: shows, + }) + } else { + req.Response.WriteJson(dto.Result{ + Code: 500, + Message: "error", + Data: err, + }) + } +} + +// 新增数据 +func (c *MainPage) AddShow(req *ghttp.Request) { + + type Show struct { + Id int `json:"id"` + Name string `json:"name"` + Cover string `json:"cover"` + UserId int `json:"userId"` + ReleaseTime time.Time `json:"releaseTime"` + VideoDuration time.Duration `json:"videoDuration"` + ViewCount int `json:"viewCount"` + Comments int `json:"comments"` + Likes int `json:"likes"` + FlagType int `json:"flagType"` + ChannelId int `json:"channelId"` + } + + ////通过map + //data := g.Map{ + // "name": "视频1", + // "userId": 1, + // "likes": 6, + // "comments": 3, + // "viewCount": 10, + //} + // + ////通过结构体对象 + //data := Show{ + // Name: "视频1", + // UserId: 1, + // Likes: 6, + // Comments: 3, + // ReleaseTime: gtime.New("2024/10/23"), + //} + // + md := g.Model("show") + // + + //批量插入多条数据 + ////通过map + //data := g.List{ + // g.Map{ + // "name": "视频1", + // "userId": 1, + // "likes": 6, + // "comments": 3, + // "viewCount": 23, + // }, + // g.Map{ + // "name": "视频2", + // "userId": 2, + // "likes": 6, + // "comments": 3, + // "viewCount": 20, + // }, + // g.Map{ + // "name": "文章1", + // "userId": 3, + // "likes": 6, + // "comments": 3, + // "viewCount": 15, + // }, + //} + + //通过结构体对象 + data := g.Array{ + //里边是结构体集合 + } + + ////写法一 插入 + ////result, err := md.Data(data).Insert() + ////写法二 插入 主键冲突,报错 + ////result, err := md.Insert(data) //insert into ... + ////写法三 主键冲突,就新数据 替换 旧数据 + ////result, err := md.Replace(data) //replace into ... + ////写法四 主键冲突,就根据主键 更新 数据 + //result, err := md.Save(data) //insert into into ... on duplicate key update ... + + //插入并获取id + result, err := md.InsertAndGetId(data) + + if err == nil { + req.Response.WriteJson(result) } else { req.Response.WriteJson(err) } diff --git a/internal/model/dto/Result.go b/internal/model/dto/Result.go index 0ad02e9..810c7ed 100644 --- a/internal/model/dto/Result.go +++ b/internal/model/dto/Result.go @@ -4,39 +4,63 @@ import ( "github.com/gogf/gf/v2/frame/g" ) -// 定义Result结构体 +// 定义响应结构 type Result struct { - Code int `json:"code"` // 响应码,200 代表成功;401 代表未授权 - Msg string `json:"msg"` // 响应消息 - Data interface{} `json:"data"` // 返回的数据 + Code int `json:"code"` + Message string `json:"message"` + Data interface{} `json:"data"` // 修改为实体类型 } -// Success 创建一个表示成功的 Result 实例(不需要数据) +/*成功,没有数据*/ func Success() *Result { - return &Result{Code: 200, Msg: "success", Data: g.Map{}} + return &Result{ + Code: 200, + Message: "success", + Data: g.Map{}, + } } -// SuccessWithData 创建一个表示成功的 Result 实例,并包含数据 +/*成功,有数据*/ func SuccessWithData(data interface{}) *Result { - return &Result{Code: 200, Msg: "success", Data: data} + return &Result{ + Code: 200, + Message: "success", + Data: data, + } } -// Error 创建一个表示错误的 Result 实例 +/*错误,只有错误信息,错误码0*/ func Error(msg string) *Result { - return &Result{Code: 0, Msg: msg, Data: g.Map{}} + return &Result{ + Code: 0, // 错误码 + Message: msg, // 错误信息 + Data: g.Map{}, + } } -// ErrorWithCode 创建一个表示错误的 Result 实例,并允许自定义错误码 +/*错误,有错误信息,有错误码*/ func ErrorWithCode(code int, msg string) *Result { - return &Result{Code: code, Msg: msg, Data: g.Map{}} + return &Result{ + Code: code, // 错误码 + Message: msg, // 错误信息 + Data: g.Map{}, + } } -// UnauthorizedWithCode 创建一个表示未授权的 Result 实例,并允许自定义错误码 -func UnauthorizedWithCode(code int, msg string) *Result { - return &Result{Code: code, Msg: msg, Data: g.Map{}} +/*未授权,有错误信息,错误码为401*/ +func Unauthorized(msg string) *Result { + return &Result{ + Code: 401, // 错误码 + Message: msg, // 错误信息 + Data: g.Map{}, + } } -// Unauthorized 创建一个表示未授权的 Result 实例,默认错误码为 401 -func Unauthorized(msg string) *Result { - return &Result{Code: 401, Msg: msg, Data: g.Map{}} +/*未授权,有错误信息,允许自定义错误码*/ +func UnauthorizedWithCode(code int, msg string) *Result { + return &Result{ + Code: code, // 错误码 + Message: msg, // 错误信息 + Data: g.Map{}, + } } diff --git a/internal/model/entity/go_shows.go b/internal/model/entity/go_shows.go index 791456e..518f387 100644 --- a/internal/model/entity/go_shows.go +++ b/internal/model/entity/go_shows.go @@ -10,18 +10,19 @@ import ( // GoShows is the golang structure for table go_shows. type GoShows struct { - Id int `json:"id" orm:"id" description:"展示内容唯一ID,自增"` // 展示内容唯一ID,自增 - Cover string `json:"cover" orm:"cover" description:"展示内容封面路径或相关标识,可为空"` // 展示内容封面路径或相关标识,可为空 - Name string `json:"name" orm:"name" description:"展示内容名称,最大长度255字符,不能为空"` // 展示内容名称,最大长度255字符,不能为空 - UserId int `json:"userId" orm:"user_id" description:"关联的用户ID,指向go_users表的id,长度为8位整数,不能为空"` // 关联的用户ID,指向go_users表的id,长度为8位整数,不能为空 - User *GoUsers `json:"user" orm:"with:id=user_id" description:"关联的用户信息"` // 关联的用户信息 - ReleaseTime *gtime.Time `json:"releaseTime" orm:"release_time" description:"展示内容发布时间,可为空"` // 展示内容发布时间,可为空 - VideoDuration *gtime.Time `json:"videoDuration" orm:"video_duration" description:"展示内容视频时长,格式根据实际情况定,可为空"` // 展示内容视频时长,格式根据实际情况定,可为空 - ViewCount int `json:"viewCount" orm:"view_count" description:"展示内容观看数量,初始值为0,可累加"` // 展示内容观看数量,初始值为0,可累加 - Comments int `json:"comments" orm:"comments" description:"展示内容评论数量,初始值为0,可累加"` // 展示内容评论数量,初始值为0,可累加 - Likes int `json:"likes" orm:"likes" description:"展示内容点赞数量,初始值为0,可累加"` // 展示内容点赞数量,初始值为0,可累加 - FlagType int `json:"flagType" orm:"flag_type" description:"展示内容标识类型,按业务规则确定,可为空"` // 展示内容标识类型,按业务规则确定,可为空 - ClubId int `json:"clubId" orm:"club_id" description:"关联的俱乐部ID,指向go_clubs表的id,可为空"` // 关联的俱乐部ID,指向go_clubs表的id,可为空 - ChannelId int `json:"channelId" orm:"channel_id" description:"关联的频道ID,指向go_channels表的id,可为空"` // 关联的频道ID,指向go_channels表的id,可为空 - Club *GoClubs `json:"club" orm:"with:id=club_id"` + Id int `json:"id" orm:"id" description:"展示内容唯一ID,自增"` // 展示内容唯一ID,自增 + Cover string `json:"cover" orm:"cover" description:"展示内容封面路径或相关标识,可为空"` // 展示内容封面路径或相关标识,可为空 + Name string `json:"name" orm:"name" description:"展示内容名称,最大长度255字符,不能为空"` // 展示内容名称,最大长度255字符,不能为空 + UserId int `json:"userId" orm:"user_id" description:"关联的用户ID,指向go_users表的id,长度为8位整数,不能为空"` // 关联的用户ID,指向go_users表的id,长度为8位整数,不能为空 + ReleaseTime *gtime.Time `json:"releaseTime" orm:"release_time" description:"展示内容发布时间,可为空"` // 展示内容发布时间,可为空 + VideoDuration *gtime.Time `json:"videoDuration" orm:"video_duration" description:"展示内容视频时长,格式根据实际情况定,可为空"` // 展示内容视频时长,格式根据实际情况定,可为空 + ViewCount int `json:"viewCount" orm:"view_count" description:"展示内容观看数量,初始值为0,可累加"` // 展示内容观看数量,初始值为0,可累加 + Comments int `json:"comments" orm:"comments" description:"展示内容评论数量,初始值为0,可累加"` // 展示内容评论数量,初始值为0,可累加 + Likes int `json:"likes" orm:"likes" description:"展示内容点赞数量,初始值为0,可累加"` // 展示内容点赞数量,初始值为0,可累加 + FlagType int `json:"flagType" orm:"flag_type" description:"展示内容标识类型,按业务规则确定,可为空"` // 展示内容标识类型,按业务规则确定,可为空 + ClubId int `json:"clubId" orm:"club_id" description:"关联的俱乐部ID,指向go_clubs表的id,可为空"` // 关联的俱乐部ID,指向go_clubs表的id,可为空 + ChannelId int `json:"channelId" orm:"channel_id" description:"关联的频道ID,指向go_channels表的id,可为空"` // 关联的频道ID,指向go_channels表的id,可为空 + + User *GoUsers `json:"user" orm:"with:id=user_id"` + Club *GoClubs `json:"club" orm:"with:id=club_id"` }