Skip to content

Interest Group Restructure #2287

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,12 @@ LAUNCHPAD_ADMIN_EMAIL =
DISCORD_CLIENT_ID=xxx
DISCORD_CLIENT_SECRET=xxx
DISCORD_GUILD_ID=xxx
DISCORD_BOT_TOKEN=xxx
DISCORD_BOT_TOKEN=xxx

AWS_STORAGE_BUCKET_NAME =
AWS_S3_ACCESS_KEY_ID =
AWS_S3_SECRET_ACCESS_KEY =

MEDIAFILES_LOCATION = dev/media
STATICFILES_LOCATION = dev/static
PUBLIC_STORAGE_LOCATION = dev/public
75 changes: 67 additions & 8 deletions api/dashboard/ig/dash_ig_serializer.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,30 @@

from rest_framework import serializers

from db.task import InterestGroup


class InterestGroupSerializer(serializers.ModelSerializer):

updated_by = serializers.CharField(source='updated_by.full_name')
created_by = serializers.CharField(source='created_by.full_name')
members = serializers.SerializerMethodField()
category = serializers.ChoiceField(choices=["hardware", "coder", "creative", "manager", "others"])
category = serializers.ChoiceField(
choices=["hardware", "coder", "creative", "manager", "others"]
)
logo = serializers.SerializerMethodField()

def get_logo(self, obj):
return (
{
"original": obj.logo.url,
"thumbnail": obj.logo.thumbnail.url,
"medium": obj.logo.medium.url,
}
if obj.logo
else None
)

def get_members(self, obj):
return obj.user_ig_link_ig.all().count()

class Meta:
model = InterestGroup
fields = [
Expand All @@ -19,15 +34,55 @@ class Meta:
"code",
"category",
"members",
"updated_by",
"updated_at",
"created_by",
"short_description",
"logo",
"created_at",
]


class InterestGroupDetailSerializer(serializers.ModelSerializer):

updated_by = serializers.CharField(source="updated_by.full_name")
created_by = serializers.CharField(source="created_by.full_name")
members = serializers.SerializerMethodField()
category = serializers.ChoiceField(
choices=["hardware", "coder", "creative", "manager", "others"]
)
logo = serializers.SerializerMethodField()

def get_logo(self, obj):
return (
{
"original": obj.logo.url,
"thumbnail": obj.logo.thumbnail.url,
"medium": obj.logo.medium.url,
}
if obj.logo
else None
)

def get_members(self, obj):
return obj.user_ig_link_ig.all().count()

class Meta:
model = InterestGroup
fields = [
"id",
"name",
"icon",
"code",
"category",
"members",
"short_description",
"about",
"logo",
"cover_image",
"updated_by",
"updated_at",
"created_by",
"created_at",
]


class InterestGroupCreateUpdateSerializer(serializers.ModelSerializer):

Expand All @@ -38,6 +93,10 @@ class Meta:
"code",
"category",
"icon",
"logo",
"cover_image",
"about",
"short_description",
"created_by",
"updated_by"
"updated_by",
]
5 changes: 3 additions & 2 deletions api/dashboard/ig/dash_ig_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from utils.types import RoleType, WebHookActions, WebHookCategory
from utils.utils import CommonUtils, DiscordWebhooks
from .dash_ig_serializer import (
InterestGroupDetailSerializer,
InterestGroupSerializer,
InterestGroupCreateUpdateSerializer,
)
Expand Down Expand Up @@ -58,7 +59,7 @@ def get(self, request):
def post(self, request):
user_id = JWTUtils.fetch_user_id(request)

request_data = request.data
request_data = request.data.copy()

request_data["created_by"] = request_data["updated_by"] = user_id

Expand Down Expand Up @@ -254,7 +255,7 @@ def get(self, request, pk):
general_message="Interest Group Does Not Exist"
).get_failure_response()

serializer = InterestGroupSerializer(ig_data, many=False)
serializer = InterestGroupDetailSerializer(ig_data, many=False)

