Skip to content

Commit

Permalink
chore: ad model & service , amend meta image
Browse files Browse the repository at this point in the history
  • Loading branch information
sanjayheaven committed Jan 25, 2024
1 parent 85b245c commit 84c8091
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 5 deletions.
31 changes: 29 additions & 2 deletions docs/go-gin-boilerplate/docs/guide/controller.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` 数据
- 返回响应
51 changes: 51 additions & 0 deletions docs/go-gin-boilerplate/docs/guide/model.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
```
34 changes: 34 additions & 0 deletions docs/go-gin-boilerplate/docs/guide/service.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` 模型,并将其写入数据库。

确保 在 服务层,我们只处理业务逻辑,不要处理请求参数的解析、响应的返回等操作。
8 changes: 6 additions & 2 deletions docs/go-gin-boilerplate/docs/guide/swagger.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ Go Gin Boilerplate 使用 [Gin-Swagger](https://github.com/swaggo/gin-swagger)

## 使用

<!-- 介绍使用 swagger,一步步来 -->
在终端执行以下命令

<!-- ,怎么安装,添加到路由,注入权限 -->
```sh
make swagger
```

会看到在 `api/swagger` 目录下生成相关内容
2 changes: 1 addition & 1 deletion docs/go-gin-boilerplate/docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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" },
Expand Down

0 comments on commit 84c8091

Please sign in to comment.