Untitled
unknown
plain_text
a year ago
3.5 kB
9
Indexable
@type
class FieldDetailsMutation:
def _update_select_field(self, field_detail, current_user, session):
"""Handle updates for select and select-multiple fields."""
stmt = (
update(FieldDetails)
.where(FieldDetails.id == field_detail.id)
.values(
label=field_detail.label,
name=field_detail.name,
type=field_detail.type,
order=field_detail.order,
options=field_detail.options if field_detail.options else None,
updated_by=current_user,
)
)
session.execute(stmt)
def _update_text_field(self, field_detail, current_user, session):
"""Handle updates for text and textarea fields."""
field_format_value = (
field_format_mapping.get(field_detail.field_format)
if field_detail.field_format
else None
)
validation_record = (
session.query(Validation)
.filter_by(type=field_detail.validation_value)
.first()
)
if validation_record:
stmt = (
update(FieldDetails)
.where(FieldDetails.id == field_detail.id)
.values(
label=field_detail.label,
name=field_detail.name,
type=field_detail.type,
order=field_detail.order,
field_format=field_format_value,
validation_id=validation_record.id,
updated_by=current_user,
)
)
session.execute(stmt)
return True
return False
@mutation
def update_field_details(
self, info: Info, input: List[UpdateFieldDetailsInput]
) -> UpdateFieldDetailsMutationPayload:
# Use the context manager to manage the database session
try:
current_user = info.context.current_user.login
session = info.context.session
updated_field_details_ids = []
for field_detail in input:
if field_detail.type in ["select", "select-multiple"]:
self._update_select_field(field_detail, current_user, session)
elif field_detail.type in ["text", "textarea"]:
success = self._update_text_field(field_detail, current_user, session)
if not success:
return UpdateFieldDetailsMutationPayload(
field_details=[],
success=False,
message=f"Validation type '{field_detail.validation_value}' not found",
)
updated_field_details_ids.append(field_detail.id)
session.commit()
updated_field_details = (
session.query(FieldDetails)
.filter(FieldDetails.id.in_(updated_field_details_ids))
.all()
)
return UpdateFieldDetailsMutationPayload(
field_details=updated_field_details,
success=True,
message="Field details updated successfully",
)
except Exception as e:
session.rollback()
return UpdateFieldDetailsMutationPayload(
field_details=[],
success=False,
message=f"Update failed: {str(e)}",
)
Editor is loading...
Leave a Comment