return CustomResponse(
response={"interestGroup": serializer.data}
Expand Down
11 changes: 7 additions & 4 deletions api/dashboard/learningcircle/learningcircle_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
import requests
from rest_framework.views import APIView
from db.learning_circle import LearningCircle, CircleMeetingLog, CircleMeetingAttendees
from db.user import UserInterests

# from db.user import UserInterests
from db.user import UserDomains
from utils.karma import add_karma
from utils.permission import CustomizePermission, JWTUtils
from utils.response import CustomResponse
Expand Down Expand Up @@ -518,9 +520,10 @@ def get(self, request):
).get_failure_response()
if user_id and not category and category != "all":
user_id = JWTUtils.fetch_user_id(request)
interests = UserInterests.objects.filter(user_id=user_id).first()
if interests:
category = interests.choosen_interests
category = UserDomains.objects.filter(user_id=user_id).values_list(
"domain_name", flat=True
)

if category != "all" and type(category) == str:
category = [category]
# if not no_location and not lat and not lon:
Expand Down
24 changes: 16 additions & 8 deletions api/dashboard/user/dash_user_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@

from db.organization import Department, Organization, UserOrganizationLink
from db.task import UserIgLink
from db.user import Role, User, UserRoleLink
from db.user import Role, User, UserDomains, UserRoleLink
from utils.permission import JWTUtils
from utils.types import OrganizationType, RoleType
from utils.utils import DateTimeUtils
from db.user import DynamicRole, DynamicUser
from db.user import UserInterests

# from db.user import UserInterests

BE_DOMAIN_NAME = decouple_config("BE_DOMAIN_NAME")

Expand Down Expand Up @@ -39,7 +40,8 @@ class UserSerializer(serializers.ModelSerializer):
joined = serializers.CharField(source="created_at")
roles = serializers.SerializerMethodField()
dynamic_type = serializers.SerializerMethodField()
interest_selected = serializers.SerializerMethodField()
user_domains = serializers.SerializerMethodField()
user_endgoals = serializers.SerializerMethodField()

class Meta:
model = User
Expand All @@ -55,13 +57,19 @@ class Meta:
"roles",
"profile_pic",
"dynamic_type",
"interest_selected",
"user_domains",
"user_endgoals",
]

def get_interest_selected(self, obj):
if not UserInterests.objects.filter(user=obj).exists():
return "Please select your interests"
return None
# def get_interest_selected(self, obj):
# if not UserInterests.objects.filter(user=obj).exists():
# return "Please select your interests"
# return None
def get_user_domains(self, obj):
return obj.user_domains.values_list("domain_name", flat=True)

def get_user_endgoals(self, obj):
return obj.user_endgoals.values_list("endgoal_name", flat=True)

def get_roles(self, obj):
return [
Expand Down
8 changes: 7 additions & 1 deletion api/dashboard/user/dash_user_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,13 @@ def get(self, request):
user_muid = JWTUtils.fetch_muid(request)
# user = cache.get(f"db_user_{user_muid}")
# if not user:
user = User.objects.filter(muid=user_muid).first()
user = (
User.objects.prefetch_related(
"user_domains", "user_endgoals", "user_role_link_user"
)
.filter(muid=user_muid)
.first()
)
cache.set(f"db_user_{user_muid}", user, timeout=60)
if user is None:
return CustomResponse(
Expand Down
129 changes: 92 additions & 37 deletions api/register/register_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from db.organization import Country, Department, District, Organization, State, Zone
from django.utils.decorators import method_decorator
from db.task import InterestGroup
from db.user import Role, User, UserInterests
from db.user import Role, User, UserDomains, UserEndgoals
from utils.response import CustomResponse
from utils.types import OrganizationType
from . import serializers
Expand Down Expand Up @@ -60,54 +60,109 @@ def get(self, request):
).get_success_response()


class UserInterestAPI(APIView):
class UserDomainSelectionAPI(APIView):
permission_classes = [CustomizePermission]

def put(self, request):
if not JWTUtils.is_jwt_authenticated(request):
return CustomResponse(
general_message="Unauthorized access"
).get_failure_response()
def post(self, request):
user_id = JWTUtils.fetch_user_id(request)
if not (user := cache.get(f"db_user_{user_id}")):
user = User.objects.filter(id=user_id).first()
user_interest = UserInterests.objects.filter(user=user).first()
if not user_interest:
domains = request.data.get("domains")
if not domains or not isinstance(domains, list) or not len(domains) > 0:
return CustomResponse(
general_message="User interests not found"
).get_failure_response()
serializer = serializers.UserInterestSerializer(
instance=user_interest, data=request.data, context={"user": user}
)
if serializer.is_valid():
serializer.update(user_interest, serializer.validated_data)
general_message="Domains is required."
).get_failure_response(status_code=400)
try:
UserDomains.objects.filter(user_id=user_id).delete()
UserDomains.objects.bulk_create(
[UserDomains(domain_name=domain, user_id=user_id) for domain in domains]
)
return CustomResponse(
general_message="Updated interests"
general_message="Domains selected"
).get_success_response()
return CustomResponse(general_message=serializer.errors).get_failure_response()
except Exception as e:
print("Exception during domain selection:", e)
return CustomResponse(
general_message="An unexpected error occured"
).get_failure_response(500)


