我有以下关系:
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})
}
here中的代码。
现在:如何在Lambda中执行相同的操作?当前,我必须声明一种说法,即说一个页面浏览量属于一个用户(或者一个用户具有很多页面浏览量),然后:
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)
}
在没有声明关系的情况下,还有其他方法可以实现吗?
我从来没有问过自己,怎么可能限制当前用户执行查询限制,而不必在查询本身中声明它。也许如果我明白我可以模仿相同的行为。