Тупик на POST-запросе Webservice с использованием gin-go gorm

Я захожу в тупик, когда запускаю тесты по запросу POST.

Я предполагаю, что Горм замедляет мой запрос, используя переходы. журнал показывает:

(Ошибка 1213: обнаружена тупиковая ситуация при попытке получить блокировку; попробуйте перезапустить транзакцию)

[2018-08-21 18:00:09]

(Ошибка 1213: обнаружена тупиковая ситуация при попытке получить блокировку; попробуйте перезапустить транзакцию)

[2018-08-21 18:00:09]

(Ошибка 1213: обнаружена тупиковая ситуация при попытке получить блокировку; попробуйте перезапустить транзакцию)

[2018-08-21 18:00:09]

(Ошибка 1213: обнаружена тупиковая ситуация при попытке получить блокировку; попробуйте перезапустить транзакцию)

[2018-08-21 18:00:09]

(Ошибка 1213: обнаружена тупиковая ситуация при попытке получить блокировку; попробуйте перезапустить транзакцию)

[2018-08-21 18:00:09]

(Ошибка 1213: обнаружена тупиковая ситуация при попытке получить блокировку; попробуйте перезапустить транзакцию)

[2018-08-21 18:00:09]

[GIN] 2018/08/21 - 18:00:09 | 200 | 6.938488185с | 192.168.10.39 | POST / т / пост

[GIN] 2018/08/21 - 18:00:09 | 500 | 8.471536241s | 192.168.10.39 | POST / т / пост

[GIN] 2018/08/21 - 18:00:09 | 500 | 5.897599896s | 192.168.10.39 | POST / т / пост

[GIN] 2018/08/21 - 18:00:09 | 500 | 6.947142107s | 192.168.10.39 | POST / т / пост

[GIN] 2018/08/21 - 18:00:09 | 200 | 7.010271289s | 192.168.10.39 | POST / т / пост

[GIN] 2018/08/21 - 18:00:09 | 200 | 7.104230316s | 192.168.10.39 | POST / т / пост

[GIN] 2018/08/21 - 18:00:09 | 200 | 6.400713187s | 192.168.10.39 | POST / т / пост

[GIN] 2018/08/21 - 18:00:09 | 200 | 7.233930237s | 192.168.10.39 | POST / т / пост

вот мой веб-сервис

package main

import (
    "net/http"
    "sync"
    "github.com/gin-gonic/gin"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

var db *gorm.DB
var wg sync.WaitGroup


type (
// therapistModel describes a therapistModel type
    Therapist struct {
        ID                      int             `gorm:"AUTO_INCREMENT"`
//      UserId                  int             `json:"user_id"`
        Firstname               string          `gorm:"column:firstname"`
        Lastname                string          `gorm:"column:lastname"`
//      ContactId               int             `json:"contact_id"`
//      ProfessionalAddressId   int             `json:"professional_address_id"`
//      Gender                  int             `json:"gender"`
        NumId                   string          `json:"num_id"`
//      Fin                     int             `json:"fin"`
//      ProfessionId            int             `json:"profession_id"`
//      QualificationId         int             `json:"qualification_id"`
//      ProfessionalNumId       int             `json:"professional_num_id"`
//      Image                   string          `json:"image"`
//      ProformHeader           string          `json:"proform_header"`
//      ProformFooter           string          `json:"proform_footer"`
//      TermsAndConditions      string          `json:"terms_and_conditions"`
//      CreatedAt               *time.Time      `json:"created_at"`
//      UpdatedAt               *time.Time      `json:"updated_at"`
        Diagnoses               []Diagnosis     `gorm:"many2many:therapists_diagnoses;"`

    }

//diagnosisModel describes a diagnosisModel type
    Diagnosis struct {
        ID                  int             `json:"id" gorm:"AUTO_INCREMENT"`
        InterventionFieldId int             `json:"intervention_field_id"`
        Diagnosis           string          `json:"diagnosis"`
        StateId             int             `json:"state_id"`
//      permissionId        int             `json:"permission_id"`
        Therapists          []*Therapist        `gorm:"many2many:therapists_diagnoses;"`
    }
)

func InitDb() *gorm.DB {
    var err error
    db, err := gorm.Open("mysql", "username:password@tcp(10.10.10.200)/testes?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic("failed to connect database")
    } else {
        return db
    }
}

func main () {

    router := gin.Default()

    therapist := router.Group("/t")
    {
        therapist.GET("/", fetchAllTherapists)
        therapist.GET("/d/:id", fetchTherapistsDiagnoses)
        therapist.POST("/post", postTherapistDiagnosis)
    }
    router.Run(":4000")
}

func fetchAllTherapists(c *gin.Context) {
    db := InitDb()
    defer db.Close()
    c.Header("Content-Type", "application/json")
    var therapists []Therapist

    if err := db.Find(&therapists).Error; err != nil {
        c.AbortWithStatus(404)
    } else {
        c.JSON(http.StatusOK, therapists)
    }
}

func fetchTherapistsDiagnoses(c *gin.Context) {
    db := InitDb()
    defer db.Close()
    id := c.Params.ByName("id")
    var diagnoses []Diagnosis
    var therapist Therapist
    db.Model(&therapist).Related(&diagnoses, "Diagnoses")

    if err := db.Preload("Diagnoses").First(&therapist, id).Error; err != nil {
        c.AbortWithStatus(404)
    } else {
        c.JSON(http.StatusOK, therapist.Diagnoses)
    }
}

func postTherapistDiagnosis(c *gin.Context) {
    db := InitDb()
    defer db.Close()
    id := c.PostForm("id")
    var therapist []*Therapist
    if err := db.First(&therapist, id).Error; err != nil{
        c.AbortWithStatusJSON(http.StatusNotFound, gin.H{"error": "Therapist not found"})
    } else {
        var diagnosis = Diagnosis{
            InterventionFieldId: 1,
            Diagnosis:           "JoelTeste",
            StateId:             1,
            Therapists:          therapist}
        if err := db.Save(&diagnosis).Error; err != nil {
            c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "Failed to save Diagnosis"})
        } else {
            c.JSON(http.StatusOK, diagnosis)
        }
    }
}

0 ответов

Другие вопросы по тегам