Archived
1

Database connections, refactoring, pokememe parsing in progress

This commit is contained in:
Vladimir Hodakov
2017-10-06 02:56:06 +04:00
parent 4fec8f0fe7
commit fe496d696f
29 changed files with 842 additions and 18 deletions

18
lib/migrations/1_hello.go Normal file
View File

@@ -0,0 +1,18 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
"log"
)
// First migration, added for testing purposes
func HelloUp(tx *sql.Tx) error {
log.Printf("Migration framework loaded. All systems are OK.")
return nil
}

View File

@@ -0,0 +1,38 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
)
func CreatePlayersUp(tx *sql.Tx) error {
create_request := "CREATE TABLE `players` ("
create_request += "`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID игрока',"
create_request += "`telegram_id` int(11) NOT NULL COMMENT 'ID в телеграме',"
create_request += "`league_id` int(11) COMMENT 'ID лиги' DEFAULT 0,"
create_request += "`squad_id` int(11) COMMENT 'ID отряда' DEFAULT 0,"
create_request += "`status` varchar(191) COMMENT 'Статус в лиге' DEFAULT 'common',"
create_request += "`created_at` datetime NOT NULL COMMENT 'Добавлен в базу',"
create_request += "`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Время последнего обновления',"
create_request += "PRIMARY KEY (`id`),"
create_request += "UNIQUE KEY `id` (`id`),"
create_request += "KEY `players_created_at` (`created_at`),"
create_request += "KEY `players_updated_at` (`updated_at`)"
create_request += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Зарегистрированные игроки';"
_, err := tx.Exec(create_request)
if err != nil {
return err
}
return nil
}
func CreatePlayersDown(tx *sql.Tx) error {
_, err := tx.Exec("DROP TABLE `players`;")
if err != nil {
return err
}
return nil
}

View File

@@ -0,0 +1,42 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
)
func CreateProfilesUp(tx *sql.Tx) error {
create_request := "CREATE TABLE `profiles` ("
create_request += "`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID сохраненного профиля',"
create_request += "`player_id` int(11) NOT NULL COMMENT 'ID игрока в системе',"
create_request += "`nickname` varchar(191) NOT NULL COMMENT 'Ник игрока',"
create_request += "`telegram_nickname` varchar(191) NOT NULL COMMENT 'Ник в Телеграме (@)',"
create_request += "`level_id` int(11) NOT NULL COMMENT 'Уровень',"
create_request += "`exp` int(11) NOT NULL COMMENT 'Опыт',"
create_request += "`egg_exp` int(11) NOT NULL COMMENT 'Опыт яйца',"
create_request += "`power` int(11) NOT NULL COMMENT 'Сила без оружия',"
create_request += "`weapon_id` int(11) NOT NULL COMMENT 'Тип оружия',"
create_request += "`crystalls` int(11) NOT NULL COMMENT 'Кристаллы',"
create_request += "`created_at` datetime NOT NULL COMMENT 'Добавлен в базу',"
create_request += "PRIMARY KEY (`id`),"
create_request += "UNIQUE KEY `id` (`id`),"
create_request += "KEY `profiles_created_at` (`created_at`),"
create_request += "KEY `profiles_nickname` (`nickname`)"
create_request += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Профили зарегистрированных игроков';"
_, err := tx.Exec(create_request)
if err != nil {
return err
}
return nil
}
func CreateProfilesDown(tx *sql.Tx) error {
_, err := tx.Exec("DROP TABLE `profiles`;")
if err != nil {
return err
}
return nil
}

View File

@@ -0,0 +1,44 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
)
func CreatePokememesUp(tx *sql.Tx) error {
create_request := "CREATE TABLE `pokememes` ("
create_request += "`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID покемема',"
create_request += "`grade` int(11) NOT NULL COMMENT 'Поколение покемема',"
create_request += "`name` varchar(191) NOT NULL COMMENT 'Имя покемема',"
create_request += "`description` TEXT NOT NULL COMMENT 'Описание покемема',"
create_request += "`attack` int(11) NOT NULL COMMENT 'Атака',"
create_request += "`hp` int(11) NOT NULL COMMENT 'Здоровье',"
create_request += "`mp` int(11) NOT NULL COMMENT 'МР',"
create_request += "`defence` int(11) NOT NULL COMMENT 'Защита',"
create_request += "`price` int(11) NOT NULL COMMENT 'Стоимость',"
create_request += "`purchaseable` bool NOT NULL DEFAULT true COMMENT 'Можно купить?',"
create_request += "`image_url` varchar(191) NOT NULL COMMENT 'Изображение покемема',"
create_request += "`player_id` int(11) NOT NULL COMMENT 'Кто добавил в базу',"
create_request += "`created_at` datetime NOT NULL COMMENT 'Добавлен в базу',"
create_request += "PRIMARY KEY (`id`),"
create_request += "UNIQUE KEY `id` (`id`),"
create_request += "KEY `pokememes_created_at` (`created_at`),"
create_request += "KEY `pokememes_player_id` (`player_id`)"
create_request += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Покемемы';"
_, err := tx.Exec(create_request)
if err != nil {
return err
}
return nil
}
func CreatePokememesDown(tx *sql.Tx) error {
_, err := tx.Exec("DROP TABLE `pokememes`;")
if err != nil {
return err
}
return nil
}

