Skip to content

Commit

Permalink
ac-6 : week-5: create api (FusionIIIT#1294)
Browse files Browse the repository at this point in the history
* feat: create api

* feat:create more routes
  • Loading branch information
aryan0723 authored and rush1kesh-010 committed Feb 23, 2024
1 parent c457bd4 commit c0b7894
Show file tree
Hide file tree
Showing 13 changed files with 294 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"name":"C. Smilo and Monsters","group":"Codeforces - Codeforces Round 907 (Div. 2)","url":"https://codeforces.com/problemset/problem/1891/C","interactive":false,"memoryLimit":256,"timeLimit":1000,"tests":[{"id":1702363970258,"input":"4\n4\n1 3 1 1\n4\n1 2 1 1\n6\n3 2 1 5 2 4\n2\n1 6","output":"4\n4\n11\n5"}],"testType":"single","input":{"type":"stdin"},"output":{"type":"stdout"},"languages":{"java":{"mainClass":"Main","taskClass":"CSmiloAndMonsters"}},"batch":{"id":"637d1d54-3663-425a-95e0-ed17885bba02","size":1},"srcPath":"c:\\Users\\DELL\\Documents\\Fusion\\Fusion\\C_Smilo_and_Monsters.cpp"}
18 changes: 18 additions & 0 deletions FusionIIIT/applications/department/api/permissions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from rest_framework import permissions
from django.shortcuts import get_object_or_404
from applications.academic_information.models import ExtraInfo
from applications.globals.models import User


class IsFacultyStaffOrReadOnly(permissions.BasePermission):
"""
Custom permission to only allow faculty and staff to edit it.
"""

def has_permission(self, request, view):
# Read permissions are allowed to any request,
# so we'll always allow GET, HEAD or OPTIONS requests.
if request.method in permissions.SAFE_METHODS:
return True
#only faculty and staff are able to make post request
return not request.user.holds_designations.filter(designation__name='student').exists()
62 changes: 62 additions & 0 deletions FusionIIIT/applications/department/api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
from rest_framework import serializers
from applications.department.models import Announcements
from applications.academic_information.models import Spi, Student
from applications.globals.models import (Designation, ExtraInfo,
HoldsDesignation,Faculty)
from applications.eis.models import (faculty_about, emp_research_projects)


class AnnouncementSerializer(serializers.ModelSerializer):
class Meta:
model = Announcements
fields = ('__all__')

extra_kwargs = {
'maker_id': {'required': False}
}

def create(self, validated_data):
user = self.context['request'].user
user_info = ExtraInfo.objects.all().select_related('user','department').filter(user=user).first()
validated_data['maker_id'] = user_info
return Announcements.objects.create(**validated_data)

class ExtraInfoSerializer(serializers.ModelSerializer):
class Meta:
model = ExtraInfo
fields = ('__all__')

class SpiSerializer(serializers.ModelSerializer):
class Meta:
model = Spi
fields = ('__all__')

class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ('__all__')

class DesignationSerializer(serializers.ModelSerializer):
class Meta:
model = Designation
fields = ('__all__')

class HoldsDesignationSerializer(serializers.ModelSerializer):
class Meta:
model = HoldsDesignation
fields = ('__all__')

class FacultySerializer(serializers.ModelSerializer):
class Meta:
model = Faculty
fields = ('__all__')

class faculty_aboutSerializer(serializers.ModelSerializer):
class Meta:
model = faculty_about
fields = ('__all__')

class emp_research_projectsSerializer(serializers.ModelSerializer):
class Meta:
model = emp_research_projects
fields = ('__all__')
11 changes: 11 additions & 0 deletions FusionIIIT/applications/department/api/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.conf.urls import url

from . import views

