84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from django.conf import settings
|
|
from django.db import models
|
|
from django_stubs_ext.db.models import TypedModelMeta
|
|
|
|
from firefighter.incidents.models.incident import Incident
|
|
from firefighter.jira_app.models import JiraIssue
|
|
|
|
if TYPE_CHECKING:
|
|
from firefighter.incidents.models.impact import Impact # noqa: F401
|
|
|
|
|
|
class JiraTicket(JiraIssue):
|
|
"""Jira ticket model."""
|
|
|
|
# XXX Incident/Impact should be split into new models
|
|
incident = models.OneToOneField(
|
|
Incident, on_delete=models.CASCADE, related_name="jira_ticket", null=True
|
|
)
|
|
impacts = models.ManyToManyField["Impact", "JiraTicketImpact"](
|
|
"incidents.Impact", through="JiraTicketImpact"
|
|
)
|
|
|
|
# TODO: priority
|
|
# Jira Custom fields
|
|
business_impact = models.CharField(
|
|
max_length=128,
|
|
help_text="It maps with customfield_10936",
|
|
blank=True,
|
|
null=True,
|
|
default="",
|
|
)
|
|
|
|
class Meta(TypedModelMeta):
|
|
verbose_name = "Jira ticket"
|
|
verbose_name_plural = "Jira tickets"
|
|
|
|
def get_absolute_url(self) -> str:
|
|
return self.url
|
|
|
|
@property
|
|
def url(self) -> str:
|
|
return f"{settings.RAID_JIRA_API_URL}/browse/{self.key}"
|
|
|
|
|
|
class JiraTicketImpact(models.Model):
|
|
jira_ticket = models.ForeignKey(
|
|
"JiraTicket", on_delete=models.CASCADE
|
|
)
|
|
impact = models.ForeignKey(
|
|
"incidents.Impact", on_delete=models.CASCADE
|
|
)
|
|
|
|
def __str__(self) -> str:
|
|
return f"{self.jira_ticket.key}: {self.impact}"
|
|
|
|
|
|
class FeatureTeam(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
name = models.CharField(max_length=80)
|
|
jira_project_key = models.CharField(
|
|
max_length=10,
|
|
unique=True,
|
|
)
|
|
|
|
class Meta(TypedModelMeta):
|
|
unique_together = ("name", "jira_project_key")
|
|
verbose_name = "Feature Team"
|
|
verbose_name_plural = "Feature Teams"
|
|
|
|
def __str__(self) -> str:
|
|
return self.name
|
|
|
|
@property
|
|
def get_team(self) -> str:
|
|
return f"{self.name} {self.jira_project_key}"
|
|
|
|
@property
|
|
def get_key(self) -> str:
|
|
return f"{self.jira_project_key}"
|