diff --git a/employer_recommendation_system/emp/models.py b/employer_recommendation_system/emp/models.py index 53d0f245..f977ae51 100644 --- a/employer_recommendation_system/emp/models.py +++ b/employer_recommendation_system/emp/models.py @@ -135,6 +135,9 @@ def save(self, *args, **kwargs): obj = Discipline.objects.get(name=self.name,date_created=self.date_created) obj.slug = slugify(obj.id) obj.save() + + def __str__(self): + return self.name class Education(models.Model): degree = models.ForeignKey(Degree,null=True,on_delete=models.CASCADE) @@ -146,8 +149,8 @@ class Education(models.Model): end_year = models.IntegerField(choices=END_YEAR_CHOICES, null=True) gpa = models.CharField(max_length=10,null=True) order = models.IntegerField(default=1) #1 : Current Education 2: Pas education - # def __str__(self): - # return self.degree.name+'_'+str(self.institute) + def __str__(self): + return self.degree.name+'_'+str(self.institute) def user_directory_path(instance, filename): diff --git a/employer_recommendation_system/emp/serializers.py b/employer_recommendation_system/emp/serializers.py new file mode 100644 index 00000000..d94ffc73 --- /dev/null +++ b/employer_recommendation_system/emp/serializers.py @@ -0,0 +1,43 @@ +from rest_framework import serializers +from emp.models import Student, Skill, SkillGroup, Education + + +class EducationSerializer(serializers.ModelSerializer): + degree = serializers.CharField(source='degree.name', read_only=True) + acad_discipline = serializers.CharField(source='acad_discipline.name', read_only=True) + class Meta: + model = Education + fields = ['degree', 'acad_discipline','institute', 'start_year', 'end_year', 'gpa', 'order'] + +class SkillGroupSerializer(serializers.ModelSerializer): + class Meta: + model = SkillGroup + fields = ['name'] + +class SkillSerializer(serializers.ModelSerializer): + group = SkillGroupSerializer() + class Meta: + model = Skill + fields = ['name', 'group' ] + + +class StudentSerializer(serializers.ModelSerializer): + email = serializers.CharField(source='user.email', read_only=True) + first_name = serializers.CharField(source='user.first_name', read_only=True) + last_name = serializers.CharField(source='user.last_name', read_only=True) + skills = SkillSerializer(many=True) + education = EducationSerializer(many=True) + + class Meta: + model = Student + fields = ['email', 'first_name', 'last_name','gender' ,'phone', 'address', + 'github', 'linkedin','alternate_email', + 'profile_update_date','joining_immediate', + 'avail_for_intern', 'willing_to_relocate', + 'skills','education','notified_date'] + + #todo : add more fields here + #education, spk_institute, skills, + # resume, state, district, city + #certifications, notified_date, + # \ No newline at end of file diff --git a/employer_recommendation_system/emp/urls.py b/employer_recommendation_system/emp/urls.py index a0643ab4..a14b5d0a 100644 --- a/employer_recommendation_system/emp/urls.py +++ b/employer_recommendation_system/emp/urls.py @@ -1,6 +1,7 @@ from django.urls import path from .views import * from . import views +from .utility import StudentListView urlpatterns = [ path('',views.index,name='index'), @@ -78,4 +79,7 @@ ################### public urls path('companies',CompanyList.as_view(),name='companies'), + + ################### v2 apis + path('api/students/',StudentListView.as_view(),name='student-list-api'), ] diff --git a/employer_recommendation_system/emp/utility.py b/employer_recommendation_system/emp/utility.py index e69de29b..bfe360df 100644 --- a/employer_recommendation_system/emp/utility.py +++ b/employer_recommendation_system/emp/utility.py @@ -0,0 +1,98 @@ +from rest_framework import generics +from rest_framework.pagination import PageNumberPagination +from django_filters.rest_framework import DjangoFilterBackend +from emp.models import Student +from .serializers import StudentSerializer +from spoken.models import StudentMaster, TestAttendance + +def filter_state(queryset, value): + input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')] + spk_student_queryset = StudentMaster.objects.filter(batch__academic__state__name__in=value, student_id__in=input_spk_student_ids).values('student_id') + student_ids = [item['student_id'] for item in spk_student_queryset] + return queryset.filter(spk_student_id__in=student_ids) + +def filter_city(queryset, value): + spk_student_queryset = StudentMaster.objects.filter(batch__academic__city__name__in=value).values('student_id') + student_ids = [item['student_id'] for item in spk_student_queryset] + return queryset.filter(spk_student_id__in=student_ids) + +def filter_resume(queryset, resume_uploaded): + if resume_uploaded=='yes': + queryset = queryset.filter(resume__isnull=False) + if resume_uploaded=='no': + queryset = queryset.filter(resume__isnull=True) + return queryset + +def filter_foss(queryset, foss, grade): + input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')] + spk_student_queryset = TestAttendance.objects.filter(test__foss__foss=foss, mdlgrade__gte=grade, student_id__in=input_spk_student_ids).values('student_id') + student_ids = [item['student_id'] for item in spk_student_queryset] + return queryset.filter(spk_student_id__in=student_ids) + +def filter_institute_type(queryset, institute_types): + input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')] + spk_student_queryset = StudentMaster.objects.filter(batch__academic__institution_type__name__in=institute_types, student_id__in=input_spk_student_ids).values('student_id') + student_ids = [item['student_id'] for item in spk_student_queryset] + return queryset.filter(spk_student_id__in=student_ids) + +def filter_academic(queryset, academics): + input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')] + spk_student_queryset = StudentMaster.objects.filter(batch__academic_id__in=academics, student_id__in=input_spk_student_ids).values('student_id') + student_ids = [item['student_id'] for item in spk_student_queryset] + return queryset.filter(spk_student_id__in=student_ids) + +def filter_acad_start_year(queryset, acad_start_years): + input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')] + spk_student_queryset = StudentMaster.objects.filter(batch__year__in=acad_start_years, student_id__in=input_spk_student_ids).values('student_id') + student_ids = [item['student_id'] for item in spk_student_queryset] + return queryset.filter(spk_student_id__in=student_ids) + +class StudentListView(generics.ListAPIView): + queryset = Student.objects.all() + serializer_class = StudentSerializer + filter_backends = [DjangoFilterBackend] + pagination_class = PageNumberPagination + + def get_queryset(self): + queryset = Student.objects.all() + state = self.request.query_params.getlist('state', None) + city = self.request.query_params.getlist('city', None) + is_resume_uploaded = self.request.query_params.get('resume_uploaded', None) #yes, no + + institute_type = self.request.query_params.getlist('institute_type', None) + academic = self.request.query_params.getlist('academic', None) + acad_start_year = self.request.query_params.getlist('acad_start_year', None) + department = self.request.query_params.getlist('department', None) + degree = self.request.query_params.getlist('degree', None) + + if state: + queryset = filter_state(queryset, state) + + if city: + queryset = filter_city(queryset, city) + if is_resume_uploaded: + queryset = filter_resume(queryset, is_resume_uploaded) + + if institute_type: + queryset = filter_institute_type(queryset, institute_type) + + if academic: + queryset = filter_academic(queryset, academic) + + if acad_start_year: + queryset = filter_acad_start_year(queryset, acad_start_year) + + if department: + queryset = queryset.filter(education__acad_discipline__name__in=department) + + if degree: + queryset = queryset.filter(education__degree__name__in=degree) + + for key, value in self.request.query_params.items(): + if key.startswith('foss_'): + foss = key.split('_')[1] + grade = value + queryset = filter_foss(queryset, foss, grade) + return queryset + + diff --git a/employer_recommendation_system/employer_recommendation_system/settings.py b/employer_recommendation_system/employer_recommendation_system/settings.py index 1c7515b3..d923ded0 100644 --- a/employer_recommendation_system/employer_recommendation_system/settings.py +++ b/employer_recommendation_system/employer_recommendation_system/settings.py @@ -48,6 +48,7 @@ 'spoken', 'ckeditor', 'events', + 'rest_framework', ] @@ -226,4 +227,9 @@ GALLERY_TESTIMONIAL = GALLERY_TESTIMONIAL CONTACT_MAIL = CONTACT_MAIL -PASS_GRADE=PASS_GRADE \ No newline at end of file +PASS_GRADE=PASS_GRADE + +REST_FRAMEWORK = { + 'DEFAULT_PAGINATION_CLASS' : 'rest_framework.pagination.PageNumberPagination', + 'PAGE_SIZE' : 25 +} \ No newline at end of file