Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 4.2.27 on 2025-12-17 11:16

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("repositories", "0001_initial"),
]

operations = [
migrations.AddField(
model_name="repository",
name="default_branch",
field=models.CharField(default="main", max_length=100),
),
migrations.AddField(
model_name="repository",
name="dirty_at",
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name="repository",
name="last_synced_hash",
field=models.CharField(blank=True, max_length=40, null=True),
),
]
20 changes: 19 additions & 1 deletion apps/repositories/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,28 @@ class RepositorySerializer(serializers.ModelSerializer):
"""
Serializer for the Repository model.
Converts Repository instances to JSON, including all fields.
역참조 관계(contributors, commits)는 제외하여 순환 참조를 방지합니다.
"""
class Meta:
model = Repository
fields = '__all__'
fields = [
'id',
'github_id',
'name',
'full_name',
'description',
'html_url',
'stargazers_count',
'language',
'commit_count',
'created_at',
'updated_at',
'last_synced_at',
'owner',
'default_branch',
'last_synced_hash',
'dirty_at',
]

class ContributorSerializer(serializers.ModelSerializer):
"""
Expand Down
26 changes: 18 additions & 8 deletions apps/repositories/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,23 @@ class RepositoryListView(APIView):
responses={200: RepositorySerializer(many=True)},
)
def get(self, request):
user = request.user
try:
user = request.user

# user가 contributor 이고 commit_count > 0 인 repo만 조회
contributed_repos = Repository.objects.filter(
contributors__user=user,
contributors__commit_count__gt=0
).distinct().order_by("-updated_at")
# user가 contributor 이고 commit_count > 0 인 repo만 조회
contributed_repos = Repository.objects.filter(
contributors__user=user,
contributors__commit_count__gt=0
).distinct().order_by("-updated_at")

serializer = RepositorySerializer(contributed_repos, many=True)
return Response(serializer.data, status=200)
serializer = RepositorySerializer(contributed_repos, many=True)
return Response(serializer.data, status=200)
except Exception as e:
# 로깅은 Django의 기본 로깅 시스템을 사용
import logging
logger = logging.getLogger(__name__)
logger.error(f"Error fetching repositories for user {request.user.id}: {str(e)}", exc_info=True)
return Response(
{"detail": "레포지토리 목록을 불러오는 중 오류가 발생했습니다."},
status=500
)