Skip to content
4 changes: 2 additions & 2 deletions api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

urlpatterns = [
path("admin/", admin.site.urls),
path("user/", include("apps.core.urls")),
path("app/", include("apps.core.urls_core")),
path("member/", include("apps.core.urls_member")),
path("mentorship/", include("apps.mentorship.urls")),
Expand All @@ -28,5 +27,6 @@
path("company-profile/", include("apps.company.urls_company")),
path("event/", include("apps.event.urls")),
path("api/", include("apps.core.urls_internal")),
path("auth/", include("apps.core.urls_auth")),
path('api/core/', include('apps.core.urls_new')),
path('api/member/', include('apps.member.urls')),
]
2 changes: 0 additions & 2 deletions apps/core/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,3 @@ class CoreConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "apps.core"

def ready(self):
import apps.core.signals
16 changes: 16 additions & 0 deletions apps/core/auth_backends.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# In a new file, e.g., core/auth_backends.py
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend


class EmailBackend(ModelBackend):
def authenticate(self, request, email=None, password=None, **kwargs):
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=email)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
return None
196 changes: 0 additions & 196 deletions apps/core/serializers.py

This file was deleted.

5 changes: 5 additions & 0 deletions apps/core/serializers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from .user_serializers import *
from .profile_serializers import *
from .talent_serializers import *
from .company_serializers import *
from .misc_serializers import *
27 changes: 27 additions & 0 deletions apps/core/serializers/company_serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# TODO | CODE CLEAN UP: SHOULD BE MOVED TO COMPANY.SERIALIZERS

from rest_framework import serializers
from apps.company.models import CompanyProfile
from apps.core.models import CustomUser


class CompanyProfileSerializer(serializers.ModelSerializer):
"""
Serializer for CompanyProfile model.
"""
current_employees = serializers.PrimaryKeyRelatedField(queryset=CustomUser.objects.all(), many=True, required=False)

class Meta:
model = CompanyProfile
fields = ["id", "company_name", "company_url", "current_employees"]
extra_kwargs = {
'company_name': {'required': False, 'allow_blank': True},
'company_url': {'required': False, 'allow_blank': True},
}

def create(self, validated_data):
if not validated_data.get("company_name") or not validated_data.get("company_url"):
raise serializers.ValidationError("Both company_name and company_url must be provided for new companies.")
company = CompanyProfile.objects.create(**validated_data)
company.current_employees.add(self.context["request"].user)
return company
20 changes: 20 additions & 0 deletions apps/core/serializers/misc_serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from rest_framework import serializers
from apps.core.models import CommunityNeeds


class CommunityNeedsSerializer(serializers.ModelSerializer):
"""
Serializer for CommunityNeeds model.
"""

class Meta:
model = CommunityNeeds
fields = '__all__'


class GenericBreakdownSerializer(serializers.Serializer):
"""
Generic serializer for breakdown data.
"""
name = serializers.CharField(read_only=True)
user_count = serializers.IntegerField()
103 changes: 103 additions & 0 deletions apps/core/serializers/profile_serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
from rest_framework import serializers
from apps.core.models import UserProfile
from apps.core.serializers.misc_serializers import CommunityNeedsSerializer
from apps.member.models import MemberProfile
from utils.urls_utils import prepend_https_if_not_empty


class BaseUserProfileSerializer(serializers.ModelSerializer):
"""
Base serializer for UserProfile model.
"""
identity_pronouns = serializers.SlugRelatedField(many=True, read_only=True, slug_field='name')

class Meta:
model = UserProfile
fields = "__all__"

def to_representation(self, instance):
ret = super().to_representation(instance)
hidden_fields = [
("identity_sexuality", "is_identity_sexuality_displayed"),
("identity_gender", "is_identity_gender_displayed"),
("identity_ethic", "is_identity_ethic_displayed"),
("identity_pronouns", "is_pronouns_displayed"),
("disability", "is_disability_displayed"),
("care_giver", "is_care_giver_displayed"),
("veteran_status", "is_veteran_status_displayed"),
]
for field, display_field in hidden_fields:
if not getattr(instance, display_field):
ret.pop(field, None)
return ret


class CustomURLField(serializers.URLField):
def to_internal_value(self, data):
"""
Convert the input value to a valid URL format if necessary.
"""
data = prepend_https_if_not_empty(data)
return super().to_internal_value(data)


class UserProfileSerializer(BaseUserProfileSerializer):
"""
Serializer for UserProfile model with additional tbc_program_interest field.
"""
tbc_program_interest = serializers.SerializerMethodField()
linkedin = CustomURLField(required=False, allow_blank=True)
github = CustomURLField(required=False, allow_blank=True)
youtube = CustomURLField(required=False, allow_blank=True)
personal = CustomURLField(required=False, allow_blank=True)

def validate(self, data):
url_fields = ['linkedin', 'github', 'youtube', 'personal']
for field in url_fields:
if field in data:
data[field] = prepend_https_if_not_empty(data[field])
return data

def get_tbc_program_interest(self, obj):
return CommunityNeedsSerializer(obj.tbc_program_interest.all(), many=True).data


class ReadOnlyUserProfileSerializer(BaseUserProfileSerializer):
"""
Read-only serializer for UserProfile model with specific fields excluded.
"""

class Meta(BaseUserProfileSerializer.Meta):
exclude = ['access_token', 'how_connection_made', 'is_terms_agree', 'marketing_events', 'marketing_jobs',
'marketing_org_updates', 'marketing_monthly_newsletter', 'marketing_identity_based_programing',
'tbc_program_interest']


class UpdateProfileAccountDetailsSerializer(serializers.ModelSerializer):
"""
Serializer for updating profile account details.
"""
first_name = serializers.CharField(source="user.first_name")
last_name = serializers.CharField(source="user.last_name")
email = serializers.EmailField(source="user.email")

class Meta:
model = MemberProfile
fields = ["first_name", "last_name", "email", "postal_code", "location", "state", "city"]

def update(self, instance, validated_data):
user_data = validated_data.pop("user", {})
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()

user_instance = instance.user
member_profile = user_instance.userprofile
for attr, value in user_data.items():
setattr(user_instance, attr, value)
setattr(member_profile, attr, value)
user_instance.save()
member_profile.save()

return instance

Loading