// RetrieveLocation retrieves a location. func RetrieveLocation(c *gin.Context) (model.Location, bool, int64, int, error) { var location model.Location var currentUserId int64 isAuthor := false id := c.Params.ByName("id") if db.ORM.First(&location, "id = ?", id).RecordNotFound() { return location, isAuthor, currentUserId, http.StatusNotFound, errors.New("Location is not found.") } currentUser, err := userService.CurrentUser(c) if err == nil { currentUserId = currentUser.Id isAuthor = currentUser.Id == location.UserId } assignRelatedUser(&location) var commentList model.CommentList comments, currentPage, hasPrev, hasNext, _ := commentService.RetrieveComments(location) commentList.Comments = comments commentService.SetCommentPageMeta(&commentList, currentPage, hasPrev, hasNext, location.CommentCount) location.CommentList = commentList var likingList model.LikingList likings, currentPage, hasPrev, hasNext, _ := likingRetriever.RetrieveLikings(location) likingList.Likings = likings currentUserlikedCount := db.ORM.Model(&location).Where("id =?", currentUserId).Association("Likings").Count() log.Debugf("Current user like count : %d", currentUserlikedCount) likingMeta.SetLikingPageMeta(&likingList, currentPage, hasPrev, hasNext, location.LikingCount, currentUserlikedCount) location.LikingList = likingList return location, isAuthor, currentUserId, http.StatusOK, nil }
// UpdateLocationCommentCount updates location's comment count. func UpdateLocationCommentCount(location *model.Location) (int, error) { location.CommentCount = db.ORM.Model(location).Association("Comments").Count() if db.ORM.Save(location).Error != nil { return http.StatusInternalServerError, errors.New("Location comment's count is not updated.") } return http.StatusOK, nil }
// assignRelatedUser assign related user to the location. func assignRelatedUser(location *model.Location) { var tempUser model.User if db.ORM.Model(&location).Select(config.UserPublicFields).Related(&tempUser).RecordNotFound() { log.Warn("user is not found.") } location.Author = model.PublicUser{User: &tempUser} }
// UpdateLocation updates a location. func UpdateLocation(c *gin.Context) (model.Location, int, error) { var location model.Location var form LocationForm id := c.Params.ByName("id") c.BindWith(&form, binding.Form) if db.ORM.First(&location, id).RecordNotFound() { return location, http.StatusNotFound, errors.New("Location is not found.") } status, err := userPermission.CurrentUserIdentical(c, location.UserId) if err != nil { return location, status, err } location.Name = form.Name location.Address = form.Address location.Latitude = form.Latitude location.Longitude = form.Longitude location.Url = form.Url location.Content = form.Content if db.ORM.Save(&location).Error != nil { return location, http.StatusBadRequest, errors.New("Location is not updated.") } return location, http.StatusOK, nil }