douxiajia6309 2018-07-18 17:40
浏览 27

错误#01:错误1062:键“ type_entity_id”的条目“ enquiry-564”重复

I have error in golang application developed with gin framework, i losed 1 day, but i dont understend where i wrong, because enquiry-564 is not duplicate. this is the curent error :

{[{"body": {"text": ""}, "enquiryID": 564, "meta": {"message": {"enquiry_offer": {"delivery_time": 1, "revision_count": 3, "_service_title": "c c sharp cpp java vb work", "price": 1100, "expired_on": "2018-07-21T17:02:29Z", "id": 82, "_service_id": "lBdHu0"}}}, "userID": 1, "type": "enquiry_offer"}]}[GIN] 2018/07/18 - 17:02:28 | 500 |    1.597772ms | 2a01:7e01:0:0:f03c:91ff:fe3e:826a | POST     /api/private/message/enquiry

Error #01: Error 1062: Duplicate entry 'enquiry-564' for key 'type_entity_id'

[GIN] 2018/07/18 - 17:02:28 | 500 |    1.659839ms | 2a01:7e01:0:0:f03c:91ff:fe3e:826a | POST     /api/private/message/enquiry
Error #01: Error 1062: Duplicate entry 'enquiry-564' for key 'type_entity_id'

this is the received json data :

{
  [
    {
      "body": {
        "text": ""
      },
      "enquiryID": 564,
      "meta": {
        "message": {
          "enquiry_offer": {
            "delivery_time": 1,
            "revision_count": 3,
            "_service_title": "c c sharp cpp java vb work",
            "price": 1100,
            "expired_on": "2018-07-21T17:02:29Z",
            "id": 82,
            "_service_id": "lBdHu0"
          }
        }
      },
      "userID": 1,
      "type": "enquiry_offer"
    }
  ]
}

this is the complete function code :

func (p *PrivateRouter) postMessageEnquiry(c *gin.Context) {
    logRequestBody(c)
    type Message struct {
        EnquiryId int64   `json:"enquiryID" binding:"required"`
        UserID    int64   `json:"userID"`
        Type      string  `json:"type" binding:"required"`
        Users     []int64 `json:"users" binding:"required"`
        Body      struct {
                            Text string `json:"text" binding:"required"`
                        } `json:"body" binding:"required"`
        Meta struct {
            Room    interface{} `json:"room"`
            Message interface{} `json:"message"`
        } `json:"meta"`
    }

    type MessagesRequest []*Message

    // this function need for debug
    fmt.Printf("%s", c.Request.Body)

    /// read either one entity or array of entities from JSON request
    isArr, err := requestIsJsonArray(c)
    if err != nil {
        responseInternalError(c, err)
        return
    }

    var messages MessagesRequest
    if isArr {
        err = c.Bind(&messages)
        if err != nil {
            return
        }
    } else {
        messages = make(MessagesRequest, 0)
        var message Message
        err = c.Bind(&message)
        if err != nil {
            return
        }
        messages = append(messages, &message)
    }
    ///

    for _, message := range messages {
        room, err := p.roomRepo.FindOneWithUsers(model.RoomTypeEnquiry, message.EnquiryId, message.Users)
        if err != nil {
            responseInternalError(c, err)
            return
        }

        if room == nil {
            roomMetaJson, err := json.Marshal(message.Meta.Room)
            if err != nil {
                responseInternalError(c, err)
                return
            }

            room, err = p.roomRepo.AddEnquiryRoom(message.EnquiryId, roomMetaJson, message.Users)
            if err != nil {
                responseInternalError(c, err)
                return
            }
        }

        roomStringId := model.GenerateRoomStringId(model.RoomTypeEnquiry, message.EnquiryId)
        if message.Type == "" {
            message.Type = "message"
        }
        err = p.createMessage(room.Id, roomStringId, message.Type, message.Meta.Message, message.Body.Text, message.UserID)
        if err != nil {
            responseInternalError(c, err)
            return
        }
    }

    sendOkResponse(c)
}

can anyone tell me where I'm wrong?

sql function for store in database

func (rep *MessagesRepository) Add(roomId int64, messageType string, metaJson []byte, message string, senderId int64) (*Message, error) {

        var err error
        var res sql.Result

        cols := []string{"room_id", "type", "message"}
        args := []interface{}{roomId, messageType, message}

        if string(metaJson) != "null" {
            cols = append(cols, "meta_json")
            args = append(args, metaJson)
        }
        if senderId > 0 {
            cols = append(cols, "user_id")
            args = append(args, senderId)
        }

        q := `INSERT INTO messages (` + strings.Join(cols, ", ") + `) VALUES (?` + strings.Repeat(", ?", len(cols)-1) + `)`
        res, err = rep.db.Exec(q, args...)
        if err == nil {
            messageId, err := res.LastInsertId()
            if err == nil {
                return rep.FindByPk(messageId)
            }
        }
        return nil, err
    }
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 基于卷积神经网络的声纹识别
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图
    • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
    • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
    • ¥15 CSAPPattacklab
    • ¥15 一直显示正在等待HID—ISP
    • ¥15 Python turtle 画图
    • ¥15 stm32开发clion时遇到的编译问题