|
1 | 1 | import DiscordBM |
2 | 2 | import GitHubAPI |
| 3 | +import Logging |
3 | 4 | import Shared |
4 | 5 |
|
5 | 6 | struct IssueHandler: Sendable { |
@@ -70,25 +71,42 @@ struct IssueHandler: Sendable { |
70 | 71 | let newIssue = try changes.new_issue.requireValue() |
71 | 72 | let newRepo = try changes.new_repository.requireValue() |
72 | 73 | let repo = try repo |
73 | | - let existingMessageID = try await context.messageLookupRepo.getMessageID( |
74 | | - repoID: repo.id, |
75 | | - number: self.issue.number |
76 | | - ) |
77 | | - try await self.makeReporter( |
78 | | - embedIssue: newIssue, |
79 | | - embedRepo: changes.new_repository |
80 | | - ).reportEdition( |
81 | | - requiresPreexistingReport: self.action == .labeled |
82 | | - ) |
83 | | - try await self.context.messageLookupRepo.markAsUnavailable( |
84 | | - repoID: repo.id, |
85 | | - number: self.issue.number |
86 | | - ) |
87 | | - try await self.context.messageLookupRepo.saveMessageID( |
88 | | - messageID: existingMessageID, |
89 | | - repoID: newRepo.id, |
90 | | - number: newIssue.number |
91 | | - ) |
| 74 | + do { |
| 75 | + let existingMessageID = try await context.messageLookupRepo.getMessageID( |
| 76 | + repoID: repo.id, |
| 77 | + number: self.issue.number |
| 78 | + ) |
| 79 | + context.logger.debug( |
| 80 | + "Found existing Discord message for transferred ticket", |
| 81 | + metadata: [ |
| 82 | + "messageID": .stringConvertible(existingMessageID) |
| 83 | + ] |
| 84 | + ) |
| 85 | + try await self.makeReporter( |
| 86 | + embedIssue: newIssue, |
| 87 | + embedRepo: changes.new_repository |
| 88 | + ).reportEdition( |
| 89 | + requiresPreexistingReport: self.action == .labeled |
| 90 | + ) |
| 91 | + try await self.context.messageLookupRepo.markAsUnavailable( |
| 92 | + repoID: repo.id, |
| 93 | + number: self.issue.number |
| 94 | + ) |
| 95 | + try await self.context.messageLookupRepo.saveMessageID( |
| 96 | + messageID: existingMessageID, |
| 97 | + repoID: newRepo.id, |
| 98 | + number: newIssue.number |
| 99 | + ) |
| 100 | + } catch let error as DynamoMessageRepo.Errors where error == .unavailable { |
| 101 | + context.logger.debug("The transferred ticket's Discord message is marked as unavailable") |
| 102 | + return |
| 103 | + } catch let error as DynamoMessageRepo.Errors where error == .notFound { |
| 104 | + context.logger.debug("Couldn't find a Discord message for the transferred ticket, will create a new one") |
| 105 | + try await self.makeReporter( |
| 106 | + embedIssue: newIssue, |
| 107 | + embedRepo: changes.new_repository |
| 108 | + ).reportCreation() |
| 109 | + } |
92 | 110 | } |
93 | 111 |
|
94 | 112 | func makeReporter( |
|
0 commit comments