File size: 2,436 Bytes
b4f2238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"""Business logic services."""

from __future__ import annotations

import logging

from apps.cases.models import CaseTemplateBinding
from apps.core.dto import CaseTemplateBindingDTO

logger = logging.getLogger("apps.cases")


class CaseTemplateBindingQueryService:
    def get_case_template_binding_internal(self, case_id: int) -> CaseTemplateBindingDTO | None:
        try:
            binding = CaseTemplateBinding.objects.select_related("template").filter(case_id=case_id).first()
            if not binding:
                return None

            return CaseTemplateBindingDTO(
                id=binding.id,
                case_id=binding.case_id,
                template_id=binding.template_id,
                template_name=binding.template.name if binding.template else "",
                template_function_code=None,
                binding_source=binding.binding_source,
                created_at=str(binding.created_at) if binding.created_at else None,
            )
        except Exception:
            logger.exception("get_case_template_binding_internal_failed", extra={"case_id": case_id})
            raise

    def get_case_template_bindings_by_name_internal(
        self, case_id: int, template_name: str
    ) -> list[CaseTemplateBindingDTO]:
        try:
            bindings = CaseTemplateBinding.objects.filter(
                case_id=case_id,
                template__name=template_name,
                template__is_active=True,
            ).select_related("template")

            result: list[CaseTemplateBindingDTO] = []
            for binding in bindings:
                result.append(
                    CaseTemplateBindingDTO(
                        id=binding.id,
                        case_id=binding.case_id,
                        template_id=binding.template_id,
                        template_name=binding.template.name if binding.template else "",
                        template_function_code=None,
                        binding_source=getattr(binding, "binding_source", "manual"),
                        created_at=str(binding.created_at) if binding.created_at else None,
                    )
                )
            return result
        except Exception:
            logger.exception(
                "get_case_template_bindings_by_name_internal_failed",
                extra={"case_id": case_id, "template_name": template_name},
            )
            raise