Skip to content

Commit 7876bc8

Browse files
author
Abylkasym uulu Alidin
committed
code analyse history added to the api
1 parent 63ba949 commit 7876bc8

File tree

5 files changed

+65
-6
lines changed

5 files changed

+65
-6
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.0.8 on 2024-11-24 17:04
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('api', '0007_remove_code_space_complexity'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='code',
15+
name='analysis_result',
16+
field=models.JSONField(blank=True, default=dict),
17+
),
18+
]

time_complexity_analyzer/api/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class Code(models.Model):
2121
language = models.CharField(max_length=100, choices=LANGUAGES)
2222
time_complexity = models.CharField(max_length=100)
2323
created_at = models.DateTimeField(auto_now_add=True)
24+
analysis_result = models.JSONField(default=dict, blank=True)
2425

2526
def __str__(self):
2627
return self.code[:50] + "..." if len(self.code) > 50 else self.code

time_complexity_analyzer/api/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
class CodeSerializer(serializers.ModelSerializer):
66
class Meta:
77
model = Code
8-
fields = ('username', 'code', 'language', 'time_complexity')
8+
fields = ('id', 'username', 'code', 'language', 'time_complexity', 'created_at', 'analysis_result')
9+
910

1011
class UserSerializer(serializers.ModelSerializer):
1112
class Meta:

time_complexity_analyzer/api/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.urls import path
2-
from .views import CodeViewSet, UserViewSet, analyse_code
2+
from .views import CodeViewSet, UserViewSet, analyse_code, get_code_history
33
from rest_framework.routers import DefaultRouter
44

55

@@ -9,4 +9,5 @@
99
urlpatterns = router.urls + [
1010
path('login/', UserViewSet.as_view({'post': 'login'}), name='login'),
1111
path('api/analyse-code/', analyse_code, name='analyse-code'),
12+
path('code-history/<str:username>/', get_code_history, name='code_history'),
1213
]

time_complexity_analyzer/api/views.py

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import re
33
from django.shortcuts import render
4+
import numpy as np
45
from rest_framework import viewsets, permissions
56
from api.models import Code
67
from api.serializers import *
@@ -47,23 +48,60 @@ def analyse_code(request):
4748

4849
print("Incoming data: ", code_serializer.initial_data)
4950
if code_serializer.is_valid():
50-
code_serializer.save()
51-
user_code = code_serializer.validated_data.get('code')
52-
language = code_serializer.validated_data.get('language', 'java').lower()
51+
validated_data = code_serializer.validated_data
52+
saved_code = Code.objects.create(**validated_data)
53+
54+
user_code = validated_data.get('code')
55+
language = validated_data.get('language', 'java').lower()
5356
call_template = extract_call_template(user_code, language)
57+
5458
language_map = {
5559
'java': handle_java_code,
5660
'cpp': handle_cpp_code,
5761
'python': handle_python_code
5862
}
63+
5964
if language in language_map:
60-
return language_map[language](user_code, call_template)
65+
try:
66+
analysis_result = language_map[language](user_code, call_template)
67+
68+
if analysis_result.status_code == 200:
69+
result_data = analysis_result.data
70+
71+
# Ensure result data is JSON-serializable
72+
def ensure_serializable(obj):
73+
if isinstance(obj, np.ndarray):
74+
return obj.tolist() # Convert ndarray to list
75+
if isinstance(obj, dict):
76+
return {k: ensure_serializable(v) for k, v in obj.items()}
77+
if isinstance(obj, list):
78+
return [ensure_serializable(item) for item in obj]
79+
return obj
80+
81+
serialized_result = ensure_serializable(result_data)
82+
83+
saved_code.analysis_result = serialized_result
84+
saved_code.save()
85+
86+
return analysis_result
87+
except Exception as e:
88+
print("Error during analysis:", e)
89+
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
6190
else:
6291
return Response({"error": f"Language '{language}' not supported for analysis."}, status=status.HTTP_400_BAD_REQUEST)
6392
else:
6493
print("Validation errors: ", code_serializer.errors)
6594
return Response(code_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
6695

96+
97+
98+
99+
@api_view(['GET'])
100+
def get_code_history(request, username):
101+
codes = Code.objects.filter(username=username).order_by('-created_at')
102+
serializer = CodeSerializer(codes, many=True)
103+
return Response(serializer.data)
104+
67105
def handle_java_code(user_code, call_template):
68106
try:
69107
sizes = [10, 50, 100, 200, 500, 1000, 5000, 10000,50000, 100000]

0 commit comments

Comments
 (0)