# -*- coding: utf-8 -*-
# Generated by Django 1.10.2 on 2017-05-09 13:01
"""Initial database migration."""
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):
    """Set up the initial database."""

    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name="Version",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "build_fingerprint",
                    models.CharField(max_length=200, unique=True),
                ),
                ("is_official_release", models.BooleanField(default=False)),
                ("is_beta_release", models.BooleanField(default=False)),
                ("first_seen_on", models.DateField()),
                ("released_on", models.DateField()),
                ("heartbeats", models.IntegerField()),
                ("prob_crashes", models.IntegerField()),
                ("smpl", models.IntegerField()),
                ("other", models.IntegerField()),
            ],
        ),
        migrations.CreateModel(
            name="VersionDaily",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("date", models.DateField()),
                ("heartbeats", models.IntegerField()),
                ("prob_crashes", models.IntegerField()),
                ("smpl", models.IntegerField()),
                ("other", models.IntegerField()),
                (
                    "version",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="daily_stats",
                        to="crashreport_stats.Version",
                    ),
                ),
            ],
        ),
    ]
