From 49d2ce56f31f3263a005b6d6cd04d8822d832d50 Mon Sep 17 00:00:00 2001
From: BoYanZh <bomingzh@sjtu.edu.cn>
Date: Sat, 19 Jun 2021 01:34:06 +0800
Subject: [PATCH] feat: check exist issue by title

---
 joint_teapot/__init__.py      |  5 ++---
 joint_teapot/__main__.py      | 17 +++++++++--------
 joint_teapot/teapot.py        |  9 +++++++++
 joint_teapot/workers/gitea.py |  6 ++++++
 4 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/joint_teapot/__init__.py b/joint_teapot/__init__.py
index 179d693..dd778ec 100644
--- a/joint_teapot/__init__.py
+++ b/joint_teapot/__init__.py
@@ -1,6 +1,5 @@
-from joint_teapot.__main__ import run
-from joint_teapot.teapot import Teapot as Teapot
+from joint_teapot.__main__ import app
 
 
 def main() -> None:
-    run()
+    app()
diff --git a/joint_teapot/__main__.py b/joint_teapot/__main__.py
index b9159db..4e0a99f 100644
--- a/joint_teapot/__main__.py
+++ b/joint_teapot/__main__.py
@@ -3,11 +3,11 @@ __version__ = "0.0.0"
 from datetime import datetime
 from typing import List
 
-import typer
+from typer import Typer, echo
 
 from joint_teapot.teapot import Teapot
 
-app = typer.Typer(add_completion=False)
+app = Typer(add_completion=False)
 teapot = Teapot()
 
 
@@ -23,7 +23,7 @@ def create_teams_and_repos_by_canvas_groups() -> None:
 
 @app.command("get-public-keys")
 def get_public_key_of_all_canvas_students() -> None:
-    typer.echo(teapot.get_public_key_of_all_canvas_students())
+    echo(teapot.get_public_key_of_all_canvas_students())
 
 
 @app.command("archieve")
@@ -36,6 +36,11 @@ def create_issue_for_repos(repo_names: List[str], title: str, body: str) -> None
     teapot.create_issue_for_repos(repo_names, title, body)
 
 
+@app.command("check-issues")
+def check_exist_issue_by_title(repo_names: List[str], title: str) -> None:
+    echo(teapot.check_exist_issue_by_title(repo_names, title))
+
+
 @app.command("get-release")
 def checkout_to_repos_by_release_name(
     repo_names: List[str], release_name: str, due: datetime = datetime(3000, 1, 1)
@@ -43,9 +48,5 @@ def checkout_to_repos_by_release_name(
     teapot.checkout_to_repos_by_release_name(repo_names, release_name, due)
 
 
-def run() -> None:
-    app()
-
-
 if __name__ == "__main__":
-    run()
+    app()
diff --git a/joint_teapot/teapot.py b/joint_teapot/teapot.py
index 082cf51..27ef028 100644
--- a/joint_teapot/teapot.py
+++ b/joint_teapot/teapot.py
@@ -53,6 +53,15 @@ class Teapot:
         for repo_name in repo_names:
             self.gitea.create_issue(repo_name, title, body)
 
+    def check_exist_issue_by_title(
+        self, repo_names: List[str], title: str
+    ) -> List[str]:
+        res = []
+        for repo_name in repo_names:
+            if not self.gitea.check_exist_issue_by_title(repo_name, title):
+                res.append(repo_name)
+        return res
+
     def checkout_to_repos_by_release_name(
         self,
         repo_names: List[str],
diff --git a/joint_teapot/workers/gitea.py b/joint_teapot/workers/gitea.py
index 4604073..ab89439 100644
--- a/joint_teapot/workers/gitea.py
+++ b/joint_teapot/workers/gitea.py
@@ -196,6 +196,12 @@ class Gitea:
             body={"title": title, "body": body, "assignees": assignees},
         )
 
+    def check_exist_issue_by_title(self, repo_name: str, title: str) -> bool:
+        for issue in self.issue_api.issue_list_issues(self.org_name, repo_name):
+            if issue.title == title:
+                return True
+        return False
+
 
 if __name__ == "__main__":
     gitea = Gitea()