You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
package postgres
|
|
|
|
import (
|
|
"database/sql"
|
|
"log"
|
|
|
|
"github.com/dustinpianalto/goff"
|
|
)
|
|
|
|
type RoleService struct {
|
|
DB *sql.DB
|
|
}
|
|
|
|
func (s *RoleService) Role(id string) (*goff.Role, error) {
|
|
var r goff.Role
|
|
queryString := `SELECT id, moderator, admin, self_assignable, guild_id FROM roles WHERE id = $1`
|
|
row := s.DB.QueryRow(queryString, id)
|
|
if err := row.Scan(&r.ID, &r.IsModerator, &r.IsAdmin, &r.SelfAssignable, &r.Guild); err != nil {
|
|
return nil, err
|
|
}
|
|
return &r, nil
|
|
}
|
|
|
|
func (s *RoleService) AddRole(r *goff.Role) (*goff.Role, error) {
|
|
queryString := `INSERT INTO roles (id, moderator, admin, self_assignable, auto_role, guild_id)
|
|
VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT DO NOTHING`
|
|
_, err := s.DB.Exec(queryString, r.ID, r.IsModerator, r.IsAdmin, r.SelfAssignable, r.AutoRole, r.Guild)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return r, nil
|
|
}
|
|
|
|
func (s *RoleService) DeleteRole(r *goff.Role) error {
|
|
queryString := `DELETE FROM roles WHERE id = $1`
|
|
_, err := s.DB.Exec(queryString, r.ID)
|
|
return err
|
|
}
|
|
|
|
func (s *RoleService) MakeSelfAssignable(r *goff.Role) error {
|
|
queryString := `UPDATE roles SET self_assignable = true WHERE id = $1`
|
|
_, err := s.DB.Exec(queryString, r.ID)
|
|
return err
|
|
}
|
|
|
|
func (s *RoleService) RemoveSelfAssignable(r *goff.Role) error {
|
|
queryString := `UPDATE roles SET self_assignable = false WHERE id = $1`
|
|
_, err := s.DB.Exec(queryString, r.ID)
|
|
return err
|
|
}
|
|
|
|
func (s *RoleService) MakeAutoRole(r *goff.Role) error {
|
|
queryString := `UPDATE roles SET auto_role = true WHERE id = $1`
|
|
_, err := s.DB.Exec(queryString, r.ID)
|
|
return err
|
|
}
|
|
|
|
func (s *RoleService) RemoveAutoRole(r *goff.Role) error {
|
|
queryString := `UPDATE roles SET auto_role = false WHERE id = $1`
|
|
_, err := s.DB.Exec(queryString, r.ID)
|
|
return err
|
|
}
|
|
|
|
func (s *RoleService) GetAutoRoles(gID string) ([]*goff.Role, error) {
|
|
var roles []*goff.Role
|
|
queryString := `SELECT id FROM roles WHERE guild_id = $1 AND auto_role = true`
|
|
rows, err := s.DB.Query(queryString, gID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for rows.Next() {
|
|
var id string
|
|
err := rows.Scan(&id)
|
|
if err != nil {
|
|
log.Println(err)
|
|
continue
|
|
}
|
|
role, err := s.Role(id)
|
|
if err != nil {
|
|
log.Println(err)
|
|
continue
|
|
}
|
|
roles = append(roles, role)
|
|
}
|
|
return roles, nil
|
|
}
|