mirror of
https://github.com/idrainformatica/PecFlow.git
synced 2026-06-16 12:45:42 +02:00
vboxes fix
This commit is contained in:
@@ -11,7 +11,7 @@ from sqlalchemy.orm import selectinload
|
||||
from app.core.exceptions import ConflictError, ForbiddenError, NotFoundError
|
||||
from app.models.mailbox import Mailbox
|
||||
from app.models.user import User
|
||||
from app.models.virtual_box import VirtualBox, VirtualBoxAssignment, VirtualBoxRule
|
||||
from app.models.virtual_box import VirtualBox, VirtualBoxAssignment, VirtualBoxRule, virtual_box_mailboxes
|
||||
from app.schemas.virtual_box import (
|
||||
AssignedUserResponse,
|
||||
VirtualBoxCreate,
|
||||
@@ -65,10 +65,15 @@ class VirtualBoxService:
|
||||
)
|
||||
self.db.add(rule)
|
||||
|
||||
# Associa le caselle reali
|
||||
# Associa le caselle reali (INSERT diretto sulla tabella di associazione
|
||||
# per evitare MissingGreenlet con SQLAlchemy async)
|
||||
if data.mailbox_ids:
|
||||
mailboxes = await self._load_mailboxes(data.mailbox_ids, tenant_id)
|
||||
vbox.mailboxes = mailboxes
|
||||
valid_mailboxes = await self._load_mailboxes(data.mailbox_ids, tenant_id)
|
||||
if valid_mailboxes:
|
||||
await self.db.execute(
|
||||
virtual_box_mailboxes.insert(),
|
||||
[{"virtual_box_id": vbox.id, "mailbox_id": mb.id} for mb in valid_mailboxes],
|
||||
)
|
||||
|
||||
await self.db.flush()
|
||||
return await self._load_full(vbox.id)
|
||||
@@ -136,10 +141,19 @@ class VirtualBoxService:
|
||||
if data.is_active is not None:
|
||||
vbox.is_active = data.is_active
|
||||
|
||||
# Aggiorna le caselle associate se fornito
|
||||
# Aggiorna le caselle associate se fornito (INSERT/DELETE diretti)
|
||||
if data.mailbox_ids is not None:
|
||||
mailboxes = await self._load_mailboxes(data.mailbox_ids, tenant_id)
|
||||
vbox.mailboxes = mailboxes
|
||||
await self.db.execute(
|
||||
virtual_box_mailboxes.delete().where(
|
||||
virtual_box_mailboxes.c.virtual_box_id == vbox_id
|
||||
)
|
||||
)
|
||||
valid_mailboxes = await self._load_mailboxes(data.mailbox_ids, tenant_id)
|
||||
if valid_mailboxes:
|
||||
await self.db.execute(
|
||||
virtual_box_mailboxes.insert(),
|
||||
[{"virtual_box_id": vbox_id, "mailbox_id": mb.id} for mb in valid_mailboxes],
|
||||
)
|
||||
|
||||
await self.db.flush()
|
||||
return await self._load_full(vbox_id)
|
||||
@@ -196,8 +210,18 @@ class VirtualBoxService:
|
||||
if not vbox or vbox.tenant_id != tenant_id:
|
||||
raise NotFoundError("Virtual Box")
|
||||
|
||||
mailboxes = await self._load_mailboxes(mailbox_ids, tenant_id)
|
||||
vbox.mailboxes = mailboxes
|
||||
# Sostituzione completa con INSERT/DELETE diretti
|
||||
await self.db.execute(
|
||||
virtual_box_mailboxes.delete().where(
|
||||
virtual_box_mailboxes.c.virtual_box_id == vbox_id
|
||||
)
|
||||
)
|
||||
valid_mailboxes = await self._load_mailboxes(mailbox_ids, tenant_id)
|
||||
if valid_mailboxes:
|
||||
await self.db.execute(
|
||||
virtual_box_mailboxes.insert(),
|
||||
[{"virtual_box_id": vbox_id, "mailbox_id": mb.id} for mb in valid_mailboxes],
|
||||
)
|
||||
|
||||
await self.db.flush()
|
||||
return await self._load_full(vbox_id)
|
||||
|
||||
Reference in New Issue
Block a user