class UserEndgoalSelectionAPI(APIView):
permission_classes = [CustomizePermission]

def post(self, request):
if not JWTUtils.is_jwt_authenticated(request):
return CustomResponse(
general_message="Unauthorized access"
).get_failure_response()
user_id = JWTUtils.fetch_user_id(request)
if not (user := cache.get(f"db_user_{user_id}")):
user = User.objects.filter(id=user_id).first()
user_interest = UserInterests.objects.filter(user=user).first()
if user_interest:
endgoals = request.data.get("endgoals")
if not endgoals or not isinstance(endgoals, list) or not len(endgoals) > 0:
return CustomResponse(
general_message="User interests already exist"
).get_failure_response()
serializer = serializers.UserInterestSerializer(
data=request.data, context={"user": user}
)
if serializer.is_valid():
serializer.save()
general_message="Endgoals is required."
).get_failure_response(status_code=400)
try:
UserEndgoals.objects.filter(user_id=user_id).delete()
UserEndgoals.objects.bulk_create(
[
UserEndgoals(endgoal_name=endgoal, user_id=user_id)
for endgoal in endgoals
]
)
return CustomResponse(
general_message="Added interests"
general_message="Endgoals selected"
).get_success_response()
return CustomResponse(general_message=serializer.errors).get_failure_response()
except Exception as e:
print("Exception during endgoal selection:", e)
return CustomResponse(
general_message="An unexpected error occured"
).get_failure_response(500)


# class UserInterestAPI(APIView):
# permission_classes = [CustomizePermission]

# def put(self, request):
# if not JWTUtils.is_jwt_authenticated(request):
# return CustomResponse(
# general_message="Unauthorized access"
# ).get_failure_response()
# user_id = JWTUtils.fetch_user_id(request)
# if not (user := cache.get(f"db_user_{user_id}")):
# user = User.objects.filter(id=user_id).first()
# user_interest = UserInterests.objects.filter(user=user).first()
# if not user_interest:
# return CustomResponse(
# general_message="User interests not found"
# ).get_failure_response()
# serializer = serializers.UserInterestSerializer(
# instance=user_interest, data=request.data, context={"user": user}
# )
# if serializer.is_valid():
# serializer.update(user_interest, serializer.validated_data)
# return CustomResponse(
# general_message="Updated interests"
# ).get_success_response()
# return CustomResponse(general_message=serializer.errors).get_failure_response()

# def post(self, request):
# if not JWTUtils.is_jwt_authenticated(request):
# return CustomResponse(
# general_message="Unauthorized access"
# ).get_failure_response()

# user_id = JWTUtils.fetch_user_id(request)
# if not (user := cache.get(f"db_user_{user_id}")):
# user = User.objects.filter(id=user_id).first()

# user_interest = UserInterests.objects.filter(user=user).first()
# if user_interest:
# return CustomResponse(
# general_message="User interests already exist"
# ).get_failure_response()
# serializer = serializers.UserInterestSerializer(
# data=request.data, context={"user": user}
# )
# if serializer.is_valid():
# serializer.save()
# return CustomResponse(
# general_message="Added interests"
# ).get_success_response()
# return CustomResponse(general_message=serializer.errors).get_failure_response()


class UnverifiedOrganizationCreateView(APIView):
Expand Down
Loading