Spaces:
Running
Running
from django.views.decorators.csrf import csrf_exempt | |
from django.shortcuts import render, get_object_or_404, redirect | |
from django.contrib.auth.decorators import login_required, user_passes_test | |
from django.http import JsonResponse, HttpResponse | |
from django.views.decorators.http import require_POST | |
from django.utils import timezone | |
import json | |
from .models import Bhagat, Event, Attendance, Notification, Region, BhajanCategory, Bhajan | |
from django.conf import settings | |
import requests | |
from rest_framework.decorators import api_view, permission_classes | |
from rest_framework.permissions import AllowAny | |
from rest_framework.response import Response | |
from .utils import jwt_required | |
from rest_framework_simplejwt.tokens import RefreshToken | |
def gCaptchaVerifer(token): | |
secret_key = settings.RECAPTCHA_SECRET_KEY | |
data = {"response": token, "secret": secret_key} | |
resp = requests.post("https://www.google.com/recaptcha/api/siteverify", data=data) | |
return resp.json() | |
def is_superadmin(user): | |
return user.user_type == 'superadmin' | |
def is_regionadmin(user): | |
return user.user_type == 'regionadmin' | |
def is_monitor(user): | |
return user.user_type == 'monitor' | |
def dataEntry(request): | |
# with open("./api/bhajanData.json", "r",encoding="utf-8") as f: | |
# data = json.load(f)["Prasang"] | |
# for bhajan in data: | |
# category = BhajanCategory.objects.filter(link=bhajan['CatId']).first() | |
# Bhajan.objects.create( | |
# title=bhajan['title'], | |
# title_guj=bhajan['title_guj'], | |
# category=category, | |
# lyrics=bhajan['lyrics'], | |
# isEng = bhajan['isEng'], | |
# isHnd = bhajan['isHnd'], | |
# isGer = bhajan['isGer'], | |
# isAudio = bhajan['isAudio'], | |
# audio_url=bhajan['audio_url'] if bhajan['isAudio'] else "" | |
# ) | |
# print(bhajan['title']) | |
return HttpResponse("Data Entry Page") | |
def bhajanCategoryList(request): | |
categories = BhajanCategory.objects.all() | |
bhajans = Bhajan.objects.all() | |
bhajanArr = [] | |
for bhajan in bhajans: | |
bhajanArr.append({ | |
"id": bhajan.bhajanId, | |
"title": bhajan.title, | |
"title_guj": bhajan.title_guj, | |
"category": bhajan.category.name, | |
"lyrics": bhajan.lyrics, | |
"audio_url": bhajan.audio_url, | |
"isEng": bhajan.isEng, | |
"isHnd": bhajan.isHnd, | |
"isGer": bhajan.isGer, | |
"isAudio": bhajan.isAudio | |
}) | |
categoryArr = [] | |
for category in categories: | |
categoryArr.append({ | |
"name": category.name, | |
"link": category.link | |
}) | |
lyricsBase = "https://huggingface.co/spaces/thejagstudio/MusicStore/raw/main/HTML Files/" | |
audioBase = "https://huggingface.co/spaces/thejagstudio/MusicStore/resolve/main/Bhajan Audio/" | |
return JsonResponse({"categories": categoryArr, "bhajans": bhajanArr, "lyricsBase": lyricsBase, "audioBase": audioBase}) | |
def bhajanDetail(request, id): | |
bhajan = Bhajan.objects.get(bhajanId=id) | |
if bhajan is None: | |
return JsonResponse({"error": "Bhajan not found"}) | |
else: | |
return JsonResponse({ | |
"id": bhajan.bhajanId, | |
"title": bhajan.title, | |
"title_guj": bhajan.title_guj, | |
"category": bhajan.category.name, | |
"lyrics": bhajan.lyrics, | |
"audio_url": bhajan.audio_url, | |
"isEng": bhajan.isEng, | |
"isHnd": bhajan.isHnd, | |
"isGer": bhajan.isGer, | |
"isAudio": bhajan.isAudio, | |
"lyricsBase": "https://huggingface.co/spaces/thejagstudio/MusicStore/raw/main/HTML Files/", | |
"audioBase": "https://huggingface.co/spaces/thejagstudio/MusicStore/resolve/main/Bhajan Audio/" | |
}) | |
return HttpResponse("Bhajan Detail Page") | |
def eventList(request): | |
events = Event.objects.all() | |
eventArr = [] | |
for event in events: | |
# convert date to Sept 26,2024 | 8:30 - 9:30 | |
dateFormatted = event.date.strftime("%b %d, %Y") + " | " + event.date.strftime("%I:%M %p") + " - " + event.time.strftime("%I:%M %p") | |
eventArr.append({ | |
"title": event.title, | |
"description": event.description, | |
"date": dateFormatted, | |
"day": int(event.date.strftime("%d")), | |
"month": int(event.date.strftime("%m")), | |
"year": int(event.date.strftime("%Y")), | |
"created_by": event.created_by.__str__(), | |
"region": event.region.name, | |
"is_approved": event.is_approved, | |
"color": event.color | |
}) | |
return JsonResponse({"events": eventArr}) | |
def notification(request): | |
notifications = Notification.objects.all() | |
notificationArr = [] | |
for notification in notifications: | |
notificationArr.append({ | |
"sender": notification.sender.__str__(), | |
"category": notification.sender.user_type, | |
"title": notification.title, | |
"content": notification.content, | |
"timestamp": notification.timestamp.strftime("%b %d, %Y | %I:%M %p"), | |
"notification_type": notification.notification_type | |
}) | |
return JsonResponse({"notifications": notificationArr}) | |
def send_notification(request): | |
if request.method == 'POST': | |
content = request.POST.get('content') | |
recipient_type = request.POST.get('recipient_type') | |
if recipient_type == 'all': | |
recipients = Bhagat.objects.all() | |
elif recipient_type == 'monitors': | |
recipients = Bhagat.objects.filter(user_type='monitor') | |
elif recipient_type == 'regionadmins': | |
recipients = Bhagat.objects.filter(user_type='regionadmin') | |
notification = Notification.objects.create(sender=request.user, content=content, notification_type='custom') | |
notification.recipients.set(recipients) | |
return redirect('notifications') | |
def birthday_notifications(): | |
today = timezone.now().date() | |
birthday_users = Bhagat.objects.filter(birthday__month=today.month, birthday__day=today.day) | |
for user in birthday_users: | |
notification = Notification.objects.create( | |
sender=Bhagat.objects.get(user_type='superadmin'), | |
content=f"Happy Birthday to {user.get_full_name()}!", | |
notification_type='birthday' | |
) | |
notification.recipients.set(Bhagat.objects.all()) | |
def login(request): | |
if request.method == 'POST': | |
username = request.POST.get('username') | |
password = request.POST.get('password') | |
captcha_response = request.POST.get('captcha_response') | |
# Verify captcha | |
result = gCaptchaVerifer(captcha_response) | |
if not result.get("success"): | |
return JsonResponse({ | |
"error": "Invalid Captcha", | |
"status": "error" | |
}) | |
# Authenticate user | |
user = Bhagat.objects.filter(username=username).first() | |
if user is not None and user.check_password(password): | |
# Generate tokens | |
refresh = RefreshToken.for_user(user) | |
return JsonResponse({ | |
"status": "success", | |
"tokens": { | |
"access_token": str(refresh.access_token), | |
"refresh_token": str(refresh) | |
}, | |
"user": { | |
"id": user.id, | |
"username": user.username, | |
"first_name": user.first_name, | |
"last_name": user.last_name, | |
"email": user.email, | |
"phone": user.phone, | |
"region": user.region.name, | |
"user_type": user.user_type, | |
"profile_image": user.profile_image | |
} | |
}) | |
return JsonResponse({ | |
"error": "Invalid credentials", | |
"status": "error" | |
}) | |
return JsonResponse({ | |
"error": "Invalid Method", | |
"status": "error" | |
}) | |
def logout(request): | |
if request.method == 'POST': | |
refresh_token = request.POST.get('refresh_token') | |
if not refresh_token: | |
return JsonResponse({ | |
'error': 'Refresh token is required', | |
'status': 'error' | |
}) | |
else: | |
try: | |
refresh = RefreshToken(refresh_token) | |
refresh.blacklist() | |
return JsonResponse({ | |
'status': 'success', | |
'message': 'Successfully logged out' | |
}) | |
except TokenError: | |
return JsonResponse({ | |
"error": "Invalid token", | |
"status": "error" | |
}) | |
return JsonResponse({ | |
"status": "error", | |
"error": "Invalid Method" | |
}) | |
def get_user_profile(request): | |
try: | |
user = request.user | |
return JsonResponse({ | |
"status": "success", | |
"user": { | |
"id": user.id, | |
"username": user.username, | |
"first_name": user.first_name, | |
"last_name": user.last_name, | |
"email": user.email, | |
"phone": user.phone, | |
"region": user.region.name, | |
"user_type": user.user_type, | |
"profile_image": user.profile_image | |
} | |
}) | |
except Exception as e: | |
return JsonResponse({ | |
"status": "error", | |
"error": str(e) | |
}) | |
def profile_updater(request): | |
if request.method == 'POST': | |
try: | |
user = request.user | |
first_name = request.POST.get('first_name') | |
if first_name: | |
user.first_name = first_name | |
last_name = request.POST.get('last_name') | |
if last_name: | |
user.last_name = last_name | |
email = request.POST.get('email') | |
if email: | |
user.email = email | |
phone = request.POST.get('phone') | |
if phone: | |
user.phone = phone | |
region_name = request.POST.get('region') | |
if region_name: | |
user.region = Region.objects.get(name=region_name) | |
birth_date = request.POST.get('birth_date') | |
if birth_date: | |
user.birthday = birth_date | |
street_name = request.POST.get('street_name') | |
if street_name: | |
user.streetName = street_name | |
pincode = request.POST.get('pincode') | |
if pincode: | |
user.pincode = pincode | |
city = request.POST.get('city') | |
if city: | |
user.city = city | |
state = request.POST.get('state') | |
if state: | |
user.state = state | |
country = request.POST.get('country') | |
if country: | |
user.country = country | |
profile_image = request.POST.get('profile_image') | |
if profile_image: | |
user.profile_image = profile_image | |
user.save() | |
return JsonResponse({ | |
"status": "success", | |
"message": "Profile updated successfully" | |
}) | |
except Exception as e: | |
return JsonResponse({ | |
"status": "error", | |
"error": str(e) | |
}) | |
else: | |
user = request.user | |
data= { | |
"first_name": user.first_name, | |
"last_name": user.last_name, | |
"email": user.email, | |
"phone": user.phone, | |
"region": user.region.name, | |
"birth_date": user.birthday, | |
"street_name": user.streetName, | |
"pincode": user.pincode, | |
"city": user.city, | |
"state": user.state, | |
"country": user.country, | |
"profile_image": user.profile_image | |
} | |
return JsonResponse({ | |
"status": "success", | |
"user": data | |
}) | |
def bhaktoList(request): | |
current_user = request.user | |
bhaktos = Bhagat.objects.filter(assigned_to=current_user).all() | |
bhaktoArr = [] | |
for bhakto in bhaktos: | |
bhaktoArr.append({ | |
"id": bhakto.id, | |
"first_name": bhakto.first_name, | |
"last_name": bhakto.last_name, | |
"region": bhakto.region.name, | |
"user_type": bhakto.user_type, | |
"profile_image": bhakto.profile_image | |
}) | |
return JsonResponse({"bhaktos": bhaktoArr}) |