Init project with vote module

This commit is contained in:
Manuel Forcén Muñoz 2024-11-09 19:35:44 +01:00
commit 98f3c2aedc
11 changed files with 671 additions and 0 deletions

52
models/plans.go Normal file
View 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
}