From 05e7d89bc2e5e77fadd2c2e3c36d4397c7e5fa66 Mon Sep 17 00:00:00 2001 From: Ian Hickson Date: Thu, 15 Jun 2023 17:25:06 -0700 Subject: [PATCH] Implement IssuesService.lock/unlock --- lib/src/common/issues_service.dart | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/src/common/issues_service.dart b/lib/src/common/issues_service.dart index 3b5e013f..243c81dd 100644 --- a/lib/src/common/issues_service.dart +++ b/lib/src/common/issues_service.dart @@ -443,4 +443,30 @@ class IssuesService extends Service { TimelineEvent.fromJson, ); } + + /// Lock an issue. + /// + /// API docs: https://docs.github.com/en/rest/issues/issues?apiVersion=2022-11-28#lock-an-issue + /// + /// The `lockReason`, if specified, must be one of: `off-topic`, `too heated`, `resolved`, `spam`. + Future lock(RepositorySlug slug, int number, + {String? lockReason}) async { + String body; + if (lockReason != null) { + body = GitHubJson.encode({'lock_reason': lockReason}); + } else { + body = '{}'; + } + await github.postJSON('/repos/${slug.fullName}/issues/$number/lock', + body: body, statusCode: 204); + } + + /// Unlock an issue. + /// + /// API docs: https://docs.github.com/en/rest/issues/issues?apiVersion=2022-11-28#unlock-an-issue + Future unlock(RepositorySlug slug, int number) async { + await github.request( + 'DELETE', '/repos/${slug.fullName}/issues/$number/lock', + statusCode: 204); + } }