From 462804ed07dab4f536631ab1eccbe8662a954ced Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 2 Jul 2019 09:02:31 +0000 Subject: [PATCH] change database scheema --- main.go | 26 +++----- models/commands/commands.go | 49 -------------- models/discord/discord.go | 24 +++---- models/public/command.go | 128 ++++++++++++++++++++++++++++++++++++ pkg/svc/discord/events.go | 1 + 5 files changed, 150 insertions(+), 78 deletions(-) delete mode 100644 models/commands/commands.go create mode 100644 models/public/command.go diff --git a/main.go b/main.go index ac5bbff..7b675b6 100644 --- a/main.go +++ b/main.go @@ -2,14 +2,11 @@ package main import ( "dorisbot/models" - discordmodel "dorisbot/models/discord" "dorisbot/pkg/config" "dorisbot/pkg/options" "dorisbot/pkg/svc/discord" "fmt" "log" - - "git.trj.tw/golang/utils" ) func init() { @@ -34,6 +31,15 @@ func main() { conf := config.GetConfig() + _, err = models.NewDB(conf.Database) + if err != nil { + log.Fatal(err) + } + err = models.Ping() + if err != nil { + log.Fatal(err) + } + client, err := discord.NewClient(conf.Discord.BotToken) if err != nil { log.Fatal(err) @@ -45,19 +51,5 @@ func main() { } defer client.Close() - _, err = models.NewDB(conf.Database) - if err != nil { - log.Fatal(err) - } - - list, err := discordmodel.GetDiscordServerList() - if err != nil { - log.Fatal(err) - } - log.Println("server list ::: ", list) - for _, it := range list { - log.Println(utils.ToMap(it)) - } - <-cc } diff --git a/models/commands/commands.go b/models/commands/commands.go deleted file mode 100644 index fbf6eef..0000000 --- a/models/commands/commands.go +++ /dev/null @@ -1,49 +0,0 @@ -package commands - -import ( - "dorisbot/models" - "errors" - "time" -) - -// CommandsModel - -type CommandsModel struct { - CMD string `db:"cmd"` - Server string `db:"server"` - RequireManage bool `db:"require_manage"` - RequireInit bool `db:"require_init"` - Value string `db:"value"` - Ctime time.Time `db:"ctime"` - Mtime time.Time `db:"mtime"` -} - -// NewCommand - -func NewCommand(cmd, server, value string, requireManage, requireInit bool) (c *CommandsModel, err error) { - if len(cmd) == 0 || len(server) == 0 || len(value) == 0 { - return nil, errors.New("cmd, server or value is empty") - } - - c = &CommandsModel{ - CMD: cmd, - Server: server, - Value: value, - RequireInit: requireInit, - RequireManage: requireManage, - } - - return -} - -// Write - -func (p *CommandsModel) Write() (err error) { - db := models.GetConn() - query := `insert into "commands" ("cmd", "server", "value", "require_init", "require_manage") values - (:cmd, :server, :value, :require_init, :require_manage) returning *` - row, err := db.NamedQuery(query, p) - if err != nil { - return err - } - err = row.StructScan(p) - - return -} diff --git a/models/discord/discord.go b/models/discord/discord.go index 5570517..4217a5b 100644 --- a/models/discord/discord.go +++ b/models/discord/discord.go @@ -2,7 +2,7 @@ package discord import ( "dorisbot/models" - cmdmodel "dorisbot/models/commands" + pubmodel "dorisbot/models/public" "errors" "time" ) @@ -52,7 +52,7 @@ func NewDiscordServer(id, name string, permission int) (ds *DiscordServerModel, // GetDiscordServerList - func GetDiscordServerList() (list []*DiscordServerModel, err error) { db := models.GetConn() - query := `select "id", "name", "permission", "owner", "ctime", "mtime" from discord_server` + query := `select "id", "name", "permission", "owner", "ctime", "mtime" from discord.server` err = db.Select(&list, query) if err != nil { return nil, err @@ -67,7 +67,7 @@ func GetDiscordServerByID(id string) (ds *DiscordServerModel, err error) { } db := models.GetConn() ds = &DiscordServerModel{} - query := `select "id", "name", "permission", "owner", "ctime", "mtime" from discord_server where "id" = $1` + query := `select "id", "name", "permission", "owner", "ctime", "mtime" from discord.server where "id" = $1` err = db.Get(ds, query, id) return } @@ -75,7 +75,7 @@ func GetDiscordServerByID(id string) (ds *DiscordServerModel, err error) { // Write DiscordServer data to database func (p *DiscordServerModel) Write() error { db := models.GetConn() - query := `insert into discord_server ("id", "name", "permission", "owner") values (:id, :name, :permission, :owner) returning *` + query := `insert into discord.server ("id", "name", "permission", "owner") values (:id, :name, :permission, :owner) returning *` row, err := db.NamedQuery(query, p) if err != nil { return err @@ -93,7 +93,7 @@ func (p *DiscordServerModel) ChangeName(name string) (err error) { return errors.New("name is empty") } db := models.GetConn() - query := `update discord_server set "name" = $1, "mtime" = now() where "id" = $2` + query := `update discord.server set "name" = $1, "mtime" = now() where "id" = $2` _, err = db.Exec(query, name, p.ID) if err != nil { return err @@ -105,7 +105,7 @@ func (p *DiscordServerModel) ChangeName(name string) (err error) { // GetChannelList - func (p *DiscordServerModel) GetChannelList() (list []*DiscordChannelModel, err error) { db := models.GetConn() - query := `select "id", "server", "enable_cmd", "enable_notify", "ctime", "mtime" from discord_channel where "server" = $1` + query := `select "id", "server", "enable_cmd", "enable_notify", "ctime", "mtime" from discord.channel where "server" = $1` err = db.Select(&list, query, p.ID) if err != nil { return nil, err @@ -120,15 +120,15 @@ func (p *DiscordServerModel) GetChannel(id string) (ch *DiscordChannelModel, err } db := models.GetConn() ch = &DiscordChannelModel{} - query := `select "id", "server", "enable_cmd", "enable_notify", "ctime", "mtime" from discord_channel where "id" = $1 and "server" = $2` + query := `select "id", "server", "enable_cmd", "enable_notify", "ctime", "mtime" from discord.channel where "id" = $1 and "server" = $2` err = db.Get(ch, query, id, p.ID) return } // GetCommandList - -func (p *DiscordServerModel) GetCommandList() (cmds []*cmdmodel.CommandsModel, err error) { +func (p *DiscordServerModel) GetCommandList() (cmds []*pubmodel.CommandModel, err error) { db := models.GetConn() - query := `select "cmd", "server", "value", "require_init", "require_manage", "ctime", "mtime" from "commands" where "server" = $1` + query := `select "cmd", "server", "value", "require_init", "require_manage", "ctime", "mtime" from public."command" where "server" = $1` err = db.Select(&cmds, query, p.ID) if err != nil { return nil, err @@ -139,7 +139,7 @@ func (p *DiscordServerModel) GetCommandList() (cmds []*cmdmodel.CommandsModel, e // GetRoleList - func (p *DiscordServerModel) GetRoleList() (list []*DiscordManageRoleModel, err error) { db := models.GetConn() - query := `select "server", "role_id", "role_name", "ctime", "mtime" from "discord_manage_role" where "server" = $1` + query := `select "server", "role_id", "role_name", "ctime", "mtime" from "discord"."manage_role" where "server" = $1` err = db.Select(&list, query, p.ID) if err != nil { return nil, err @@ -154,7 +154,7 @@ func (p *DiscordServerModel) GetRole(roleID string) (role *DiscordManageRoleMode } db := models.GetConn() role = &DiscordManageRoleModel{} - query := `select "server", "role_id", "role_name", "ctime", "mtime" from "discord_manage_role" where "server" = $1 and "rold_id" = $2` + query := `select "server", "role_id", "role_name", "ctime", "mtime" from "discord"."manage_role" where "server" = $1 and "rold_id" = $2` err = db.Get(role, query, p.ID, roleID) if err != nil { return nil, err @@ -165,7 +165,7 @@ func (p *DiscordServerModel) GetRole(roleID string) (role *DiscordManageRoleMode // AddChannel - func (p *DiscordServerModel) AddChannel(id string, enableCMD, enableNotify bool) (err error) { db := models.GetConn() - query := `insert into discord_channel ("id", "server", "enable_cmd", "enable_notify", "ctime", "mtime") values + query := `insert into discord.channel ("id", "server", "enable_cmd", "enable_notify", "ctime", "mtime") values ($1, $2, $3, $4, now(), now())` _, err = db.Exec(query, id, p.ID, enableCMD, enableNotify) if err != nil { diff --git a/models/public/command.go b/models/public/command.go new file mode 100644 index 0000000..01c96f0 --- /dev/null +++ b/models/public/command.go @@ -0,0 +1,128 @@ +package public + +import ( + "dorisbot/models" + "errors" + "time" +) + +// CommandsModel - +type CommandModel struct { + Key string `db:"key"` + Platform string `db:"platform"` + Binding string `db:"binding"` + RequireManage bool `db:"require_manage"` + RequireInit bool `db:"require_init"` + Value string `db:"value"` + Ctime time.Time `db:"ctime"` + Mtime time.Time `db:"mtime"` +} + +// NewCommand - +func NewCommand(key, value, platform, binding string, requireManage, requireInit bool) (c *CommandModel, err error) { + if len(key) == 0 || len(value) == 0 { + return nil, errors.New("cmd, server or value is empty") + } + + c = &CommandModel{ + Key: key, + Value: value, + Platform: platform, + Binding: binding, + RequireInit: requireInit, + RequireManage: requireManage, + } + + return +} + +// GetCommandListByPlatformBinding - +func GetCommandListByPlatformBinding(binding, platform string) (list []*CommandModel, err error) { + if len(binding) == 0 || len(platform) == 0 { + return nil, errors.New("server id or platform is empty") + } + db := models.GetConn() + query := `select "key", "platform", "binding", "value", "require_manage", "require_init", "ctime", "mtime" + from "command" + where + "binding" = $1 + and "platform" = $2` + err = db.Select(&list, query, binding, platform) + if err != nil { + return nil, err + } + return +} + +// GetCommandByPlatformBinding - +func GetCommandByPlatformBinding(key, binding, platform string) (list []*CommandModel, err error) { + if len(key) == 0 || len(binding) == 0 || len(platform) == 0 { + return nil, errors.New("key, server id or platform is empty") + } + db := models.GetConn() + query := `select "key", "platform", "binding", "value", "require_manage", "require_init", "ctime", "mtime" + from "command" + where + "key" = $1 + and ( + ("binding" = $2 and "platform" = $3) + or ("binding" = '' and "platform" = '') + ) + order by "binding" desc` + err = db.Select(&list, query, key, binding, platform) + if err != nil { + return nil, err + } + return +} + +// GetCommandByKey - +func GetCommandByKey(key string) (list []*CommandModel, err error) { + if len(key) == 0 { + return nil, errors.New("key is empty") + } + + db := models.GetConn() + query := `select "key", "platform", "binding", "value", "require_manage", "require_init", "ctime", "mtime" + from "command" + where + "key" = $1` + err = db.Select(&list, query, key) + if err != nil { + return nil, err + } + return +} + +// GetGlobalCommand - +func GetGlobalCommand(key string) (list []*CommandModel, err error) { + if len(key) == 0 { + return nil, errors.New("key is empty") + } + db := models.GetConn() + query := `select "cmd", "server", "value", "require_manage", "require_init", "ctime", "mtime" + from "command" + where + "cmd" = $1 + and "platform" = '' + and "binding" = ''` + err = db.Select(&list, query, key) + if err != nil { + return nil, err + } + return +} + +// Write - +func (p *CommandModel) Write() (err error) { + db := models.GetConn() + query := `insert into "command" ("key", "paltform", "binding", "value", "require_init", "require_manage") values +(:key, :platform, :binding, :value, :require_init, :require_manage) returning *` + row, err := db.NamedQuery(query, p) + if err != nil { + return err + } + err = row.StructScan(p) + + return +} diff --git a/pkg/svc/discord/events.go b/pkg/svc/discord/events.go index 2d0e4e2..0a9aee2 100644 --- a/pkg/svc/discord/events.go +++ b/pkg/svc/discord/events.go @@ -34,6 +34,7 @@ func messageCreateEvt(s *discordgo.Session, evt *discordgo.MessageCreate) { if !keyword && server == nil { return } + } func guildMemberAddEvt(s *discordgo.Session, evt *discordgo.GuildMemberAdd) {}