Init project with vote module
This commit is contained in:
commit
98f3c2aedc
11 changed files with 671 additions and 0 deletions
52
models/plans.go
Normal file
52
models/plans.go
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
. "planner/errors"
|
||||
)
|
||||
|
||||
func GetPlan(orm *gorm.DB, user User, id uint) (*Plan, error) {
|
||||
var plan Plan = Plan{
|
||||
ID: id,
|
||||
}
|
||||
result := orm.Take(&plan)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return nil, ErrNotFound
|
||||
} else if result.Error != nil {
|
||||
return nil, result.Error
|
||||
}
|
||||
|
||||
if plan.Owner == user.Username {
|
||||
return &plan, nil
|
||||
}
|
||||
|
||||
isMember, err := plan.IsMember(orm, &user)
|
||||
|
||||
if !isMember || err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &plan, nil
|
||||
}
|
||||
|
||||
func (p *Plan) GetAllUsers(orm *gorm.DB) ([]User, error) {
|
||||
var users []User
|
||||
err := orm.Model(p).Association("Members").Find(&users)
|
||||
return users, err
|
||||
}
|
||||
|
||||
func (p *Plan) IsMember(orm *gorm.DB, u *User) (bool, error) {
|
||||
var user User
|
||||
result := orm.
|
||||
Table("users u").
|
||||
Select("u.*").
|
||||
Joins("JOIN user_plans up on u.username=up.user_username AND up.plan_id = ?", p.ID).
|
||||
Where("u.username = ?", u.Username).
|
||||
Take(&user).Error
|
||||
if errors.Is(result, gorm.ErrRecordNotFound) {
|
||||
return false, ErrNotMember
|
||||
}
|
||||
return result == nil, result
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue