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.
139 lines
3.6 KiB
139 lines
3.6 KiB
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"log"
|
|
|
|
"github.com/dustinpianalto/geeksbot"
|
|
)
|
|
|
|
type serverService struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func (s serverService) ServerByID(id int) (geeksbot.Server, error) {
|
|
var server geeksbot.Server
|
|
var guildID string
|
|
var aChanID string
|
|
var iChanID string
|
|
var iMsgID string
|
|
var sMsgID string
|
|
queryString := `SELECT id, name, ip_address, port, password, alerts_channel_id,
|
|
guild_id, info_channel_id, info_message_id, settings_message_id
|
|
FROM servers WHERE id = $1`
|
|
row := s.db.QueryRow(queryString, id)
|
|
err := row.Scan(&server.ID, &server.Name, &server.IPAddr, &server.Port, &server.Password,
|
|
&aChanID, &guildID, &iChanID, &iMsgID, &sMsgID)
|
|
if err != nil {
|
|
return geeksbot.Server{}, err
|
|
}
|
|
guild, err := GuildService.Guild(guildID)
|
|
if err != nil {
|
|
return geeksbot.Server{}, err
|
|
}
|
|
alertChannel, err := ChannelService.Channel(aChanID)
|
|
if err != nil {
|
|
return geeksbot.Server{}, err
|
|
}
|
|
infoChannel, err := ChannelService.Channel(iChanID)
|
|
if err != nil {
|
|
return geeksbot.Server{}, err
|
|
}
|
|
infoMessage, err := MessageService.Message(iMsgID)
|
|
if err != nil {
|
|
return geeksbot.Server{}, err
|
|
}
|
|
settingsMessage, err := MessageService.Message(sMsgID)
|
|
if err != nil {
|
|
return geeksbot.Server{}, err
|
|
}
|
|
server.Guild = guild
|
|
server.AlertsChannel = alertChannel
|
|
server.InfoChannel = infoChannel
|
|
server.InfoMessage = infoMessage
|
|
server.SettingsMessage = settingsMessage
|
|
return server, nil
|
|
}
|
|
|
|
func (s serverService) ServerByName(name string, guild geeksbot.Guild) (geeksbot.Server, error) {
|
|
var id int
|
|
queryString := "SELECT id FROM servers WHERE name = $1 AND guild_id = $2"
|
|
row := s.db.QueryRow(queryString, name, guild.ID)
|
|
err := row.Scan(&id)
|
|
if err != nil {
|
|
return geeksbot.Server{}, err
|
|
}
|
|
server, err := s.ServerByID(id)
|
|
return server, err
|
|
}
|
|
|
|
func (s serverService) CreateServer(server geeksbot.Server) (geeksbot.Server, error) {
|
|
var id int
|
|
queryString := `INSERT INTO servers (name, ip_address, port, password, alerts_channel_id,
|
|
guild_id, info_channel_id, info_message_id, settings_message_id)
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id`
|
|
err := s.db.QueryRow(queryString,
|
|
server.Name,
|
|
server.IPAddr,
|
|
server.Port,
|
|
server.Password,
|
|
server.AlertsChannel,
|
|
server.Guild,
|
|
server.InfoChannel,
|
|
server.InfoMessage,
|
|
server.SettingsMessage,
|
|
).Scan(&id)
|
|
if err != nil {
|
|
return geeksbot.Server{}, err
|
|
}
|
|
server.ID = id
|
|
return server, nil
|
|
}
|
|
|
|
func (s serverService) DeleteServer(server geeksbot.Server) error {
|
|
queryString := `DELETE FROM servers WHERE id = $1`
|
|
_, err := s.db.Exec(queryString, server.ID)
|
|
return err
|
|
}
|
|
|
|
func (s serverService) UpdateServer(server geeksbot.Server) (geeksbot.Server, error) {
|
|
queryString := `UPDATE servers SET name = $2, ip_address = $3, port = $4, password = $5,
|
|
alerts_channel_id = $6, info_channel_id = $7, info_message_id = $8,
|
|
settings_message_id = $9 WHERE id = $1`
|
|
_, err := s.db.Exec(queryString,
|
|
server.Name,
|
|
server.IPAddr,
|
|
server.Port,
|
|
server.Password,
|
|
server.AlertsChannel.ID,
|
|
server.InfoChannel.ID,
|
|
server.InfoMessage.ID,
|
|
server.SettingsMessage.ID,
|
|
)
|
|
return server, err
|
|
}
|
|
|
|
func (s serverService) GuildServers(g geeksbot.Guild) ([]geeksbot.Server, error) {
|
|
var servers []geeksbot.Server
|
|
queryString := `SELECT id FROM servers WHERE guild_id = $1`
|
|
rows, err := s.db.Query(queryString, g.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for rows.Next() {
|
|
var id int
|
|
err = rows.Scan(&id)
|
|
if err != nil {
|
|
log.Println(err)
|
|
continue
|
|
}
|
|
server, err := s.ServerByID(id)
|
|
if err != nil {
|
|
log.Println(err)
|
|
continue
|
|
}
|
|
servers = append(servers, server)
|
|
}
|
|
return servers, nil
|
|
}
|