使用GORM时如何由当前上下文用户获取数据

时间:2018-11-06 13:42:56

标签: api go relationship go-gorm

我有以下关系:

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)
}

在没有声明关系的情况下,还有其他方法可以实现吗?

我从来没有问过自己,怎么可能限制当前用户执行查询限制,而不必在查询本身中声明它。也许如果我明白我可以模仿相同的行为。

0 个答案:

没有答案