19bc2874aa
- ConnectorConfig: тип 'nextcloud' (host/username/token, шифруется) - NextcloudService: OCS-клиент Group Folders (create/ACL/quota, идемпотентный ensure_folder) - NextcloudSyncService: отделы → 03_Отделы/* ↔ nc-dept-<код>; аптеки → 02_Аптеки/* ↔ nc-svc - Сигналы Directory/Pharmacy с гейтом на включённый коннектор (по умолч. no-op) - Celery-задачи + команда nextcloud_sync (dry-run по умолчанию, --apply) - NextcloudSyncLog + admin; тесты (пути, гейт, идемпотентность ensure_folder) Членство юзеров идёт через AD/LDAP, коннектор ведёт только папки+ACL. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
import logging
|
||
|
||
from celery import shared_task
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
@shared_task
|
||
def sync_department_folder_task(directory_id):
|
||
"""Асинхронное создание/обновление Group Folder отдела."""
|
||
from core.models import Directory
|
||
from apps.nextcloud_connector.services.sync_service import NextcloudSyncService
|
||
try:
|
||
directory = Directory.objects.get(pk=directory_id)
|
||
except Directory.DoesNotExist:
|
||
logger.error(f'Nextcloud: отдел с ID {directory_id} не найден')
|
||
return
|
||
NextcloudSyncService().sync_department(directory)
|
||
|
||
|
||
@shared_task
|
||
def sync_pharmacy_folder_task(pharmacy_id):
|
||
"""Асинхронное создание/обновление Group Folder аптеки."""
|
||
from apps.locations.models import Pharmacy
|
||
from apps.nextcloud_connector.services.sync_service import NextcloudSyncService
|
||
try:
|
||
pharmacy = Pharmacy.objects.get(pk=pharmacy_id)
|
||
except Pharmacy.DoesNotExist:
|
||
logger.error(f'Nextcloud: аптека с ID {pharmacy_id} не найдена')
|
||
return
|
||
NextcloudSyncService().sync_pharmacy(pharmacy)
|