// model // Ladder struct used to store ladder type Ladder struct { Model Name string `json:"name" bson:"name"` Profiles Profiles `json:"profiles" bson:"profiles"` Kind string `json:"kind" bson:"kind"` UserID string `json:"userId" bson:"userId"` LivepeerID string `json:"livepeerID" bson:"livepeerID"` } // AddLadder method to create a new ladder on db func AddLadder(name, kind, userID, livepeerID string, profiles Profiles) (Ladder, error) { t := time.Now() ladder := Ladder{ Name: name, Kind: kind, UserID: userID, LivepeerID: livepeerID, Profiles: profiles, } ladder.CreatedAt = fmt.Sprintf("%s", t.Format("2006-01-02 15:04:05")) ladder.UpdatedAt = fmt.Sprintf("%s", t.Format("2006-01-02 15:04:05")) ladder.Deleted = false ladder.Available = true if err := db.Collection("Ladder").Save(&ladder); err != nil { if vErr, ok := err.(*bongo.ValidationError); ok { fmt.Println("Validation errors are:", vErr.Errors) } else { fmt.Println("Got a real error:", err.Error()) } return ladder, err } return ladder, nil } // servicce // LadderService struct used to ladder service type LadderService struct { ID string Name string Kind string UserID string LivepeerID string Profiles models.Profiles PageNum int PageSize int UpdatedAt string CreateddAt string } // Add func used to add new ladder func (u *LadderService) Add() (map[string]interface{}, error) { ladder, err := models.AddLadder(u.Name, u.Kind, u.UserID, u.LivepeerID, u.Profiles) return ladder.ToJSON(), err } // router // AddLadderForm form used to bind ladder informations type AddLadderForm struct { Name string `form:"name"` Kind string `form:"kind"` UserID string `form:"userID"` LivepeerID string `form:"livepeerID"` Profiles models.Profiles `form:"profiles"` } // AddLadder godoc // @Produce json // @Param email body string true "Email" // @Param password body string true "Password" // @Success 200 {object} app.Response // @Failure 500 {object} app.Response // @Router /v1/ladders [post] func AddLadder(c *gin.Context) { var ( appG = app.Gin{C: c} form AddLadderForm err error data = map[string]interface{}{} ) _, errCode := app.BindAndValid(c, &form) if errCode != e.SUCCESS { app.ErrorResponse(c, e.InvalidParams) } ladderService := laddersService.LadderService{ Name: form.Name, Kind: form.Kind, UserID: form.UserID, LivepeerID: form.LivepeerID, Profiles: form.Profiles, } ladder, err := ladderService.Add() if err != nil { app.ErrorResponse(c, e.ErrorQueryToDB) } data["ladder"] = ladder appG.Response(http.StatusCreated, e.LadderCreated, 0, "", "", data) return } apiv1.POST("/ladders", v1.AddLadder)