# Generated by Django 5.0.7 on 2024-07-24 15:06

from django.db import migrations, models


# Disallow teams to be assigned to projects with a differing organization
TEAM_PROJECT_TRIGGER = """
CREATE OR REPLACE FUNCTION check_teamproject_organization() RETURNS TRIGGER AS $$
BEGIN
    IF NEW.team_id IS NOT NULL AND NEW.project_id IS NOT NULL THEN
        PERFORM 1
        FROM projects_project p
        JOIN teams_team t ON t.organization_id = p.organization_id
        WHERE p.id = NEW.project_id AND t.id = NEW.team_id;
        IF NOT FOUND THEN
            RAISE EXCEPTION 'Team and Project must belong to the same organization';
        END IF;
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS check_teamproject_organization_trigger ON teams_team_projects;
CREATE TRIGGER check_teamproject_organization_trigger
BEFORE INSERT OR UPDATE ON teams_team_projects
FOR EACH ROW EXECUTE FUNCTION check_teamproject_organization();

"""


class Migration(migrations.Migration):
    dependencies = [
        ("organizations_ext", "0004_organizationsubscription_alter_organization_slug"),
        ("projects", "0015_rename_label_projectkey_name_projectkey_is_active"),
        ("teams", "0001_squashed_0004_alter_team_id_alter_team_members"),
    ]

    operations = [
        migrations.AlterField(
            model_name="team",
            name="members",
            field=models.ManyToManyField(
                blank=True,
                related_name="teams",
                to="organizations_ext.organizationuser",
            ),
        ),
        migrations.AlterField(
            model_name="team",
            name="projects",
            field=models.ManyToManyField(related_name="teams", to="projects.project"),
        ),
        migrations.RunSQL(TEAM_PROJECT_TRIGGER, ""),
    ]
