// Contacts retrieves contacts presences since n seconds func (*UsersController) Contacts(ctx *gin.Context) { sinceSeconds, err := GetParam(ctx, "sinceSeconds") if err != nil { ctx.JSON(http.StatusBadRequest, gin.H{"error": "Error while getting seconds parameter"}) return } seconds, err := strconv.ParseInt(sinceSeconds, 10, 64) if err != nil { ctx.JSON(http.StatusBadRequest, gin.H{"error": "Invalid since parameter : must be an interger"}) return } var user = tat.User{} found, err := userDB.FindByUsername(&user, getCtxUsername(ctx)) if !found { ctx.JSON(http.StatusInternalServerError, errors.New("User unknown")) return } else if err != nil { ctx.JSON(http.StatusInternalServerError, errors.New("Error while fetching user")) return } criteria := tat.PresenceCriteria{} for _, contact := range user.Contacts { criteria.Username = criteria.Username + "," + contact.Username } criteria.DateMinPresence = strconv.FormatInt(time.Now().Unix()-seconds, 10) count, presences, _ := presenceDB.ListPresences(&criteria) out := &tat.ContactsJSON{ Contacts: user.Contacts, CountContactsPresences: count, ContactsPresences: &presences, } ctx.JSON(http.StatusOK, out) }
func (*PresencesController) buildCriteria(ctx *gin.Context) *tat.PresenceCriteria { c := tat.PresenceCriteria{} skip, e := strconv.Atoi(ctx.DefaultQuery("skip", "0")) if e != nil { skip = 0 } c.Skip = skip limit, e2 := strconv.Atoi(ctx.DefaultQuery("limit", "10")) if e2 != nil { limit = 10 } c.Limit = limit c.IDPresence = ctx.Query("idPresence") c.Status = ctx.Query("status") c.Username = ctx.Query("username") c.DateMinPresence = ctx.Query("dateMinPresence") c.DateMaxPresence = ctx.Query("dateMaxPresence") if c.SortBy == "" { c.SortBy = "-datePresence" } return &c }