patbef-ServiceOutside/ServiceShared/Database/Migrations/Version_1.cs

142 lines
7.0 KiB
C#

using MySql.Data.MySqlClient;
using System.Reflection;
namespace ServiceShared.Database.Migrations
{
public class Version_1 : Migration
{
public Version_1()
{
this.Version = 1;
}
/**
* Run current migration
**/
public override bool Run(DbContext dbContext)
{
bool result = false;
try
{
Log.Info("Check if database exists...");
/** necessary to run first for refreshing mysql connection context **/
if (!dbContext.DatabaseExists())
{
Log.Info("Run Migration - " + this.Version + "");
if (dbContext.DatabaseCreate())
{
using (MySqlConnection client = dbContext.CreateConnection())
{
client.Open();
MySqlCommand cmd = client.CreateCommand();
cmd.CommandText = "set foreign_key_checks = 0";
cmd.ExecuteNonQuery();
/* devices table */
cmd.CommandText = @"create table if not exists device (
udid varchar(64) not null,
device_token varchar(255) not null,
pat_hash varchar(255) null,
public_key varchar(64) null,
verificator_hash varchar(128) not null,
pin varchar(5) not null,
device_type enum ('IOS','ANDROID') not null,
created timestamp not null default current_timestamp(),
modified datetime null,
primary key(udid) using btree,
index device_token(device_token) using btree,
index verificator_hash(verificator_hash) using btree
)";
cmd.ExecuteNonQuery();
/* results table */
cmd.CommandText = @"create table if not exists results (
pgs varchar(128) not null,
pgs_hash varchar(128) not null,
udid varchar(64) not null,
client_public_key varchar(64) not null,
server_public_key varchar(64) null,
available bit(1) not null default 0,
available_ts datetime null,
picked_up bit(1) not null default 0,
picked_up_ts datetime null,
file_checksum varchar(128) null,
notified bit(1) not null default 0,
notified_ts datetime null,
modified datetime null,
status varchar(50) null,
created timestamp not null default current_timestamp(),
primary key(pgs, udid) using btree,
index pgs(pgs) using btree,
index udid(udid) using btree,
index client_public_key(client_public_key) using btree,
constraint fk_results_device foreign key(udid) references device(udid) on update cascade on delete cascade
)";
cmd.ExecuteNonQuery();
/* trace table */
cmd.CommandText = @"create table if not exists traces (
id bigint primary key auto_increment,
pgs varchar(128) not null,
udid varchar(64) null,
message varchar(256) not null,
trace_type enum('CRITICAL', 'ERROR', 'INFO', 'LOG', 'TRACE', 'DEBUG', 'WARNING') not null default 'TRACE',
created timestamp not null default current_timestamp(),
index pgs(pgs) using btree,
index udid(udid) using btree,
index pgs_udid(pgs, udid) using btree)";
cmd.ExecuteNonQuery();
/* config table */
cmd.CommandText = @"create table if not exists config (
id int primary key auto_increment,
maintenance bit(1) not null default 0,
modified datetime null,
created timestamp not null default current_timestamp())";
cmd.ExecuteNonQuery();
/* insert into config table */
cmd.CommandText = @"insert into config (maintenance) values(0)";
cmd.ExecuteNonQuery();
/* Enable FK check */
cmd.CommandText = "set foreign_key_checks = 1";
cmd.ExecuteNonQuery();
client.Close();
result = true;
}
}
}
else
{
result = true;
}
}
catch (Exception ex)
{
Log.Error(ex, "ServiceOutside.Database.Migrations.Version_1", "Run");
}
return result;
}
/**
* Run previous migrations
**/
public override bool RunPrevious(DbContext dbContext)
{
return true;
}
}
}