У меня есть следующие отношения:
package models
import (
"github.com/jinzhu/gorm"
)
type User struct {
gorm.Model
Site Site
}
type Site struct {
gorm.Model
UserID string
Pageviews []Pageview
}
type Pageview struct {
gorm.Model
Site Site
SiteID string
Hostname string `gorm:"not null"`
Pathname string `gorm:"not null"`
IsNewVisitor bool `gorm:"not null"`
IsNewSession bool `gorm:"not null"`
IsUnique bool `gorm:"not null"`
IsBounce bool `gorm:"not null"`
IsFinished bool `gorm:"not null"`
Referrer string `gorm:"not null"`
Duration int64 `gorm:"not null"`
}
И, как правило, в таких средах, как Rails, выполняемые вами запросы ограничены пользовательским контекстом. Например:
GET / pageviews -> вернуть все просмотры страницы от текущего пользователя.
То же самое относится к Fathom, например:
func (api *API) GetSiteStatsPageviewsHandler(w http.ResponseWriter, r *http.Request) error {
params := GetRequestParams(r)
result, err := api.database.GetTotalSiteViews(params.SiteID, params.StartDate, params.EndDate)
if err != nil {
return err
}
return respond(w, http.StatusOK, envelope{Data: result})
}
Код в здесь .
Теперь: как я могу сделать то же самое в лямбде? В настоящее время я должен объявить связь между утверждением, что просмотр страницы принадлежит пользователю (или у пользователя есть много просмотров страниц), и затем:
func (p *Pageview) FindAll(userId string, siteID string) ([]byte, error) {
p.UserID = userID
p.SiteID = siteID
db.Find(p)
return json.Marshal(p)
}
когда я хочу:
func (p *Pageview) FindAll(siteID string) ([]byte, error) {
p.SiteID = siteID
db.Find(p)
return json.Marshal(p)
}
Есть ли другой способ, которым я могу это сделать, не объявляя об отношениях?
Я никогда не спрашивал себя, как можно сделать ограничение запроса текущим пользователем, не объявляя его в самом запросе. Может быть, если я понимаю, я могу подражать тому же поведению.