urlpatterns = [
url(r'announcements/$', views.ListCreateAnnouncementView.as_view(),name='announcements'),
url(r'dep-main/$', views.DepMainAPIView.as_view(), name='depmain'),
url(r'fac-view/$', views.FacAPIView.as_view(), name='facapi'),
url(r'staff-view/$',views.StaffAPIView.as_view(),name='staffapi'),

]
171 changes: 171 additions & 0 deletions FusionIIIT/applications/department/api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
from rest_framework import generics
from rest_framework.views import APIView
from applications.department.models import Announcements
from applications.academic_information.models import Spi, Student
from applications.globals.models import (Designation, ExtraInfo,
HoldsDesignation,Faculty)
from applications.eis.models import (faculty_about, emp_research_projects)
from .serializers import (AnnouncementSerializer,ExtraInfoSerializer,SpiSerializer,StudentSerializer,DesignationSerializer
,HoldsDesignationSerializer,FacultySerializer,faculty_aboutSerializer,emp_research_projectsSerializer)
from rest_framework.permissions import IsAuthenticated
from .permissions import IsFacultyStaffOrReadOnly
from django.http import JsonResponse
from django.shortcuts import get_object_or_404, render, redirect
from django.contrib.auth.models import User
from rest_framework.response import Response
from rest_framework import status
from django.contrib.auth.decorators import login_required
from django.urls import reverse
from datetime import date
from notification.views import department_notif


class ListCreateAnnouncementView(generics.ListCreateAPIView):
queryset = Announcements.objects.all()
serializer_class = AnnouncementSerializer
permission_classes = (IsAuthenticated, IsFacultyStaffOrReadOnly)


class DepMainAPIView(APIView):
def get(self, request):
user = request.user
usrnm = get_object_or_404(User, username=user.username)
user_info = ExtraInfo.objects.all().select_related('user', 'department').filter(user=usrnm).first()
ann_maker_id = user_info.id
user_info = ExtraInfo.objects.all().select_related('user', 'department').get(id=ann_maker_id)

fac_view = user.holds_designations.filter(designation__name='faculty').exists()
student = user.holds_designations.filter(designation__name='student').exists()
staff = user.holds_designations.filter(designation__name='staff').exists()

context = browse_announcements()
context_f = faculty()
user_designation = ""

if fac_view:
user_designation = "faculty"
elif student:
user_designation = "student"
else:
user_designation = "staff"

# serailizing the data
# announcements_serailizer = AnnouncementSerializer(context, many=True)


response_data = {
"user_designation": user_designation,
"announcements": context,
"fac_list": context_f
}


return Response(data = response_data, status=status.HTTP_200_OK)
# return Response(data = response_data, status=status.HTTP_200_OK)

class FacAPIView(APIView):
def get(self,request):
usrnm = get_object_or_404(User, username=request.user.username)
user_info = ExtraInfo.objects.all().select_related('user','department').filter(user=usrnm).first()


context = browse_announcements()


# Serialize the data into JSON formats
data = {
"user_designation": user_info.user_type,
"announcements": list(context.values()), # Assuming 'context' is a dictionary
}

return Response(data)

class StaffAPIView(APIView):
def get(self,request):
usrnm = get_object_or_404(User, username=request.user.username)
user_info = ExtraInfo.objects.all().select_related('user','department').filter(user=usrnm).first()


context = browse_announcements()


# Serialize the data into JSON formats
data = {
"user_designation": user_info.user_type,
"announcements": list(context.values()), # Assuming 'context' is a dictionary
}

return Response(data)


def browse_announcements():
"""
This function is used to browse Announcements Department-Wise
made by different faculties and admin.
@variables:
cse_ann - Stores CSE Department Announcements
ece_ann - Stores ECE Department Announcements
me_ann - Stores ME Department Announcements
sm_ann - Stores SM Department Announcements
all_ann - Stores Announcements intended for all Departments
context - Dictionary for storing all above data
"""
cse_ann = Announcements.objects.filter(department="CSE")
ece_ann = Announcements.objects.filter(department="ECE")
me_ann = Announcements.objects.filter(department="ME")
sm_ann = Announcements.objects.filter(department="SM")
all_ann = Announcements.objects.filter(department="ALL")

# serailizing the data
cse_ann_serialized = AnnouncementSerializer(cse_ann, many=True)
ece_ann_serialized = AnnouncementSerializer(ece_ann, many=True)
me_ann_serialized = AnnouncementSerializer(me_ann, many=True)
sm_ann_serialized = AnnouncementSerializer(sm_ann, many=True)
all_ann_serialized = AnnouncementSerializer(all_ann, many=True)

context = {
"cse" : cse_ann_serialized.data,
"ece" : ece_ann_serialized.data,
"me" : me_ann_serialized.data,
"sm" : sm_ann_serialized.data,
"all" : all_ann_serialized.data
}

