Commit 3b79ce5f authored by 李宇怀's avatar 李宇怀
Browse files

完成task C框架

parent b1bd0de1
package route
import (
"go-svc-tpl/api/dto"
"go-svc-tpl/internal/controller"
"github.com/gin-gonic/gin"
)
// 设置路由
func setupLinkController(r *gin.RouterGroup) {
lcw := LinkCtlWrapper{
ctl: controller.NewLinkController(), //Factory method of ILinkController.
// Implemented in controller package.
}
p := r.Group("/link")
p.POST("/create", controller.ParseTokenMidware(), lcw.Create)
p.POST("/delete", controller.ParseTokenMidware(), lcw.Delete)
p.GET("/getinfo", controller.ParseTokenMidware(), lcw.GetInfo)
p.POST("/update", controller.ParseTokenMidware(), lcw.Update)
p.GET("/getlist", controller.ParseTokenMidware(), lcw.GetList)
}
type LinkCtlWrapper struct {
ctl controller.ILinkController
}
// create link
func (w *LinkCtlWrapper) Create(c *gin.Context) {
var req dto.LinkCreateReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
resp, err := w.ctl.Create(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, resp)
}
// delete link
func (w *LinkCtlWrapper) Delete(c *gin.Context) {
var req dto.LinkDeleteReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
err := w.ctl.Delete(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, "delete successfully")
}
// get information
func (w *LinkCtlWrapper) GetInfo(c *gin.Context) {
var req dto.GetLinkInfoReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
resp, err := w.ctl.GetInfo(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, resp)
}
// update link
func (w *LinkCtlWrapper) Update(c *gin.Context) {
var req dto.LinkUpdateReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
err := w.ctl.Update(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, "update successfully")
}
// get list
func (w *LinkCtlWrapper) GetList(c *gin.Context) {
var req dto.GetLinkListReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
resp, err := w.ctl.GetList(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, resp)
}
package route
import (
"go-svc-tpl/api/dto"
"go-svc-tpl/internal/controller"
"github.com/gin-gonic/gin"
)
// 设置路由
func setupServerController(r *gin.RouterGroup) {
lcw := ServerCtlWrapper{
ctl: controller.NewServerController(), //Factory method of ILinkController.
// Implemented in controller package.
}
p := r.Group("/server")
p.GET("/getlink", controller.ParseTokenMidware(), lcw.Link)
p.GET("/getveri", controller.ParseTokenMidware(), lcw.Veri)
}
type ServerCtlWrapper struct { //Wrapper类隔离接口具体逻辑
ctl controller.IServerController
}
// get link
func (w *ServerCtlWrapper) Link(c *gin.Context) {
var req dto.ServerLinkReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
err := w.ctl.Link(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, "get link server successfully")
}
// get verification
func (w *ServerCtlWrapper) Veri(c *gin.Context) {
var req dto.ServerVeriReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
err := w.ctl.Veri(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, "get verification server successfully")
}
package route
import (
"go-svc-tpl/api/dto"
"go-svc-tpl/internal/controller"
"github.com/gin-gonic/gin"
)
// 设置路由
func setupUserController(r *gin.RouterGroup) {
lcw := UserCtlWrapper{
ctl: controller.NewUserController(), //Factory method of ILinkController.
// Implemented in controller package.
}
p := r.Group("/user")
p.POST("/register", controller.ParseTokenMidware(), lcw.Register)
p.GET("/getveri", controller.ParseTokenMidware(), lcw.GetVeri)
p.POST("/login", controller.ParseTokenMidware(), lcw.Login)
p.GET("/getinfo", controller.ParseTokenMidware(), lcw.GetInfo)
p.POST("/modifyinfo", controller.ParseTokenMidware(), lcw.ModifyInfo)
p.POST("/modifypwd", controller.ParseTokenMidware(), lcw.ModifyPwd)
}
type UserCtlWrapper struct { //Wrapper类隔离接口具体逻辑
ctl controller.IUserController
}
// register user
func (w *UserCtlWrapper) Register(c *gin.Context) {
var req dto.UserRegisterReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
err := w.ctl.Register(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, "register successfully")
}
// get verification
func (w *UserCtlWrapper) GetVeri(c *gin.Context) {
//var req dto.UserRegisterReq
//if err := dto.BindReq(c, &req); err != nil {
// dto.ResponseFail(c, err)
// return
//}
resp, err := w.ctl.GetVeri(c)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, resp)
}
// login
func (w *UserCtlWrapper) Login(c *gin.Context) {
var req dto.UserLoginReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
err := w.ctl.Login(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, "login successfully")
}
// get user information
func (w *UserCtlWrapper) GetInfo(c *gin.Context) {
//var req dto.UserRegisterReq
//if err := dto.BindReq(c, &req); err != nil {
// dto.ResponseFail(c, err)
// return
//}
resp, err := w.ctl.GetInfo(c)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, resp)
}
// modify user information
func (w *UserCtlWrapper) ModifyInfo(c *gin.Context) {
var req dto.UserModifyInfoReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
err := w.ctl.ModifyInfo(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, "modify information successfully")
}
// modify user password
func (w *UserCtlWrapper) ModifyPwd(c *gin.Context) {
var req dto.UserModifyPwdReq
if err := dto.BindReq(c, &req); err != nil {
dto.ResponseFail(c, err)
return
}
err := w.ctl.ModifyPwd(c, &req)
if err != nil {
dto.ResponseFail(c, err)
return
}
dto.ResponseSuccess(c, "modify password successfully")
}
......@@ -18,6 +18,7 @@ require (
github.com/bytedance/sonic v1.9.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
......
......@@ -4,6 +4,7 @@ import (
"go-svc-tpl/api/dto"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
// >>>>>>>>>>>>>>>>>> Interface >>>>>>>>>>>>>>>>>>
......@@ -14,3 +15,41 @@ type ILinkController interface { //定义tag link 下的操作
Update(*gin.Context, *dto.LinkUpdateReq) error
GetList(*gin.Context, *dto.GetLinkListReq) (*dto.GetLinkListResp, error)
}
// >>>>>>>>>>>>>>>>>> Controller >>>>>>>>>>>>>>>>>>
// check interface implementation
var _ ILinkController = (*LinkController)(nil)
var NewLinkController = func() *LinkController {
return &LinkController{}
}
type LinkController struct {
db *gorm.DB
}
// create
func (c *LinkController) Create(ctx *gin.Context, req *dto.LinkCreateReq) (*dto.LinkCreateResp, error) {
return nil, nil
}
// delete
func (c *LinkController) Delete(ctx *gin.Context, req *dto.LinkDeleteReq) error {
return nil
}
// getinfo
func (c *LinkController) GetInfo(ctx *gin.Context, req *dto.GetLinkInfoReq) (*dto.GetLinkInfoResp, error) {
return nil, nil
}
// update
func (c *LinkController) Update(ctx *gin.Context, req *dto.LinkUpdateReq) error {
return nil
}
// getlist
func (c *LinkController) GetList(ctx *gin.Context, req *dto.GetLinkListReq) (*dto.GetLinkListResp, error) {
return nil, nil
}
package controller
import (
"net/http"
"github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin"
)
// 解析和验证身份认证令牌
func ParseTokenMidware() gin.HandlerFunc {
return func(c *gin.Context) {
// 在此处添加解析和验证令牌的逻辑
tokenString := c.GetHeader("Authorization")
if tokenString == "" {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Missing token"})
return
}
// 解析和验证令牌
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// 在此处添加密钥获取逻辑
// 通常从配置文件、环境变量等获取密钥
return []byte("your-secret-key"), nil
})
if err != nil || !token.Valid {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"})
return
}
// 令牌验证通过,继续处理请求
c.Next()
}
}
......@@ -4,6 +4,7 @@ import (
"go-svc-tpl/api/dto"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
// >>>>>>>>>>>>>>>>>> Interface >>>>>>>>>>>>>>>>>>
......@@ -11,3 +12,23 @@ type IServerController interface {
Link(*gin.Context, *dto.ServerLinkReq) error
Veri(*gin.Context, *dto.ServerVeriReq) error
}
// >>>>>>>>>>>>>>>>>> Controller >>>>>>>>>>>>>>>>>
var _ IServerController = (*ServerController)(nil)
var NewServerController = func() *ServerController {
return &ServerController{}
}
type ServerController struct {
db *gorm.DB
}
func (c *ServerController) Link(ctx *gin.Context, req *dto.ServerLinkReq) error {
//不是很懂这个函数要干什么
return nil
}
func (c *ServerController) Veri(ctx *gin.Context, req *dto.ServerVeriReq) error {
return nil
}
......@@ -4,6 +4,7 @@ import (
"go-svc-tpl/api/dto"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
// >>>>>>>>>>>>>>>>>> Interface >>>>>>>>>>>>>>>>>>
......@@ -15,3 +16,50 @@ type IUserController interface { //定义tag user 下的操作
ModifyInfo(*gin.Context, *dto.UserModifyInfoReq) error
ModifyPwd(*gin.Context, *dto.UserModifyPwdReq) error
}
var _ IUserController = (*UserController)(nil)
var NewUserController = func() *UserController {
return &UserController{}
}
type UserController struct {
db *gorm.DB
}
// Register
func (c *UserController) Register(ctx *gin.Context, req *dto.UserRegisterReq) error {
return nil
}
// GetVeri
func (c *UserController) GetVeri(ctx *gin.Context) (*dto.GetVeriResp, error) {
return nil, nil
}
// Login
func (c *UserController) Login(ctx *gin.Context, req *dto.UserLoginReq) error {
return nil
}
// GetInfo
func (c *UserController) GetInfo(ctx *gin.Context) (*dto.GetUserInfoResp, error) {
return nil, nil
}
// ModifyInfo
func (c *UserController) ModifyInfo(ctx *gin.Context, req *dto.UserModifyInfoReq) error {
return nil
}
// ModifyPwd
func (c *UserController) ModifyPwd(ctx *gin.Context, req *dto.UserModifyPwdReq) error {
return nil
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment