parent
65bb218260
commit
61d500946e
@ -0,0 +1,86 @@
|
||||
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)
|
||||
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`
|
||||
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
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package goff
|
||||
|
||||
type Role struct {
|
||||
ID string
|
||||
IsModerator bool
|
||||
IsAdmin bool
|
||||
SelfAssignable bool
|
||||
AutoRole bool
|
||||
Guild string
|
||||
}
|
||||
|
||||
type RoleService interface {
|
||||
Role(id string) (*Role, error)
|
||||
AddRole(r *Role) (*Role, error)
|
||||
DeleteRole(r *Role) error
|
||||
MakeSelfAssignable(r *Role) error
|
||||
RemoveSelfAssignable(r *Role) error
|
||||
MakeAutoRole(r *Role) error
|
||||
RemoveAutoRole(r *Role) error
|
||||
GetAutoRoles(gID string) ([]*Role, error)
|
||||
}
|
||||
Loading…
Reference in new issue