From c95411c205e8469479c01308d7afff6f2afa9744 Mon Sep 17 00:00:00 2001 From: sm4640 Date: Wed, 16 Jul 2025 17:16:35 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix:=20[#72]=20githubt?= =?UTF-8?q?oken=20model=20basemodel=20=EC=83=81=EC=86=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- users/models.py | 2 +- users/serializers.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/users/models.py b/users/models.py index e077e52..9a362c5 100644 --- a/users/models.py +++ b/users/models.py @@ -77,7 +77,7 @@ class User(BaseModel, AbstractBaseUser, PermissionsMixin): self.banner_image.delete(save=False) super().delete(*args, **kwargs) -class GithubToken(models.Model): +class GithubToken(BaseModel): user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='github_token', on_delete=models.CASCADE) access_token = models.CharField(max_length=255, blank=True, null=True) refresh_token = models.CharField(max_length=255, blank=True, null=True) diff --git a/users/serializers.py b/users/serializers.py index d2390a5..9be05d1 100644 --- a/users/serializers.py +++ b/users/serializers.py @@ -76,5 +76,5 @@ class UserMemberInfoSerializer(serializers.ModelSerializer): ] -class GitHubCodeSerializer(serializers.Serializer): +class GithubCodeSerializer(serializers.Serializer): code = serializers.CharField() \ No newline at end of file From c933c1c6035d5350f10d64b6cbd7b32274015393 Mon Sep 17 00:00:00 2001 From: sm4640 Date: Wed, 16 Jul 2025 17:17:00 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix:=20[#72]=20commits?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=EB=84=A4=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- users/views.py | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/users/views.py b/users/views.py index a192e60..82388b0 100644 --- a/users/views.py +++ b/users/views.py @@ -129,7 +129,7 @@ class GithubAPIViewSet(viewsets.ViewSet): token = self.request.user.github_token.access_token cache.set(cache_key, token, timeout=CACHE_TIMEOUT) - return Github(token) + return Github(token, per_page=COMMIT_PAGE_SIZE) @cached_property def github(self): @@ -149,10 +149,18 @@ class GithubAPIViewSet(viewsets.ViewSet): @action(detail=False, methods=["get"], url_path="personal-repos") def personal_repos(self, request): + try: + page = int(request.query_params.get("page", 1)) + except ValueError: + return Response({"is_page_int": False,"detail": "page and page_size must be integers"}, status=status.HTTP_400_BAD_REQUEST) + + if page < 1: + return Response({"is_page_gte_1": False, "detail": "page and page_size must be >= 1"}, status=status.HTTP_400_BAD_REQUEST) + user = self.github.get_user() data = [ {'full_name': r.full_name} - for r in user.get_repos() + for r in user.get_repos().get_page(page-1) ] return Response(data, status=status.HTTP_200_OK) @@ -172,13 +180,13 @@ class GithubAPIViewSet(viewsets.ViewSet): try: repo = self.github.get_repo(repo_full_name) - commits = repo.get_commits(per_page=COMMIT_PAGE_SIZE).get_page(page - 1) + commits = repo.get_commits().get_page(page-1) except Exception as e: return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) data = [ {"sha": c.sha, "commit_message": c.commit.message} - for c in commits[:COMMIT_PAGE_SIZE] + for c in commits ] return Response({ @@ -190,6 +198,7 @@ class GithubAPIViewSet(viewsets.ViewSet): @action(detail=False, methods=["get"], url_path="commit-files") def commit_files(self, request): repo_full, sha = request.query_params.get("repo"), request.query_params.get("sha") + if not (repo_full and sha): return Response({"is_query_param": False}, status=status.HTTP_400_BAD_REQUEST) @@ -215,15 +224,31 @@ class GithubAPIViewSet(viewsets.ViewSet): @action(detail=False, methods=["get"], url_path="organizations") def organizations(self, request): + try: + page = int(request.query_params.get("page", 1)) + except ValueError: + return Response({"is_page_int": False,"detail": "page and page_size must be integers"}, status=status.HTTP_400_BAD_REQUEST) + + if page < 1: + return Response({"is_page_gte_1": False, "detail": "page and page_size must be >= 1"}, status=status.HTTP_400_BAD_REQUEST) + user = self.github.get_user() - orgs = user.get_orgs() + orgs = user.get_orgs().get_page(page-1) data = {"org_name": [org.name for org in orgs]} return Response(data, status=status.HTTP_200_OK) @action(detail=False, methods=["get"], url_path="organization-repos") def organization_repos(self, request): + try: + page = int(request.query_params.get("page", 1)) + except ValueError: + return Response({"is_page_int": False,"detail": "page and page_size must be integers"}, status=status.HTTP_400_BAD_REQUEST) + + if page < 1: + return Response({"is_page_gte_1": False, "detail": "page and page_size must be >= 1"}, status=status.HTTP_400_BAD_REQUEST) + org_name = request.query_params.get("org") - repos = self.github.get_organization(org_name).get_repos() + repos = self.github.get_organization(org_name).get_repos().get_page(page-1) data = [ {'full_name': r.full_name} From 2b71a569b09548ebdeab65df009b2aa143f7c0af Mon Sep 17 00:00:00 2001 From: sm4640 Date: Wed, 16 Jul 2025 17:17:45 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix:=20[#72]=20docker?= =?UTF-8?q?=20compose=20env=ED=8C=8C=EC=9D=BC=20=EC=A7=80=EC=A0=95=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 84ca7d2..67ae62c 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -49,4 +49,4 @@ jobs: docker stop ${{ secrets.DOCKER_HUB_REPO }} docker rm -f ${{ secrets.DOCKER_HUB_REPO }} docker rmi ${{ secrets.DOCKER_HUB_USERNAME }}/${{ secrets.DOCKER_HUB_REPO }}:latest - docker compose --env-file ./colio-server/.env up -d + docker compose up -d