adding
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
from django.db import transaction
|
||||
|
||||
from apps.account.models import User
|
||||
from apps.banker.models import Contact, ContactField, ContactGroup, MessageTemplate
|
||||
|
||||
|
||||
class GroupService:
|
||||
@staticmethod
|
||||
def get_or_create_general(user: User) -> ContactGroup:
|
||||
"""گروه عمومی کاربر را برمیگرداند؛ اگر هنوز ندارد، میسازد.
|
||||
|
||||
هر کاربر دقیقاً یک گروه با is_general=True دارد — بدون فیلد سفارشی،
|
||||
برای کاربرانی که نیاز به پیچیدگی ندارند.
|
||||
"""
|
||||
import uuid
|
||||
|
||||
general = ContactGroup.objects.filter(user=user, is_general=True).first()
|
||||
if general:
|
||||
return general
|
||||
return ContactGroup.objects.create(
|
||||
id=str(uuid.uuid4()),
|
||||
user=user,
|
||||
name="عمومی",
|
||||
color=0xFF667EEA,
|
||||
is_general=True,
|
||||
)
|
||||
|
||||
|
||||
class BackupService:
|
||||
@staticmethod
|
||||
def build_snapshot(user: User) -> dict:
|
||||
return {
|
||||
"contact_fields": list(
|
||||
ContactField.objects.filter(user=user).values("id", "group_id", "label", "sort_order")
|
||||
),
|
||||
"contacts": list(
|
||||
Contact.objects.filter(user=user).values(
|
||||
"id", "name", "phone", "device_contact_id", "field_values", "channel_ids"
|
||||
)
|
||||
),
|
||||
"groups": list(
|
||||
ContactGroup.objects.filter(user=user).values(
|
||||
"id", "name", "color", "is_general", "member_ids"
|
||||
)
|
||||
),
|
||||
"templates": list(
|
||||
MessageTemplate.objects.filter(user=user).values("id", "group_id", "name", "body", "mode")
|
||||
),
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
@transaction.atomic
|
||||
def replace_snapshot(user: User, data: dict) -> dict:
|
||||
"""جایگزینی کامل دیتای کاربر روی سرور با آنچه از اپ فرستاده شده (منبع حقیقت، خودِ اپ است)"""
|
||||
ContactField.objects.filter(user=user).delete()
|
||||
Contact.objects.filter(user=user).delete()
|
||||
MessageTemplate.objects.filter(user=user).delete()
|
||||
ContactGroup.objects.filter(user=user).delete()
|
||||
|
||||
groups = list(data.get("groups", []))
|
||||
if groups:
|
||||
ContactGroup.objects.bulk_create(ContactGroup(user=user, **item) for item in groups)
|
||||
if not any(g.get("is_general") for g in groups):
|
||||
GroupService.get_or_create_general(user)
|
||||
|
||||
ContactField.objects.bulk_create(
|
||||
ContactField(user=user, **item) for item in data.get("contact_fields", [])
|
||||
)
|
||||
Contact.objects.bulk_create(Contact(user=user, **item) for item in data.get("contacts", []))
|
||||
MessageTemplate.objects.bulk_create(
|
||||
MessageTemplate(user=user, **item) for item in data.get("templates", [])
|
||||
)
|
||||
|
||||
return BackupService.build_snapshot(user)
|
||||
Reference in New Issue
Block a user