package core import ( "errors" "gorm.io/gorm" ) func (u *User) ListPlans(orm *gorm.DB) ([]Plan, error) { var plans []Plan err := orm.Debug().Table("plans p"). Select("p.*"). Joins("JOIN members m ON m.plan_id=p.id"). Where("m.user_id=?", u.Username). Find(&plans) return plans, err.Error } func (u *User) GetPlan(db *gorm.DB, plan_id uint) (Plan, error) { var plan Plan = Plan{ ID: plan_id, } result := db.Take(&plan) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return plan, ErrNotFound } else if result.Error != nil { return plan, result.Error } if plan.Owner == u.Username { return plan, nil } isMember, err := plan.IsMember(db, u) if !isMember || err != nil { return plan, err } return plan, nil } func GetUser(orm *gorm.DB, username string) (User, error) { user := User{Username: username} if err := orm.Take(&user).Error; err != nil { return user, err } return user, nil }