return context

def faculty():
"""
This function is used to Return data of Faculties Department-Wise.
@variables:
cse_f - Stores data of faculties from CSE Department
ece_f - Stores data of faculties from ECE Department
me_f - Stores data of faculties from ME Department
sm_f - Stores data of faculties from ME Department
context_f - Stores all above variables in Dictionary
"""
cse_f=ExtraInfo.objects.filter(department__name='CSE',user_type='faculty')
ece_f=ExtraInfo.objects.filter(department__name='ECE',user_type='faculty')
me_f=ExtraInfo.objects.filter(department__name='ME',user_type='faculty')
sm_f=ExtraInfo.objects.filter(department__name='SM',user_type='faculty')
staff=ExtraInfo.objects.filter(user_type='staff')

# serailizing the data
cse_f = ExtraInfoSerializer(cse_f, many=True)
ece_f = ExtraInfoSerializer(ece_f, many=True)
me_f = ExtraInfoSerializer(me_f, many=True)
sm_f = ExtraInfoSerializer(sm_f, many=True)
staff = ExtraInfoSerializer(staff, many=True)


context_f = {
"cse_f" : cse_f.data,
"ece_f" : ece_f.data,
"me_f" : me_f.data,
"sm_f" : sm_f.data,
"staff" : staff.data,
}
return context_f
2 changes: 1 addition & 1 deletion FusionIIIT/applications/department/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def __str__(self):

class Announcements(models.Model):
maker_id = models.ForeignKey(ExtraInfo, on_delete=models.CASCADE)
ann_date = models.DateTimeField(default="04-04-2021")
ann_date = models.DateTimeField(auto_now_add=True)
message = models.CharField(max_length=200)
batch = models.CharField(max_length=40,default="Year-1")
department = models.CharField(max_length=40,default="ALL")
Expand Down
8 changes: 6 additions & 2 deletions FusionIIIT/applications/department/urls.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.conf.urls import url
from django.urls import include

from . import views

Expand All @@ -11,5 +12,8 @@
url(r'^staffView/$', views.staff_view, name='staff_view'),
url(r'^All_Students/(?P<bid>[0-9]+)/$', views.all_students,name='all_students'),
url(r'^approved/$', views.approved, name='approved'),
url(r'^deny/$', views.deny, name='deny')
]
url(r'^deny/$', views.deny, name='deny'),

url(r'^api/', include("applications.department.api.urls"))

]
1 change: 1 addition & 0 deletions FusionIIIT/applications/department/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ def faculty():


}
print(cse_f)
return context_f

def approved(request):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.5 on 2023-11-28 15:29

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('globals', '0001_initial'),
]

operations = [
migrations.AlterField(
model_name='extrainfo',
name='user_status',
field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50),
),
]
18 changes: 1 addition & 17 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,5 @@
version: "3.9"
services:
db:
image: postgres:13-alpine
restart: always
volumes:
- /private/var/lib/postgresql:/var/lib/postgresql/data
environment:
- PGDATA=/var/lib/postgresql/data/some_name/
- POSTGRES_DB=fusionlab
- POSTGRES_USER=fusion_admin
- POSTGRES_PASSWORD=hello123
ports:
- "5432:5432"
app:
build:
context: .
Expand All @@ -20,9 +8,5 @@ services:
volumes:
- .:/home/app
ports:
- 8000:8000
- 8000
command: /bin/bash docker-entrypoint.sh
environment:
- DB_HOST=db
depends_on:
- db
11 changes: 3 additions & 8 deletions docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
#!/bin/bash

# Apply database migrations
echo "Apply database migrations"
# python FusionIIIT/manage.py makemigrations
# python FusionIIIT/manage.py migrate

# Start server
python FusionIIIT/manage.py makemigrations &&
python FusionIIIT/manage.py migrate &&
echo "Starting server"
python FusionIIIT/manage.py runserver 0.0.0.0:8000
python FusionIIIT/manage.py runserver
Binary file added fusionlab_backup_New.sql
Binary file not shown.
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
amqp==5.0.2
arabic-reshaper==2.1.1
arabic-reshaper==3.0.0
asgiref==3.3.1
attrs==20.3.0
beautifulsoup4==4.9.3
Expand Down

0 comments on commit c0b7894

Please sign in to comment.