File size: 3,556 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
"""Module for folder template usecases."""

from __future__ import annotations

from dataclasses import dataclass
from typing import Any, cast

from apps.documents.models import FolderTemplate
from apps.documents.services.folder_template.command_service import FolderTemplateCommandService
from apps.documents.services.folder_template.query_service import FolderTemplateQueryService
from apps.documents.services.folder_template.structure_rules import FolderTemplateStructureRules
from apps.documents.services.folder_template.validation_service import FolderTemplateValidationService


@dataclass(frozen=True)
class FolderTemplateUsecases:
    command_service: FolderTemplateCommandService
    query_service: FolderTemplateQueryService
    validation_service: FolderTemplateValidationService
    structure_rules: FolderTemplateStructureRules

    def list_templates(
        self, *, case_type: str | None = None, case_stage: str | None = None, is_active: bool | None = None
    ) -> list[FolderTemplate]:
        return cast(
            list[FolderTemplate],
            self.query_service.list_templates(case_type=case_type, case_stage=case_stage, is_active=is_active),
        )

    def get_template_by_id(self, *, template_id: int) -> FolderTemplate:
        return self.query_service.get_template_by_id(template_id=template_id)

    def get_template_for_case(self, *, case_type: str, case_stage: str) -> FolderTemplate | None:
        return self.query_service.get_template_for_case(case_type=case_type, case_stage=case_stage)  # type: ignore[no-any-return]

    def get_duplicate_id_report(self) -> dict[str, Any]:
        return self.query_service.get_duplicate_id_report()

    def create_template(
        self,
        *,
        name: str,
        case_type: str,
        case_stage: str,
        structure: dict[str, Any],
        is_default: bool = False,
        is_active: bool = True,
        **kwargs: Any,
    ) -> FolderTemplate:
        return self.command_service.create_template(
            name=name,
            case_type=case_type,
            case_stage=case_stage,
            structure=structure,
            is_default=is_default,
            is_active=is_active,
            **kwargs,
        )

    def update_structure(self, *, template_id: int, structure: dict[str, Any]) -> FolderTemplate:
        return self.command_service.update_structure(template_id=template_id, structure=structure)

    def delete_template(self, *, template_id: int) -> bool:
        return self.command_service.delete_template(template_id=template_id)

    def create_template_from_dict(self, *, data: dict[str, Any]) -> FolderTemplate:
        return self.command_service.create_template_from_dict(data=data)

    def update_template_from_dict(self, *, template_id: int, data: dict[str, Any]) -> FolderTemplate:
        return self.command_service.update_template_from_dict(template_id=template_id, data=data)

    def validate_structure(self, *, structure: dict[str, Any]) -> tuple[bool, str]:
        return self.validation_service.validate_structure(structure)

    def validate_structure_ids(
        self, *, structure: dict[str, Any], template_id: int | None = None
    ) -> tuple[bool, list[str]]:
        return self.structure_rules.validate_structure_ids(structure, template_id)

    def validate_and_fix_structure_ids(
        self, *, structure: dict[str, Any], template_id: int | None = None
    ) -> tuple[bool, dict[str, Any], list[str]]:
        return self.structure_rules.validate_and_fix_structure_ids(structure, template_id)