Skip to content

Commit 1d8dc3c

Browse files
committed
Handle validation errors and edge cases in command handlers
1 parent f6c6cb1 commit 1d8dc3c

2 files changed

Lines changed: 24 additions & 7 deletions

File tree

src/firetower/slack_app/handlers/resolved.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,25 +144,42 @@ def handle_resolved_submission(ack: Any, body: dict, view: dict, client: Any) ->
144144
return
145145

146146
captain_user = get_or_create_user_from_slack_id(captain_slack_id)
147+
if not captain_user:
148+
logger.error(
149+
"Could not resolve Slack user %s to a Firetower user", captain_slack_id
150+
)
151+
client.chat_postMessage(
152+
channel=channel_id,
153+
text="Failed to resolve the selected captain to a Firetower user.",
154+
)
155+
return
147156

148157
if severity in ("P0", "P1", "P2"):
149158
target_status = "Postmortem"
150159
else:
151160
target_status = "Done"
152161

153-
data: dict[str, Any] = {"status": target_status, "severity": severity}
154-
if captain_user:
155-
data["captain"] = captain_user.email
162+
data: dict[str, Any] = {
163+
"status": target_status,
164+
"severity": severity,
165+
"captain": captain_user.email,
166+
}
156167

157168
serializer = IncidentWriteSerializer(instance=incident, data=data, partial=True)
158-
if serializer.is_valid():
159-
serializer.save()
169+
if not serializer.is_valid():
170+
logger.error("Resolved update failed: %s", serializer.errors)
171+
client.chat_postMessage(
172+
channel=channel_id,
173+
text=f"Failed to resolve incident: {serializer.errors}",
174+
)
175+
return
176+
serializer.save()
160177

161178
client.chat_postMessage(
162179
channel=channel_id,
163180
text=(
164181
f"*{incident.incident_number} marked as {target_status}*\n"
165-
f"Severity: {severity} | Captain: {captain_user.get_full_name() if captain_user else 'Unknown'}"
182+
f"Severity: {severity} | Captain: {captain_user.get_full_name()}"
166183
),
167184
)
168185

src/firetower/slack_app/handlers/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
def get_incident_from_channel(channel_id: str) -> Incident | None:
55
link = ExternalLink.objects.filter(
66
type=ExternalLinkType.SLACK,
7-
url__contains=channel_id,
7+
url__endswith=channel_id,
88
).first()
99
if link:
1010
return link.incident

0 commit comments

Comments
 (0)