diff --git a/book/v3/controllers/arch.drawio b/book/v3/controllers/arch.drawio new file mode 100644 index 0000000..796cc84 --- /dev/null +++ b/book/v3/controllers/arch.drawio @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/book/v3/controllers/book.go b/book/v3/controllers/book.go new file mode 100644 index 0000000..c40cb32 --- /dev/null +++ b/book/v3/controllers/book.go @@ -0,0 +1,42 @@ +package controllers + +import ( + "context" + + "122.51.31.227/go-course/go18/book/v3/config" + "122.51.31.227/go-course/go18/book/v3/models" +) + +var Book = &BookController{} + +type BookController struct { +} + +func NewGetBookRequest(bookNumber string) *GetBookRequest { + return &GetBookRequest{ + BookNumber: bookNumber, + } +} + +type GetBookRequest struct { + BookNumber string + // RequestId string + // ... +} + +// 核心功能 +// ctx: Trace, 支持请求的取消, request_id +// GetBookRequest 为什么要把他封装为1个对象, GetBook(ctx context.Context, BookNumber string), 保证你的接口的签名的兼容性 +// BookController.GetBook(, "") +func (c *BookController) GetBook(ctx context.Context, in *GetBookRequest) (*models.Book, error) { + // context.WithValue(ctx, "request_id", 111) + // ctx.Value("request_id") + + bookInstance := &models.Book{} + // 需要从数据库中获取一个对象 + if err := config.DB().Where("id = ?", in.BookNumber).Take(bookInstance).Error; err != nil { + return nil, err + } + + return bookInstance, nil +} diff --git a/book/v3/controllers/comment.go b/book/v3/controllers/comment.go new file mode 100644 index 0000000..b13189e --- /dev/null +++ b/book/v3/controllers/comment.go @@ -0,0 +1,30 @@ +package controllers + +import ( + "context" + "fmt" + + "122.51.31.227/go-course/go18/book/v3/models" +) + +var Comment = &CommentController{} + +type CommentController struct { +} + +type AddCommentRequest struct { + BookNumber string +} + +func (c *CommentController) AddComment(ctx context.Context, in *AddCommentRequest) (*models.Comment, error) { + // 业务处理的细节 + // 多个业务模块 进行交互 + book, err := Book.GetBook(ctx, NewGetBookRequest(in.BookNumber)) + if err != nil { + // 获取查询不到报错 + return nil, err + } + // 判断book的状态 + fmt.Println(book) + return nil, nil +} diff --git a/book/v3/handlers/book.go b/book/v3/handlers/book.go index ecbf636..27901a3 100644 --- a/book/v3/handlers/book.go +++ b/book/v3/handlers/book.go @@ -5,6 +5,7 @@ import ( "strconv" "122.51.31.227/go-course/go18/book/v3/config" + "122.51.31.227/go-course/go18/book/v3/controllers" "122.51.31.227/go-course/go18/book/v3/models" "github.com/gin-gonic/gin" ) @@ -135,14 +136,13 @@ func (h *BookApiHandler) createBook(ctx *gin.Context) { } func (h *BookApiHandler) getBook(ctx *gin.Context) { - bookInstance := &models.Book{} - // 需要从数据库中获取一个对象 - if err := config.DB().Where("id = ?", ctx.Param("bn")).Take(bookInstance).Error; err != nil { - ctx.JSON(400, gin.H{"code": 500, "message": err.Error()}) + book, err := controllers.Book.GetBook(ctx, controllers.NewGetBookRequest(ctx.Param("bn"))) + if err != nil { + ctx.JSON(400, gin.H{"code": 400, "message": err.Error()}) return } - ctx.JSON(200, bookInstance) + ctx.JSON(200, book) } func (h *BookApiHandler) updateBook(ctx *gin.Context) { diff --git a/book/v3/handlers/comment.go b/book/v3/handlers/comment.go new file mode 100644 index 0000000..fed177a --- /dev/null +++ b/book/v3/handlers/comment.go @@ -0,0 +1,16 @@ +package handlers + +import ( + "github.com/gin-gonic/gin" +) + +var Comment = &CommentApiHandler{} + +type CommentApiHandler struct { +} + +func (h *CommentApiHandler) AddComment(ctx *gin.Context) { + // Book.getBook() + // Book.GetBook(id) -> BookInstance + // controllers.Book.GetBook(ctx, controllers.NewGetBookRequest(ctx.Param("bn"))) +} diff --git a/book/v3/handlers/user.go b/book/v3/handlers/user.go new file mode 100644 index 0000000..5ac8282 --- /dev/null +++ b/book/v3/handlers/user.go @@ -0,0 +1 @@ +package handlers diff --git a/book/v3/main.go b/book/v3/main.go index 0bab28f..4798731 100644 --- a/book/v3/main.go +++ b/book/v3/main.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + "122.51.31.227/go-course/go18/book/v3/config" "122.51.31.227/go-course/go18/book/v3/handlers" "github.com/gin-gonic/gin" ) @@ -13,7 +14,9 @@ func main() { handlers.Book.Registry(server) - if err := server.Run(":8080"); err != nil { + ac := config.C().Application + // 启动服务 + if err := server.Run(fmt.Sprintf("%s:%d", ac.Host, ac.Port)); err != nil { fmt.Println(err) os.Exit(1) } diff --git a/book/v3/models/README.md b/book/v3/models/README.md index 0543d93..a74afd1 100644 --- a/book/v3/models/README.md +++ b/book/v3/models/README.md @@ -1 +1,2 @@ -# 数据模型 \ No newline at end of file +# 数据模型 + diff --git a/book/v3/models/comment.go b/book/v3/models/comment.go new file mode 100644 index 0000000..ce6b39b --- /dev/null +++ b/book/v3/models/comment.go @@ -0,0 +1,4 @@ +package models + +type Comment struct { +}