// ReadMany handles GET for the collection func (ctl *TrendingController) ReadMany(c *models.Context) { limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } trending, total, pages, status, err := models.GetTrending(c.Site.ID, c.Auth.ProfileID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } response := models.TrendingItems{} response.Items = h.ConstructArray( trending, "items", total, limit, offset, pages, c.Request.URL, ) thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) response.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } c.RespondWithData(response) }
// ReadMany handles GET func (ctl *EventsController) ReadMany(c *models.Context) { // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, h.ItemTypes[h.ItemTypeEvent], 0), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation // Fetch query string args if any exist query := c.Request.URL.Query() limit, offset, status, err := h.GetLimitAndOffset(query) if err != nil { c.RespondWithErrorDetail(err, status) return } attending, status, err := h.GetAttending(query) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetEvents(c.Site.ID, c.Auth.ProfileID, attending, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.EventsType{} m.Events = h.ConstructArray( ems, h.APITypeEvent, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } m.Meta.Permissions = perms c.RespondWithData(m) }
// ReadMany handles GET for the collection func (ctl *AttachmentsController) ReadMany(c *models.Context) { itemTypeID, itemID, perms, status, err := ParseItemInfo(c) if err != nil { c.RespondWithErrorDetail(err, status) return } if !perms.CanRead { c.RespondWithErrorMessage( h.NoAuthMessage, http.StatusForbidden, ) return } query := c.Request.URL.Query() limit, offset, status, err := h.GetLimitAndOffset(query) if err != nil { c.RespondWithErrorDetail(err, status) return } attachments, total, pages, status, err := models.GetAttachments(itemTypeID, itemID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.AttachmentsType{} m.Attachments = h.ConstructArray( attachments, h.APITypeAttachment, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } m.Meta.Permissions = perms c.RespondWithData(m) }
// ReadMany handles GET for a collection func (ctl *SitesController) ReadMany(c *models.Context) { limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } var userID int64 // Passing ?filter=owned returns sites owned by logged-in user. if c.Request.FormValue("filter") == "owned" { if c.Auth.UserID == 0 { c.RespondWithErrorMessage( fmt.Sprintf("You must be logged in to list your own sites"), http.StatusForbidden, ) return } userID = c.Auth.UserID } // Passing 0 as userID means return all sites. ems, total, pages, status, err := models.GetSites(userID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.SitesType{} m.Sites = h.ConstructArray( ems, h.APITypeSite, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } c.RespondWithData(m) }
// ReadMany handles GET for the collection func (ctl *WatchersController) ReadMany(c *models.Context) { if c.Auth.ProfileID < 1 { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } query := c.Request.URL.Query() limit, offset, status, err := h.GetLimitAndOffset(query) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetProfileWatchers( c.Auth.ProfileID, c.Site.ID, limit, offset, ) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.WatchersType{} m.Watchers = h.ConstructArray( ems, h.APITypeWatcher, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } c.RespondWithData(m) }
// ReadMany handles GET func (ctl *IgnoredController) ReadMany(c *models.Context) { if c.Auth.ProfileID < 1 { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetIgnored( c.Site.ID, c.Auth.ProfileID, limit, offset, ) if err != nil { c.RespondWithErrorDetail(err, status) return } thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.IgnoredType{} m.Ignored = h.ConstructArray( ems, `/api/v1/ignored`, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{ Rel: "self", Href: thisLink.String(), }, } c.RespondWithData(m) }
// ReadMany handles GET func (ctl *MicrocosmsController) ReadMany(c *models.Context) { perms := models.GetPermission( models.MakeAuthorisationContext(c, 0, h.ItemTypes[h.ItemTypeSite], c.Site.ID), ) // Fetch query string args if any exist limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } // Fetch list of microcosms ems, total, pages, status, err := models.GetMicrocosms(c.Site.ID, c.Auth.ProfileID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.MicrocosmsType{} m.Microcosms = h.ConstructArray( ems, h.APITypeMicrocosm, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } m.Meta.Permissions = perms c.RespondWithData(m) }
// ReadMany handles GET for the collection func (ctl *HuddlesController) ReadMany(c *models.Context) { // NOTE: Auth check skipped, permissions are enforced by limiting the scope // of the underlying queries in the model to only show huddles you are a // participant in // Fetch query string args if any exist limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetHuddles(c.Site.ID, c.Auth.ProfileID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.HuddlesType{} m.Huddles = h.ConstructArray( ems, h.APITypeHuddle, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } c.RespondWithData(m) }
// ReadMany handles GET for the collection func (ctl *AttendeesController) ReadMany(c *models.Context) { eventID, err := strconv.ParseInt(c.RouteVars["event_id"], 10, 64) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("The supplied event_id ('%s') is not a number.", c.RouteVars["event_id"]), http.StatusBadRequest, ) return } // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, h.ItemTypes[h.ItemTypeEvent], eventID), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation // Fetch query string args if any exist query := c.Request.URL.Query() limit, offset, status, err := h.GetLimitAndOffset(query) if err != nil { c.RespondWithErrorDetail(err, status) return } attending, status, err := h.AttendanceStatus(query) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetAttendees(c.Site.ID, eventID, limit, offset, attending == "attending") if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.AttendeesType{} m.Attendees = h.ConstructArray( ems, fmt.Sprintf(h.APITypeAttendee, 0), total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } m.Meta.Permissions = perms c.RespondWithData(m) }