View File

@@ -0,0 +1,61 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
)
func CreateLocationsUp(tx *sql.Tx) error {
create_request := "CREATE TABLE `locations` ("
create_request += "`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID локации',"
create_request += "`symbol` varchar(191) COLLATE 'utf8mb4_unicode_520_ci' NOT NULL COMMENT 'Символ локации',"
create_request += "`name` varchar(191) NOT NULL COMMENT 'Имя локации',"
create_request += "`created_at` datetime NOT NULL COMMENT 'Добавлена в базу',"
create_request += "PRIMARY KEY (`id`),"
create_request += "UNIQUE KEY `id` (`id`),"
create_request += "KEY `locations_created_at` (`created_at`)"
create_request += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Локации';"
_, err := tx.Exec(create_request)
if err != nil {
return err
}
// Insert locations
_, err2 := tx.Exec("INSERT INTO `locations` VALUES(NULL, ':evergreen_tree:', 'Лес', NOW());")
if err2 != nil {
return err2
}
_, err3 := tx.Exec("INSERT INTO `locations` VALUES(NULL, '⛰', 'Горы', NOW());")
if err3 != nil {
return err2
}
_, err4 := tx.Exec("INSERT INTO `locations` VALUES(NULL, ':rowboat:', 'Озеро', NOW());")
if err4 != nil {
return err2
}
_, err5 := tx.Exec("INSERT INTO `locations` VALUES(NULL, '🏙:', 'Город', NOW());")
if err5 != nil {
return err2
}
_, err6 := tx.Exec("INSERT INTO `locations` VALUES(NULL, '🏛', 'Катакомбы', NOW());")
if err6 != nil {
return err2
}
_, err7 := tx.Exec("INSERT INTO `locations` VALUES(NULL, ':church:', 'Кладбище', NOW());")
if err7 != nil {
return err2
}
return nil
}
func CreateLocationsDown(tx *sql.Tx) error {
_, err := tx.Exec("DROP TABLE `locations`;")
if err != nil {
return err
}
return nil
}

View File

@@ -0,0 +1,86 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
)
func CreateElementsUp(tx *sql.Tx) error {
create_request := "CREATE TABLE `elements` ("
create_request += "`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID элемента',"
create_request += "`symbol` varchar(191) COLLATE 'utf8mb4_unicode_520_ci' NOT NULL COMMENT 'Символ элемента',"
create_request += "`name` varchar(191) NOT NULL COMMENT 'Имя элемента',"
create_request += "`league_id` int(11) NOT NULL COMMENT 'ID родной лиги',"
create_request += "`created_at` datetime NOT NULL COMMENT 'Добавлен в базу',"
create_request += "PRIMARY KEY (`id`),"
create_request += "UNIQUE KEY `id` (`id`),"
create_request += "KEY `elements_created_at` (`created_at`)"
create_request += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Элементы';"
_, err := tx.Exec(create_request)
if err != nil {
return err
}
// Insert elements
_, err2 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '👊', 'Боевой', 1, NOW());")
if err2 != nil {
return err2
}
_, err3 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '🌀', 'Летающий', 1, NOW());")
if err3 != nil {
return err3
}
_, err4 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '💀', 'Ядовитый', 1, NOW());")
if err4 != nil {
return err4
}
_, err5 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '🗿', 'Каменный', 1, NOW());")
if err5 != nil {
return err5
}
_, err6 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '🔥', 'Огненный', 2, NOW());")
if err6 != nil {
return err6
}
_, err7 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '⚡', 'Электрический', 2, NOW());")
if err7 != nil {
return err7
}
_, err8 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '💧', 'Водяной', 2, NOW());")
if err8 != nil {
return err8
}
_, err9 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '🍀', 'Травяной', 2, NOW());")
if err9 != nil {
return err9
}
_, err10 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '💩', 'Шоколадный', 3, NOW());")
if err10 != nil {
return err10
}
_, err11 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '👁', 'Психический', 3, NOW());")
if err11 != nil {
return err11
}
_, err12 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '👿', 'Темный', 3, NOW());")
if err12 != nil {
return err12
}
_, err13 := tx.Exec("INSERT INTO `elements` VALUES(NULL, '⌛', 'Времени', 1, NOW());")
if err13 != nil {
return err13
}
return nil
}
func CreateElementsDown(tx *sql.Tx) error {
_, err := tx.Exec("DROP TABLE `elements`;")
if err != nil {
return err
}
return nil
}

View File

