본문 바로가기
IT 초보코딩의 세계/Go 언어

Go 언어 Back End 제작해보기(라우팅 설정) 2장

by 조이럭키7 2023. 5. 22.
반응형

  Gin 프레임워크 설정

GOPATH 디렉토리로 프로프트를 이동한 후 Gin 프레임워크 설치

   
go get -u github.com/gin-gonic/gin

src 디렉토리에 rest 디렉토리를 생성하고 handler.js 파일을 생성하고 작성

package rest

import (
  "fmt"
  "log"
  "net/http"
  "strconv"
  "dblayer"
  "models"
  "github.com/gin-gonic/gin"
)

type Handlerinterface interface {
  GetProducts(c *gin.Context)
  GetPromos(c *gin.Context)
  AddUser(c *gin.Context)
  Signln(c *gin.Context)
  SignOut(c *gin.Context)
  GetOrders(c *gin.Context)
  Charge(c *gin.Context)
}

type Handler struct {
  db dblayer.DBLayer
}

func NewHandler() (*Handler, error) {
  return new(Handler), nil
}

func (h *Handler) GetMainPage(c *gin.Context) {
  log.Println("Main page....")
  c.String(http.StatusOK, "Main page for secure API!!")
  //fmt.Fprintf(c.Writer, "Main page for secure API!!")
}

func (h *Handler) GetProducts(c *gin.Context) {
  if h.db == nil {
  return
  }
  products, err := h.db.GetAllProducts()
  if err != nil {
  c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  return
  }
  fmt.Printf("Found %d products\n", len(products))
  c.JSON(http.StatusOK, products)
}

func (h *Handler) GetPromos(c *gin.Context) {
  if h.db == nil {
  return
  }
  promos, err := h.db.GetPromos()
  if err != nil {
  c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  return
  }
  c.JSON(http.StatusOK, promos)
}

func (h *Handler) AddUser(c *gin.Context) {
  if h.db == nil {
  return
  }
  var customer models.Customer
  err := c.ShouldBindJSON(&customer)
  if err != nil {
  c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  return
  }
  customer, err = h.db.AddUser(customer)
  if err != nil {
  c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  return
  }
  c.JSON(http.StatusOK, customer)
}

func (h *Handler) SignOut(c *gin.Context) {
  if h.db == nil {
  return
  }
  p := c.Param("id")
  id, err := strconv.Atoi(p)
  if err != nil {
  c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  return
  }

  err = h.db.SignOutUserById(id)
  if err != nil {
  c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  return
  }
}

func (h *Handler) GetOrders(c *gin.Context) {
  if h.db == nil {
  return
  }
  p := c.Param("id")
  id, err := strconv.Atoi(p)
  if err != nil {
  c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  return
  }
  orders, err := h.db.GetCustomerOrdersByID(id)
  if err != nil {
  fmt.Println(err)
  c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  return
  }
  c.JSON(http.StatusOK, orders)
}

func (h *Handler) Charge(c *gin.Context) {
  if h.db == nil {
  return
  }
}

src 디렉토리에 rest 디렉토리에 rest.js 파일을 생성하고 작성

package rest

import (
  "github.com/gin-gonic/gin"
)

func RunAPI(address string) error {
  //Get gin's default engine
  r := gin.Default()
  //Define a handler
  h, _ := NewHandler()

  r.GET("/", h.GetMainPage)
  //get products
  r.GET("/products", h.GetProducts)
  //get promos
  r.GET("/promos", h.GetPromos)

  usersGroup := r.Group("/users")
  {
  usersGroup.POST("/charge", h.Charge)
  usersGroup.POST("/signin", h.SignIn)
  usersGroup.POST("", h.AddUser)
  }
  return r.Run(address)
}

rest 디렉토리로 프롬프트를 옮기고 go install 명령 수행

src 디렉토리에 main.js 파일을 생성하고 작성

package main

import (
  "log"
  "rest"
)

func main() {
  log.Println("Main log....")
  rest.RunAPI(":8000")
}

src 디렉토리로 프롬프트를 옮기고 go build main.go

./main 으로 실행

반응형

댓글