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.
Goff/internal/postgres/postfixes.go

186 lines
3.8 KiB

package postgres
import "log"
type postfix struct {
Name string
Invoke func(bool) error
}
var postfixes = []postfix{
postfix{
Name: "1_Update_Guild_for_Puzzle",
Invoke: updateGuildForPuzzle,
},
postfix{
Name: "1_Update_X_Guild_Prefixes_to_add_ID",
Invoke: updateXGuildPrefixesToAddID,
},
postfix{
Name: "1_Update_Tags_Content_Length",
Invoke: updateTagsContentLength,
},
postfix{
Name: "2_Add_Table_Roles",
Invoke: addTableRoles,
},
postfix{
Name: "3_Update_Guild_Add_Puzzle_Role",
Invoke: updateGuildsAddPuzzleRole,
},
postfix{
Name: "4_Add_Multi_Column_Unique_XUsersGuilds",
Invoke: addMultiColumnUniqueXUsersGuilds,
},
postfix{
Name: "5_Add_Auto_Role_To_Roles_Table",
Invoke: addAutoRoleToRoles,
},
}
func RunPostfixes() {
for _, postfix := range postfixes {
queryString := "SELECT * from postfixes where name = $1"
rows, err := DB.Query(queryString, postfix.Name)
if err != nil {
log.Println(err)
continue
}
if rows.Next() {
continue
} else {
err := postfix.Invoke(false)
if err != nil {
continue
}
_, err = DB.Exec("INSERT INTO postfixes (name) VALUES ($1)", postfix.Name)
if err != nil {
log.Println(err)
continue
}
}
}
}
func updateGuildForPuzzle(revert bool) error {
var queryString string
if !revert {
queryString = `ALTER TABLE guilds
ADD COLUMN puzzle_channel varchar(30) not null default ''`
} else {
queryString = `ALTER TABLE guilds
DROP COLUMN puzzleChat`
}
_, err := DB.Exec(queryString)
if err != nil {
log.Println(err)
return err
}
return nil
}
func updateXGuildPrefixesToAddID(revert bool) error {
var queryString string
if !revert {
queryString = `ALTER TABLE x_guilds_prefixes
ADD COLUMN id serial primary key`
} else {
queryString = `ALTER TABLE x_guilds_prefixes
DROP COLUMN id`
}
_, err := DB.Exec(queryString)
if err != nil {
log.Println(err)
return err
}
return nil
}
func updateTagsContentLength(revert bool) error {
var queryString string
if !revert {
queryString = `ALTER TABLE tags
ALTER COLUMN content TYPE varchar(2000)`
} else {
queryString = `ALTER TABLE tags
ALTER COLUMN content TYPE varchar(1000)`
}
_, err := DB.Exec(queryString)
if err != nil {
log.Println(err)
return err
}
return nil
}
func addTableRoles(revert bool) error {
var queryString string
if !revert {
queryString = `CREATE TABLE roles(
id varchar(30) primary key,
guild_id varchar(30) not null references guilds(id),
self_assignable bool not null default false,
admin bool not null default false,
moderator bool not null default false
)`
} else {
queryString = `DROP TABLE roles`
}
_, err := DB.Exec(queryString)
if err != nil {
log.Println(err)
return err
}
return nil
}
func updateGuildsAddPuzzleRole(revert bool) error {
var queryString string
if !revert {
queryString = `ALTER TABLE guilds
ADD COLUMN puzzle_role varchar(30) references roles(id)`
} else {
queryString = `ALTER TABLE guilds
DROP COLUMN puzzle_role`
}
_, err := DB.Exec(queryString)
if err != nil {
log.Println(err)
return err
}
return nil
}
func addMultiColumnUniqueXUsersGuilds(revert bool) error {
var queryString string
if !revert {
queryString = `ALTER TABLE x_users_guilds
ADD CONSTRAINT u_user_guild UNIQUE(user_id, guild_id)`
} else {
queryString = `ALTER TABLE DROP CONSTRAINT u_user_guild IF EXISTS`
}
_, err := DB.Exec(queryString)
if err != nil {
log.Println(err)
return err
}
return nil
}
func addAutoRoleToRoles(revert bool) error {
var queryString string
if !revert {
queryString = `ALTER TABLE roles
ADD COLUMN auto_role bool DEFAULT false`
} else {
queryString = `ALTER TABLE roles
DROP COLUMN auto_role`
}
_, err := DB.Exec(queryString)
if err != nil {
log.Println(err)
return err
}
return nil
}