From 84c809190d8dfda7457c101b65efbfe41c1c861f Mon Sep 17 00:00:00 2001 From: Dorvan Date: Thu, 25 Jan 2024 13:43:28 +0800 Subject: [PATCH] chore: ad model & service , amend meta image --- .../docs/guide/controller.md | 31 ++++++++++- docs/go-gin-boilerplate/docs/guide/model.md | 51 +++++++++++++++++++ docs/go-gin-boilerplate/docs/guide/service.md | 34 +++++++++++++ docs/go-gin-boilerplate/docs/guide/swagger.md | 8 ++- docs/go-gin-boilerplate/docusaurus.config.ts | 2 +- 5 files changed, 121 insertions(+), 5 deletions(-) diff --git a/docs/go-gin-boilerplate/docs/guide/controller.md b/docs/go-gin-boilerplate/docs/guide/controller.md index a68d17b..6a2228d 100644 --- a/docs/go-gin-boilerplate/docs/guide/controller.md +++ b/docs/go-gin-boilerplate/docs/guide/controller.md @@ -30,8 +30,35 @@ func GetHello(c *gin.Context) { } ``` -### 参数校验 + ## 服务调用 -## 返回响应 +在控制器中,我们可以调用服务层,进行业务处理。 + +```go + +type ExampleController struct{} + +func (exampleController *ExampleController) GetExample(ctx *gin.Context) { + exampleIdStr := ctx.Query("exampleId") + exampleId, err := strconv.Atoi(exampleIdStr) + if err != nil { + ctx.JSON(http.StatusBadRequest, gin.H{"code": http.StatusBadRequest, "message": "error param"}) + return + } + + res := exampleService.GetExample(exampleId) + if res == nil { + ctx.JSON(http.StatusNotFound, gin.H{"code": http.StatusNotFound, "message": "Not Found"}) + return + } + ctx.JSON(http.StatusOK, res) +} +``` + +在上面的代码中,GetExample 方法完成了以下几个内容 + +- 解析请求参数,获取 `exampleId` +- 调用 `exampleService.GetExample` 方法,获取 `example` 数据 +- 返回响应 diff --git a/docs/go-gin-boilerplate/docs/guide/model.md b/docs/go-gin-boilerplate/docs/guide/model.md index 572c61a..797fb5b 100644 --- a/docs/go-gin-boilerplate/docs/guide/model.md +++ b/docs/go-gin-boilerplate/docs/guide/model.md @@ -3,3 +3,54 @@ sidebar_position: 3.1 --- # 模型 + +模型层负责数据结构的定义,Go Gin Boilerplate 使用 GORM 作为 ORM 工具,支持 MySQL、PostgreSQL、SQLite、SQL Server 等多种数据库。 + +所以在 模型 定义的时候,我们可以使用 gin 框架提供的 gorm 标签,来定义模型的字段类型、长度、索引、唯一性等。 + +在 `internal/model` 目录下,用于存放模型层相关代码。 + +## 基础模型 + +`internal/model.go` 作为模型包的入口文件,用于定义模型的基础模型等内容。 + +在 `internal/model.go` 中,我们定义 `BasicModel` 结构体,作为所有模型的基础模型。 + +```go +// BasicModel 基础模型 + +type BasicModel struct { + ID uint `gorm:"primarykey" json:"id"` // ID + CreatedAt time.Time `json:"created_at"` // 创建时间 + UpdatedAt time.Time `json:"updated_at"` // 更新时间 + DeletedAt *time.Time `gorm:"index" json:"deleted_at"` +} +``` + +### 嵌入基础模型 + +在定义模型的时候,我们可以嵌入 `BasicModel` 结构体,来继承基础模型的字段。 + +```go + +type Example struct { + BasicModel + + // other code field ... +} +``` + +## 模型定义 + +在 `internal/model` 目录下,我们规定一个文件声明一个模型,例如 `example.go` 文件,就是我们的示例模型,用于存放示例模型的定义。 + +```go +package models + +type Example struct { + BasicModel + + Name string `json:"name"` // Name + Status string `json:"status" gorm:"default:active"` // Status, active or inactive +} +``` diff --git a/docs/go-gin-boilerplate/docs/guide/service.md b/docs/go-gin-boilerplate/docs/guide/service.md index b067d23..5b44394 100644 --- a/docs/go-gin-boilerplate/docs/guide/service.md +++ b/docs/go-gin-boilerplate/docs/guide/service.md @@ -3,3 +3,37 @@ sidebar_position: 3 --- # 服务 + +服务层是业务逻辑的具体实现,主要负责处理业务逻辑,包括数据的读取、写入、修改、删除等操作。 + +在 `internal/service` 目录下,用于存放服务层相关代码。 + +## 服务示例 + +在 `internal/service` 目录下,我们规定一个文件声明一个服务,例如 `example.go` 文件,就是我们的示例服务,用于存放示例服务的定义。 + +```go + +type ExampleService struct{} + +func (exampleService *ExampleService) CreateExample(data map[string]interface{}) *models.Example { + + example := models.Example{ + Name: data["name"].(string), + } + + res := db.Create(&example) + if res.Error != nil || res.RowsAffected == 0 { + return nil + } + + return &example + +} +``` + +上面的代码中,我们定义了 `ExampleService` 结构体,用于存放示例服务的方法。 + +在 `CreateExample` 方法中,我们接收一个 `map[string]interface{}` 类型的参数,用于接收请求参数,然后创建 `Example` 模型,并将其写入数据库。 + +确保 在 服务层,我们只处理业务逻辑,不要处理请求参数的解析、响应的返回等操作。 diff --git a/docs/go-gin-boilerplate/docs/guide/swagger.md b/docs/go-gin-boilerplate/docs/guide/swagger.md index 189bc6d..1bf136a 100644 --- a/docs/go-gin-boilerplate/docs/guide/swagger.md +++ b/docs/go-gin-boilerplate/docs/guide/swagger.md @@ -22,6 +22,10 @@ Go Gin Boilerplate 使用 [Gin-Swagger](https://github.com/swaggo/gin-swagger) ## 使用 - +在终端执行以下命令 - +```sh +make swagger +``` + +会看到在 `api/swagger` 目录下生成相关内容 diff --git a/docs/go-gin-boilerplate/docusaurus.config.ts b/docs/go-gin-boilerplate/docusaurus.config.ts index 01370a5..fcba6f8 100644 --- a/docs/go-gin-boilerplate/docusaurus.config.ts +++ b/docs/go-gin-boilerplate/docusaurus.config.ts @@ -81,7 +81,7 @@ const config: Config = { // { name: "og:url", content: "https://github.com/sanjayheaven" }, ], - image: "img/docusaurus-social-card.jpg", + image: "img/cover.png", navbar: { title: "Go Gin Boilerplate", logo: { alt: "Logo", src: "img/golang.png" },