Golang - GraphQL - Create and Retrieve Links

Introduction

上一篇已经利用了 Docker & third party package 初始化 Database
接下来就要改写程式从 Database 读写资料

Sample Code

完成后的资料夹阶层
http://img2.58codes.com/2024/20118878fm8AoGreBl.png

CreateLinks

internal/users/users.go 新增程式码

package userstype User struct {ID       string `json:"id"`Username string `json:"name"`Password string `json:"password"`}

internal/links/links.go 新增程式码,这段要注意 import 即可
这段主要是在使用 Database 插入资料后返回插入后的 ID

package linksimport (mig "Go-GraphQL/internal/pkg/db/migrations/mysql""Go-GraphQL/internal/users""log")// #1type Link struct {ID      stringTitle   stringAddress stringUser    *users.User}// #2func (link Link) Save() int64 {//#3stmt, err := mig.Db.Prepare("INSERT INTO Links(Title,Address) VALUES(?,?)")if err != nil {log.Fatal(err)}//#4res, err := stmt.Exec(link.Title, link.Address)if err != nil {log.Fatal(err)}//#5id, err := res.LastInsertId()if err != nil {log.Fatal("Error:", err.Error())}log.Print("Row inserted!")return id}

schema.resolvers.go 改写 CreateLink function

func (r *mutationResolver) CreateLink(ctx context.Context, input model.NewLink) (*model.Link, error) {var link links.Linklink.Title = input.Titlelink.Address = input.AddresslinkID := link.Save()return &model.Link{ID: strconv.FormatInt(linkID, 10), Title:link.Title, Address:link.Address}, nil}

$ go run server.go 执行后到 http://localhost:8080/ 输入

mutation create{  createLink(input: {title: "something", address: "somewhere"}){    title,    address,    id,  }}

接着会得到结果

{  "data": {    "createLink": {      "title": "something",      "address": "somewhere",      "id": "1"    }  }}

links Query

前面已经完成 CreateLinks 了,接下来要实现查询
internal/links/links.go 新增程式码

func GetAll() []Link {stmt, err := database.Db.Prepare("select id, title, address from Links")if err != nil {log.Fatal(err)}defer stmt.Close()rows, err := stmt.Query()if err != nil {log.Fatal(err)}defer rows.Close()var links []Linkfor rows.Next() {var link Linkerr := rows.Scan(&link.ID, &link.Title, &link.Address)if err != nil{log.Fatal(err)}links = append(links, link)}if err = rows.Err(); err != nil {log.Fatal(err)}return links}

schema.resolvers.go 改写 Links funciton

func (r *queryResolver) Links(ctx context.Context) ([]*model.Link, error) {var resultLinks []*model.Linkvar dbLinks []links.LinkdbLinks = links.GetAll()for _, link := range dbLinks{resultLinks = append(resultLinks, &model.Link{ID:link.ID, Title:link.Title, Address:link.Address})}return resultLinks, nil}

$ go run server.go 重新执行后到 http://localhost:8080/ 输入

query {  links {    title    address    id  }}

得到结果

{  "data": {    "links": [      {        "title": "something",        "address": "somewhere",        "id": "1"      }    ]  }}

Reference

https://www.howtographql.com/graphql-go/5-create-and-retrieve-links/

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章