package arn import "errors" // PushSubscriptions is a list of push subscriptions made by a user. type PushSubscriptions struct { UserID UserID `json:"userId" primary:"true"` Items []*PushSubscription `json:"items"` } // Add adds a subscription to the list if it hasn't been added yet. func (list *PushSubscriptions) Add(subscription *PushSubscription) error { if list.Contains(subscription.ID()) { return errors.New("PushSubscription " + subscription.ID() + " has already been added") } subscription.Created = DateTimeUTC() list.Items = append(list.Items, subscription) return nil } // Remove removes the subscription ID from the list. func (list *PushSubscriptions) Remove(subscriptionID string) bool { for index, item := range list.Items { if item.ID() == subscriptionID { list.Items = append(list.Items[:index], list.Items[index+1:]...) return true } } return false } // Contains checks if the list contains the subscription ID already. func (list *PushSubscriptions) Contains(subscriptionID string) bool { for _, item := range list.Items { if item.ID() == subscriptionID { return true } } return false } // Find returns the subscription with the specified ID, if available. func (list *PushSubscriptions) Find(id string) *PushSubscription { for _, item := range list.Items { if item.ID() == id { return item } } return nil } // GetID returns the ID. func (list *PushSubscriptions) GetID() string { return list.UserID } // GetPushSubscriptions ... func GetPushSubscriptions(id string) (*PushSubscriptions, error) { obj, err := DB.Get("PushSubscriptions", id) if err != nil { return nil, err } return obj.(*PushSubscriptions), nil }