@@ -0,0 +1,49 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
)
func CreateLeaguesUp(tx *sql.Tx) error {
create_request := "CREATE TABLE `leagues` ("
create_request += "`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID лиги',"
create_request += "`symbol` varchar(191) COLLATE 'utf8mb4_unicode_520_ci' NOT NULL COMMENT 'Символ лиги',"
create_request += "`name` varchar(191) NOT NULL COMMENT 'Имя лиги',"
create_request += "`created_at` datetime NOT NULL COMMENT 'Добавлена в базу',"
create_request += "PRIMARY KEY (`id`),"
create_request += "UNIQUE KEY `id` (`id`),"
create_request += "KEY `leagues_created_at` (`created_at`)"
create_request += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Лиги';"
_, err := tx.Exec(create_request)
if err != nil {
return err
}
// Insert locations
_, err2 := tx.Exec("INSERT INTO `leagues` VALUES(NULL, ':u7533:', 'ИНСТИНКТ', NOW());")
if err2 != nil {
return err2
}
_, err3 := tx.Exec("INSERT INTO `leagues` VALUES(NULL, ':u6e80', 'ОТВАГА', NOW());")
if err3 != nil {
return err2
}
_, err4 := tx.Exec("INSERT INTO `leagues` VALUES(NULL, ':u7a7a:', 'МИСТИКА', NOW());")
if err4 != nil {
return err2
}
return nil
}
func CreateLeaguesDown(tx *sql.Tx) error {
_, err := tx.Exec("DROP TABLE `leagues`;")
if err != nil {
return err
}
return nil
}

View File

@@ -0,0 +1,52 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
)
func CreateRelationsUp(tx *sql.Tx) error {
create_request := "CREATE TABLE `pokememes_locations` ("
create_request += "`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID связи',"
create_request += "`pokememe_id` int(11) NOT NULL COMMENT 'ID покемема',"
create_request += "`location_id` int(11) NOT NULL COMMENT 'ID локации',"
create_request += "`created_at` datetime NOT NULL COMMENT 'Добавлено в базу',"
create_request += "PRIMARY KEY (`id`),"
create_request += "UNIQUE KEY `id` (`id`),"
create_request += "KEY `pokememes_locations_created_at` (`created_at`)"
create_request += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Связь Покемемы-Локации';"
_, err := tx.Exec(create_request)
if err != nil {
return err
}
create_request = "CREATE TABLE `pokememes_elements` ("
create_request += "`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID связи',"
create_request += "`pokememe_id` int(11) NOT NULL COMMENT 'ID покемема',"
create_request += "`element_id` int(11) NOT NULL COMMENT 'ID элемента',"
create_request += "`created_at` datetime NOT NULL COMMENT 'Добавлено в базу',"
create_request += "PRIMARY KEY (`id`),"
create_request += "UNIQUE KEY `id` (`id`),"
create_request += "KEY `pokememes_elements_created_at` (`created_at`)"
create_request += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Связь Покемемы-Элементы';"
_, err2 := tx.Exec(create_request)
if err2 != nil {
return err2
}
return nil
}
func CreateRelationsDown(tx *sql.Tx) error {
_, err := tx.Exec("DROP TABLE `pokememes_locations`;")
if err != nil {
return err
}
_, err2 := tx.Exec("DROP TABLE `pokememes_elements`;")
if err2 != nil {
return err2
}
return nil
}

View File

@@ -0,0 +1,20 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// local
"../appcontext"
"../migrations/migrationsinterface"
)
var (
c *appcontext.Context
)
func New(ac *appcontext.Context) {
c = ac
m := &Migrations{}
c.RegisterMigrationsInterface(migrationsinterface.MigrationsInterface(m))
}

View File

@@ -0,0 +1,42 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"log"
// 3rd-party
"github.com/pressly/goose"
)
type Migrations struct {}
func (m *Migrations) Init() {
log.Printf("Initializing migrations...")
// All migrations are here
goose.AddNamedMigration("1_hello.go", HelloUp, nil)
goose.AddNamedMigration("2_create_players.go", CreatePlayersUp, CreatePlayersDown)
goose.AddNamedMigration("3_create_profiles.go", CreateProfilesUp, CreateProfilesDown)
goose.AddNamedMigration("4_create_pokememes.go", CreatePokememesUp, CreatePokememesDown)
goose.AddNamedMigration("5_create_locations.go", CreateLocationsUp, CreateLocationsDown)
goose.AddNamedMigration("6_create_elements.go", CreateElementsUp, CreateElementsDown)
goose.AddNamedMigration("7_create_leagues.go", CreateLeaguesUp, CreateLeaguesDown)
goose.AddNamedMigration("8_create_relations.go", CreateRelationsUp, CreateRelationsDown)
}
func (m *Migrations) Migrate() error {
log.Printf("Starting database migrations...")
err := goose.Up(c.Db.DB, ".")
if err != nil {
log.Fatal(err)
return err
}
return nil
}
func (m *Migrations) SetDialect(dialect string) error {
return goose.SetDialect(dialect)
}

View File

@@ -0,0 +1,10 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrationsinterface
type MigrationsInterface interface {
Init()
Migrate() error
SetDialect(dialect string) error
}