# Generated by Django 5.2.14 on 2026-05-26 00:47

import django.db.models.deletion
import django.utils.timezone
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='DataExtractionField',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('description', models.TextField()),
                ('field_type', models.CharField(default='O', max_length=1)),
                ('order', models.IntegerField(default=0)),
            ],
            options={
                'db_table': 'data_extraction_fields',
                'ordering': ['order'],
            },
        ),
        migrations.CreateModel(
            name='Source',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=120)),
                ('url', models.CharField(blank=True, default='', max_length=500)),
                ('is_default', models.BooleanField(default=False)),
            ],
            options={
                'db_table': 'sources',
            },
        ),
        migrations.CreateModel(
            name='DataExtractionLookup',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('value', models.CharField(max_length=255)),
                ('field', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lookups', to='reviews.dataextractionfield')),
            ],
            options={
                'db_table': 'data_extraction_lookups',
            },
        ),
        migrations.CreateModel(
            name='Review',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('slug', models.CharField(max_length=120)),
                ('title', models.CharField(max_length=255)),
                ('description', models.TextField(blank=True, default='')),
                ('objective', models.TextField(blank=True, default='')),
                ('population', models.CharField(blank=True, default='', max_length=200)),
                ('intervention', models.CharField(blank=True, default='', max_length=200)),
                ('comparison', models.CharField(blank=True, default='', max_length=200)),
                ('outcome', models.CharField(blank=True, default='', max_length=200)),
                ('context', models.CharField(blank=True, default='', max_length=200)),
                ('quality_assessment_cutoff_score', models.FloatField(default=0.0)),
                ('publish_status', models.CharField(default='U', max_length=1)),
                ('synthesis_draft', models.TextField(blank=True, default='')),
                ('is_public', models.BooleanField(default=False)),
                ('is_demo', models.BooleanField(default=False)),
                ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
                ('updated_at', models.DateTimeField(default=django.utils.timezone.now)),
                ('co_authors', models.ManyToManyField(blank=True, db_table='review_coauthors', related_name='collaborations', to=settings.AUTH_USER_MODEL)),
                ('owner', models.ForeignKey(db_column='owner_id', on_delete=django.db.models.deletion.CASCADE, related_name='owned_reviews', to=settings.AUTH_USER_MODEL)),
                ('sources', models.ManyToManyField(blank=True, db_table='review_sources', related_name='reviews', to='reviews.source')),
            ],
            options={
                'db_table': 'reviews',
            },
        ),
        migrations.CreateModel(
            name='Question',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('question', models.TextField()),
                ('order', models.IntegerField(default=0)),
                ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='subquestions', to='reviews.question')),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='reviews.review')),
            ],
            options={
                'db_table': 'questions',
                'ordering': ['order'],
            },
        ),
        migrations.CreateModel(
            name='QualityQuestion',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('description', models.TextField()),
                ('order', models.IntegerField(default=0)),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='quality_questions', to='reviews.review')),
            ],
            options={
                'db_table': 'quality_questions',
                'ordering': ['order'],
            },
        ),
        migrations.CreateModel(
            name='QualityAnswer',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('description', models.CharField(max_length=120)),
                ('weight', models.FloatField(default=0.0)),
                ('order', models.IntegerField(default=0)),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='quality_answers', to='reviews.review')),
            ],
            options={
                'db_table': 'quality_answers',
                'ordering': ['order'],
            },
        ),
        migrations.CreateModel(
            name='Keyword',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('description', models.CharField(max_length=200)),
                ('related_to', models.CharField(default='P', max_length=1)),
                ('synonym_of', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='synonyms', to='reviews.keyword')),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='keywords', to='reviews.review')),
            ],
            options={
                'db_table': 'keywords',
            },
        ),
        migrations.CreateModel(
            name='Invite',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('invitee_email', models.EmailField(max_length=255)),
                ('status', models.CharField(default='pending', max_length=20)),
                ('code', models.CharField(default=uuid.uuid4, max_length=36, unique=True)),
                ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
                ('responded_at', models.DateTimeField(blank=True, null=True)),
                ('invited_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invites_sent', to=settings.AUTH_USER_MODEL)),
                ('invitee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='invites_received', to=settings.AUTH_USER_MODEL)),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invites', to='reviews.review')),
            ],
            options={
                'db_table': 'invites',
            },
        ),
        migrations.CreateModel(
            name='Hypothesis',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('statement', models.TextField()),
                ('hypothesis_type', models.CharField(default='S', max_length=1)),
                ('order', models.IntegerField(default=0)),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='hypotheses', to='reviews.review')),
            ],
            options={
                'db_table': 'hypotheses',
                'ordering': ['order'],
            },
        ),
        migrations.AddField(
            model_name='dataextractionfield',
            name='review',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='extraction_fields', to='reviews.review'),
        ),
        migrations.CreateModel(
            name='SelectionCriteria',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('criteria_type', models.CharField(max_length=1)),
                ('description', models.TextField()),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='selection_criteria', to='reviews.review')),
            ],
            options={
                'db_table': 'selection_criteria',
            },
        ),
        migrations.CreateModel(
            name='Article',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.TextField(blank=True, default='')),
                ('authors', models.TextField(blank=True, default='')),
                ('journal', models.CharField(blank=True, default='', max_length=500)),
                ('year', models.CharField(blank=True, default='', max_length=20)),
                ('volume', models.CharField(blank=True, default='', max_length=50)),
                ('number', models.CharField(blank=True, default='', max_length=50)),
                ('pages', models.CharField(blank=True, default='', max_length=50)),
                ('doi', models.CharField(blank=True, default='', max_length=255)),
                ('abstract', models.TextField(blank=True, default='')),
                ('bibtex_key', models.CharField(blank=True, default='', max_length=255)),
                ('entry_type', models.CharField(blank=True, default='', max_length=50)),
                ('publisher', models.CharField(blank=True, default='', max_length=255)),
                ('url', models.CharField(blank=True, default='', max_length=500)),
                ('affiliation', models.TextField(blank=True, default='')),
                ('author_keywords', models.TextField(blank=True, default='')),
                ('index_keywords', models.TextField(blank=True, default='')),
                ('issn', models.CharField(blank=True, default='', max_length=50)),
                ('language', models.CharField(blank=True, default='', max_length=50)),
                ('note', models.TextField(blank=True, default='')),
                ('pmid', models.CharField(blank=True, default='', max_length=32)),
                ('status', models.CharField(default='U', max_length=1)),
                ('comments', models.TextField(blank=True, default='')),
                ('finished_data_extraction', models.BooleanField(default=False)),
                ('thesis_highlight', models.BooleanField(default=False)),
                ('thesis_tags', models.CharField(blank=True, default='', max_length=500)),
                ('thesis_reminder', models.TextField(blank=True, default='')),
                ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
                ('updated_at', models.DateTimeField(default=django.utils.timezone.now)),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='articles_created', to=settings.AUTH_USER_MODEL)),
                ('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='articles_updated', to=settings.AUTH_USER_MODEL)),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='articles', to='reviews.review')),
                ('selection_criteria', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='reviews.selectioncriteria')),
                ('source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='reviews.source')),
            ],
            options={
                'db_table': 'articles',
            },
        ),
        migrations.CreateModel(
            name='DataExtraction',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('value', models.TextField(blank=True, default='')),
                ('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='extractions', to='reviews.article')),
                ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
                ('field', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='extractions', to='reviews.dataextractionfield')),
                ('select_values', models.ManyToManyField(blank=True, db_table='extraction_select_values', to='reviews.dataextractionlookup')),
            ],
            options={
                'db_table': 'data_extractions',
                'constraints': [models.UniqueConstraint(fields=('article', 'field'), name='uq_extraction_article_field')],
            },
        ),
        migrations.CreateModel(
            name='QualityAssessment',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('answer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='reviews.qualityanswer')),
                ('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='quality_assessments', to='reviews.article')),
                ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
                ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assessments', to='reviews.qualityquestion')),
            ],
            options={
                'db_table': 'quality_assessments',
                'constraints': [models.UniqueConstraint(fields=('article', 'question'), name='uq_qa_article_question')],
            },
        ),
        migrations.CreateModel(
            name='SearchSession',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('search_string', models.TextField(blank=True, default='')),
                ('version', models.IntegerField(default=1)),
                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='search_sessions', to='reviews.review')),
                ('source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='reviews.source')),
            ],
            options={
                'db_table': 'search_sessions',
                'constraints': [models.UniqueConstraint(fields=('review', 'source'), name='uq_search_session_review_source')],
            },
        ),
        migrations.AddConstraint(
            model_name='review',
            constraint=models.UniqueConstraint(fields=('owner', 'slug'), name='uq_review_owner_slug'),
        ),
    ]
