From ac4e0b868e3ce38b19e319b7e2a5daf8fd0dd03a Mon Sep 17 00:00:00 2001 From: itti005 Date: Wed, 6 Sep 2023 12:29:15 +0530 Subject: [PATCH] added api for companies and jobs --- .../settings.py | 12 ++- .../employer_recommendation_system/urls.py | 3 +- .../registration_api/__init__.py | 0 .../registration_api/admin.py | 3 + .../registration_api/apps.py | 6 ++ .../migrations/0001_initial.py | 23 ++++++ .../migrations/0002_auto_20230831_0935.py | 60 ++++++++++++++ .../migrations/0003_auto_20230831_1046.py | 25 ++++++ .../migrations/0004_jobregistration.py | 22 +++++ .../registration_api/migrations/__init__.py | 0 .../registration_api/models.py | 19 +++++ .../registration_api/serializers.py | 23 ++++++ .../registration_api/tests.py | 3 + .../registration_api/urls.py | 40 +++++++++ .../registration_api/views.py | 82 +++++++++++++++++++ .../requests/companies.rest | 55 +++++++++++++ .../requests/job.rest | 54 ++++++++++++ 17 files changed, 428 insertions(+), 2 deletions(-) create mode 100644 employer_recommendation_system/registration_api/__init__.py create mode 100644 employer_recommendation_system/registration_api/admin.py create mode 100644 employer_recommendation_system/registration_api/apps.py create mode 100644 employer_recommendation_system/registration_api/migrations/0001_initial.py create mode 100644 employer_recommendation_system/registration_api/migrations/0002_auto_20230831_0935.py create mode 100644 employer_recommendation_system/registration_api/migrations/0003_auto_20230831_1046.py create mode 100644 employer_recommendation_system/registration_api/migrations/0004_jobregistration.py create mode 100644 employer_recommendation_system/registration_api/migrations/__init__.py create mode 100644 employer_recommendation_system/registration_api/models.py create mode 100644 employer_recommendation_system/registration_api/serializers.py create mode 100644 employer_recommendation_system/registration_api/tests.py create mode 100644 employer_recommendation_system/registration_api/urls.py create mode 100644 employer_recommendation_system/registration_api/views.py create mode 100644 employer_recommendation_system/requests/companies.rest create mode 100644 employer_recommendation_system/requests/job.rest diff --git a/employer_recommendation_system/employer_recommendation_system/settings.py b/employer_recommendation_system/employer_recommendation_system/settings.py index 1c7515b3..e1821eb4 100644 --- a/employer_recommendation_system/employer_recommendation_system/settings.py +++ b/employer_recommendation_system/employer_recommendation_system/settings.py @@ -48,7 +48,9 @@ 'spoken', 'ckeditor', 'events', - + 'registration_api', + 'rest_framework', + ] MIDDLEWARE = [ @@ -138,6 +140,14 @@ }, ] +REST_FRAMEWORK = { + 'DEFAULT_FILTER_BACKENDS': ( + 'django_filters.rest_framework.DjangoFilterBackend', + 'rest_framework.filters.SearchFilter', + 'rest_framework.filters.OrderingFilter', + ), +} + # Internationalization # https://docs.djangoproject.com/en/3.1/topics/i18n/ diff --git a/employer_recommendation_system/employer_recommendation_system/urls.py b/employer_recommendation_system/employer_recommendation_system/urls.py index a4c8210e..1450f4e9 100644 --- a/employer_recommendation_system/employer_recommendation_system/urls.py +++ b/employer_recommendation_system/employer_recommendation_system/urls.py @@ -27,7 +27,8 @@ path('',include('emp.urls')), path('',include('moodle.urls')), path('',include('accounts.urls')), - + path('api/', include('registration_api.urls')), + # ] ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) if settings.DEBUG: diff --git a/employer_recommendation_system/registration_api/__init__.py b/employer_recommendation_system/registration_api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/employer_recommendation_system/registration_api/admin.py b/employer_recommendation_system/registration_api/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/employer_recommendation_system/registration_api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/employer_recommendation_system/registration_api/apps.py b/employer_recommendation_system/registration_api/apps.py new file mode 100644 index 00000000..966d344d --- /dev/null +++ b/employer_recommendation_system/registration_api/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class RegistrationApiConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'registration_api' diff --git a/employer_recommendation_system/registration_api/migrations/0001_initial.py b/employer_recommendation_system/registration_api/migrations/0001_initial.py new file mode 100644 index 00000000..e6d92113 --- /dev/null +++ b/employer_recommendation_system/registration_api/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.19 on 2023-08-30 11:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Company', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('address', models.TextField()), + ('registration_number', models.CharField(max_length=20)), + ], + ), + ] diff --git a/employer_recommendation_system/registration_api/migrations/0002_auto_20230831_0935.py b/employer_recommendation_system/registration_api/migrations/0002_auto_20230831_0935.py new file mode 100644 index 00000000..5a8448fc --- /dev/null +++ b/employer_recommendation_system/registration_api/migrations/0002_auto_20230831_0935.py @@ -0,0 +1,60 @@ +# Generated by Django 3.2.19 on 2023-08-31 09:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('registration_api', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='company', + name='city_c', + field=models.IntegerField(blank=True, null=True, verbose_name='City (Company Headquarters)'), + ), + migrations.AddField( + model_name='company', + name='description', + field=models.TextField(blank=True, null=True, verbose_name='Description about the company'), + ), + migrations.AddField( + model_name='company', + name='email', + field=models.EmailField(blank=True, max_length=254, null=True), + ), + migrations.AddField( + model_name='company', + name='emp_contact', + field=models.CharField(default=123, max_length=17, verbose_name='Phone Number'), + preserve_default=False, + ), + migrations.AddField( + model_name='company', + name='emp_name', + field=models.CharField(default='abc', max_length=200, verbose_name='Company HR Representative Name'), + preserve_default=False, + ), + migrations.AddField( + model_name='company', + name='logo', + field=models.ImageField(blank=True, null=True, upload_to='logo/'), + ), + migrations.AddField( + model_name='company', + name='state_c', + field=models.IntegerField(blank=True, null=True, verbose_name='State (Company Headquarters)'), + ), + migrations.AlterField( + model_name='company', + name='address', + field=models.CharField(max_length=250), + ), + migrations.AlterField( + model_name='company', + name='name', + field=models.CharField(max_length=200), + ), + ] diff --git a/employer_recommendation_system/registration_api/migrations/0003_auto_20230831_1046.py b/employer_recommendation_system/registration_api/migrations/0003_auto_20230831_1046.py new file mode 100644 index 00000000..dd71a228 --- /dev/null +++ b/employer_recommendation_system/registration_api/migrations/0003_auto_20230831_1046.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.19 on 2023-08-31 10:46 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('emp', '0065_auto_20230705_1713'), + ('registration_api', '0002_auto_20230831_0935'), + ] + + operations = [ + migrations.CreateModel( + name='Registration', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='emp.company')), + ], + ), + migrations.DeleteModel( + name='Company', + ), + ] diff --git a/employer_recommendation_system/registration_api/migrations/0004_jobregistration.py b/employer_recommendation_system/registration_api/migrations/0004_jobregistration.py new file mode 100644 index 00000000..742549af --- /dev/null +++ b/employer_recommendation_system/registration_api/migrations/0004_jobregistration.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.19 on 2023-09-04 06:32 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('emp', '0065_auto_20230705_1713'), + ('registration_api', '0003_auto_20230831_1046'), + ] + + operations = [ + migrations.CreateModel( + name='jobregistration', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('Job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='emp.job')), + ], + ), + ] diff --git a/employer_recommendation_system/registration_api/migrations/__init__.py b/employer_recommendation_system/registration_api/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/employer_recommendation_system/registration_api/models.py b/employer_recommendation_system/registration_api/models.py new file mode 100644 index 00000000..e16a89e9 --- /dev/null +++ b/employer_recommendation_system/registration_api/models.py @@ -0,0 +1,19 @@ +from django.db import models +from emp.models import Company +from emp.models import Job +# class registration(models.Model): +# company = models.ForeignKey(Company, on_delete=models.CASCADE) + + +# class jobregistration(models.Model): +# Job = models.ForeignKey(Job, on_delete=models.CASCADE) + + + + + + + + + + diff --git a/employer_recommendation_system/registration_api/serializers.py b/employer_recommendation_system/registration_api/serializers.py new file mode 100644 index 00000000..a1da5d26 --- /dev/null +++ b/employer_recommendation_system/registration_api/serializers.py @@ -0,0 +1,23 @@ +# from rest_framework import serializers +# from emp.models import Company + +# class CompanySerializer(serializers.ModelSerializer): +# class Meta: +# model = Company +# fields = '__all__' + +from rest_framework import serializers +# from emp.serializers import CompanySerializer +# from emp.serializers import JobSerializer +# from .models import Registration +from emp.models import Company +from emp.models import Job +class CompanySerializer(serializers.ModelSerializer): + class Meta: + model = Company + fields = '__all__' + +class JobSerializer(serializers.ModelSerializer): + class Meta: + model = Job + fields = '__all__' \ No newline at end of file diff --git a/employer_recommendation_system/registration_api/tests.py b/employer_recommendation_system/registration_api/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/employer_recommendation_system/registration_api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/employer_recommendation_system/registration_api/urls.py b/employer_recommendation_system/registration_api/urls.py new file mode 100644 index 00000000..98da1751 --- /dev/null +++ b/employer_recommendation_system/registration_api/urls.py @@ -0,0 +1,40 @@ +# from django.urls import path +# from .views import CompanyListCreateView +# from .views import RegistrationCreateView +# from .views import ( +# RegistrationCreateView, RegistrationListView, RegistrationDetailView, +# CompanyCreateView, CompanyListView, CompanyDetailView +# ) +# urlpatterns = [ +# path('api/companies/', CompanyListCreateView.as_view(), name='company-list-create'), +# # path('api/registrations/create/', RegistrationCreateView.as_view(), name='registration-create'), + +# path('api/registrations/', RegistrationListView.as_view(), name='registration-list'), +# path('api/registrations/create/', RegistrationCreateView.as_view(), name='registration-create'), +# path('api/registrations//', RegistrationDetailView.as_view(), name='registration-detail'), + +# path('api/companies/', CompanyListView.as_view(), name='company-list'), +# path('api/companies/create/', CompanyCreateView.as_view(), name='company-create'), +# path('api/companies//', CompanyDetailView.as_view(), name='company-detail'), +# ] +from rest_framework.routers import DefaultRouter +from django.urls import path, include +from .views import CompanyViewSet +from .views import JobViewSet +router = DefaultRouter() +# router.register(r'registrations', RegistrationViewSet) +router.register(r'companies', CompanyViewSet) +router.register(r'Jobs', JobViewSet) +urlpatterns = [ + path('api/', include(router.urls)), + path('api/Jobs/', include(router.urls)), +] + + + + + + + + + diff --git a/employer_recommendation_system/registration_api/views.py b/employer_recommendation_system/registration_api/views.py new file mode 100644 index 00000000..8fffc5ba --- /dev/null +++ b/employer_recommendation_system/registration_api/views.py @@ -0,0 +1,82 @@ +# from rest_framework import generics +# from emp.models import Company +# from .models import Registration +# from .serializers import RegistrationSerializer +# from .serializers import CompanySerializer + +# class CompanyListCreateView(generics.ListCreateAPIView): +# queryset = Company.objects.all() +# serializer_class = CompanySerializer + +# class RegistrationCreateView(generics.CreateAPIView): +# queryset = Registration.objects.all() +# serializer_class = RegistrationSerializer + +# class RegistrationListView(generics.ListAPIView): +# queryset = Registration.objects.all() +# serializer_class = RegistrationSerializer + +# class RegistrationDetailView(generics.RetrieveUpdateDestroyAPIView): +# queryset = Registration.objects.all() +# serializer_class = RegistrationSerializer + +# class CompanyCreateView(generics.CreateAPIView): +# queryset = Company.objects.all() +# serializer_class = CompanySerializer + +# class CompanyListView(generics.ListAPIView): +# queryset = Company.objects.all() +# serializer_class = CompanySerializer + +# class CompanyDetailView(generics.RetrieveUpdateDestroyAPIView): +# queryset = Company.objects.all() +# serializer_class = CompanySerializer +from rest_framework import viewsets +# from .models import Registration +from rest_framework import status +from rest_framework.response import Response +from emp.models import Company +from emp.models import Job +from .serializers import CompanySerializer,JobSerializer +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import filters + + +class CompanyViewSet(viewsets.ModelViewSet): + queryset = Company.objects.all() + serializer_class = CompanySerializer + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + print(instance) + instance.status = 0 + instance.save() + + return Response(status=status.HTTP_204_NO_CONTENT) + filterset_fields = { + 'name': ['exact', 'icontains'], # Filter by exact or case-insensitive partial match + 'state_c': ['exact'], # Filter by exact match for state_c field + 'city_c': ['exact'], # Filter by exact match for city_c field + 'company_size': ['exact'], # Filter by exact match for company_size field + } + + search_fields = ['name', 'description', 'address', 'email'] + + # Enable ordering + ordering_fields = ['name', 'state_c', 'city_c', 'company_size', 'date_registered'] +# def get_queryset(self): +# return Post.objects.all() +class JobViewSet(viewsets.ModelViewSet): + queryset = Job.objects.all() + serializer_class = JobSerializer + + filterset_fields = { + 'title': ['exact', 'icontains'], # Filter by exact or case-insensitive partial match + # 'location': ['exact', 'icontains'], # Filter by exact or case-insensitive partial match + 'requirements': ['exact', 'icontains'], # Filter by exact or case-insensitive partial match + } + + + search_fields = ['title', 'location', 'requirements'] + + ordering_fields = ['title', 'location', 'requirements', 'date_posted'] + diff --git a/employer_recommendation_system/requests/companies.rest b/employer_recommendation_system/requests/companies.rest new file mode 100644 index 00000000..50efe526 --- /dev/null +++ b/employer_recommendation_system/requests/companies.rest @@ -0,0 +1,55 @@ +GET http://127.0.0.1:8000/api/api/companies HTTP/1.1 + +### +POST http://127.0.0.1:8000/api/api/companies/ HTTP/1.1 +content-type: application/json + +{ + + "name": "sogo", + "emp_name": "Raj", + "emp_contact": "7896543210", + "state_c": 1, + "city_c": 1, + "address": "kurla rd", + "email": "nusoft@gmail.com", + + "description": "xyz", + "company_size": "100_500", + "website": "http://127.0.0.1:8000/admin/emp/company/add/", + + "status": true, + "slug": "2", + "rating": 1, + "added_by": null, + "domain": [] + } + + + +### +GET http://127.0.0.1:8000/api/api/companies/1 HTTP/1.1 + +### +PATCH http://127.0.0.1:8000/api/api/companies/2/ HTTP/1.1 +Content-Type: application/json + +{ + "name": "ghi" + +} + + + + +### +DELETE http://127.0.0.1:8000/api/api/companies/2/ HTTP/1.1 + +### +GET http://127.0.0.1:8000/api/api/companies?search= HTTP/1.1 + + + + + + diff --git a/employer_recommendation_system/requests/job.rest b/employer_recommendation_system/requests/job.rest new file mode 100644 index 00000000..82740dd8 --- /dev/null +++ b/employer_recommendation_system/requests/job.rest @@ -0,0 +1,54 @@ +GET http://127.0.0.1:8000/api/api/Jobs/3/ HTTP/1.1 + +### +POST http://127.0.0.1:8000/api/api/Jobs/ HTTP/1.1 +content-type: application/json + +{ + + "title": "Supervisor", + "designation": "supervisor", + "state_job": 1, + "city_job": 1, + "description": "

Teacher

", + "salary_range_min": 1, + "salary_range_max": 2, + "status": 1, + "requirements": "

Master,ph.d in English

", + "shift_time": "9-3", + "key_job_responsibilities": "

xyz

", + "gender": "f", + "slug": "1", + "last_app_date": "2023-09-04T06:00:00Z", + "rating": 1, + "foss": "1", + "institute_type": "xyz", + "state": "1", + "city": "1", + "grade": 1, + "activation_status": 1, + "from_date": "2023-09-05", + "to_date": "2023-09-09", + "num_vacancies": 1, + "domain": 1, + "job_type": 1, + "company": 2, + "skills": [ + 1 + ] + + } + +### +GET http://127.0.0.1:8000/api/api/Jobs/ HTTP/1.1 + +### +PATCH http://127.0.0.1:8000/api/api/Jobs/4/ HTTP/1.1 +content-type: application/json + +{ + "gender":"m" +} + +### +DELETE http://127.0.0.1:8000/api/api/Jobs/3/ HTTP/1.1 \ No newline at end of file