Skip to content

Commit

Permalink
merging with main
Browse files Browse the repository at this point in the history
  • Loading branch information
oyeniyipa committed Feb 24, 2025
2 parents 0eac981 + c0f032a commit 4c9dedf
Show file tree
Hide file tree
Showing 9 changed files with 440 additions and 63 deletions.
55 changes: 52 additions & 3 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.contrib.auth import get_user_model

from profiles.models.combined import Profile
from profiles.models.generic import Email
from profiles.models.generic import Country, Email, UkStaffLocation
from profiles.models.peoplefinder import PeopleFinderProfile
from profiles.models.staff_sso import StaffSSOProfile, StaffSSOProfileEmail

Expand Down Expand Up @@ -63,7 +63,7 @@ def combined_profile(sso_profile):

@pytest.fixture(scope="function")
def peoplefinder_profile(basic_user):
peoplefinder_profile = PeopleFinderProfile.objects.create(
return PeopleFinderProfile.objects.create(
slug="9c8d532c-3d44-40fd-a512-debd26af007f",
user=basic_user,
first_name="John",
Expand All @@ -76,4 +76,53 @@ def peoplefinder_profile(basic_user):
learning_interests=["everything"],
edited_or_confirmed_at=dt.datetime.now(),
)
return peoplefinder_profile


@pytest.fixture(autouse=True, scope="function")
def default_country():
return Country.objects.create(
reference_id="CTHMTC00260",
name="UK",
type="country",
iso_1_code="31",
iso_2_code="66",
iso_3_code="2",
)


@pytest.fixture(autouse=True, scope="function")
def uk_staff_location():
return UkStaffLocation.objects.create(
code="location_1",
name="OAB_UK",
city="London",
organisation="DBT",
building_name="OAB",
)


@pytest.fixture(autouse=True, scope="function")
def manager_user():
return User.objects.create_user(
sso_email_id="[email protected]",
is_active=True,
is_staff=False,
is_superuser=False,
)


@pytest.fixture(scope="function")
def manager(manager_user):
return PeopleFinderProfile.objects.create(
slug="734e7872-27f7-481b-9659-6632adf02268",
user=manager_user,
first_name="Jane",
last_name="Manager",
grade="G6",
workdays=["Monday", "Tuesday"],
professions=["Manager"],
additional_roles=["Line Manager"],
key_skills=["managing"],
learning_interests=["management"],
edited_or_confirmed_at=dt.datetime.now(),
)
63 changes: 63 additions & 0 deletions core/api/people_finder.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

from core import services as core_services
from core.schemas import Error
from core.schemas.profiles import (
PeopleFinderProfileRequestSchema,
PeopleFinderProfileResponseSchema,
ProfileMinimal,
)
from profiles.models.combined import Profile
from profiles.models.peoplefinder import PeopleFinderProfile
from core.schemas.peoplefinder import MinimalPeopleFinderProfile
from profiles.models import PeopleFinderProfile

Expand All @@ -26,3 +33,59 @@ def get_profile(request, slug: str):
return 404, {
"message": "Unable to find people finder profile",
}


@profile_router.put(
"{slug}", response={200: PeopleFinderProfileResponseSchema, 404: Error}
)
def update_profile(
request, slug: str, profile_request: PeopleFinderProfileRequestSchema
) -> tuple[int, PeopleFinderProfile | dict]:
try:
combined_profile = core_services.get_identity_by_id(
id=profile_request.sso_email_id
)
core_services.update_peoplefinder_profile(
profile=combined_profile,
slug=slug,
is_active=combined_profile.is_active,
became_inactive=profile_request.became_inactive,
edited_or_confirmed_at=profile_request.edited_or_confirmed_at,
login_count=profile_request.login_count,
first_name=profile_request.first_name,
last_name=profile_request.last_name,
preferred_first_name=profile_request.preferred_first_name,
pronouns=profile_request.pronouns,
name_pronunciation=profile_request.name_pronunciation,
email_address=profile_request.email_address,
contact_email_address=profile_request.contact_email_address,
primary_phone_number=profile_request.primary_phone_number,
secondary_phone_number=profile_request.secondary_phone_number,
photo=profile_request.photo,
photo_small=profile_request.photo_small,
grade=profile_request.grade,
manager_slug=profile_request.manager_slug,
not_employee=profile_request.not_employee,
workdays=profile_request.workdays,
remote_working=profile_request.remote_working,
usual_office_days=profile_request.usual_office_days,
uk_office_location_id=profile_request.uk_office_location_id,
location_in_building=profile_request.location_in_building,
international_building=profile_request.international_building,
country_id=profile_request.country_id,
professions=profile_request.professions,
additional_roles=profile_request.additional_roles,
other_additional_roles=profile_request.other_additional_roles,
key_skills=profile_request.key_skills,
other_key_skills=profile_request.other_key_skills,
learning_interests=profile_request.learning_interests,
other_learning_interests=profile_request.other_learning_interests,
fluent_languages=profile_request.fluent_languages,
intermediate_languages=profile_request.intermediate_languages,
previous_experience=profile_request.previous_experience,
)
return 200, core_services.get_profile_by_slug(slug=slug)
except Profile.DoesNotExist:
return 404, {"message": "Profile does not exist"}
except PeopleFinderProfile.DoesNotExist:
return 404, {"message": "People finder profile does not exist"}
81 changes: 80 additions & 1 deletion core/schemas/profiles.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
from ninja import Field, ModelSchema
from datetime import datetime
from typing import List, Optional
from uuid import UUID

from ninja import Field, ModelSchema, Schema

from profiles.models.combined import Profile

Expand All @@ -15,3 +19,78 @@ class Meta:
"contact_email",
"emails",
]


class PeopleFinderProfileRequestSchema(Schema):
sso_email_id: str
became_inactive: Optional[datetime] = None
edited_or_confirmed_at: Optional[datetime] = None
login_count: Optional[int] = None
first_name: Optional[str] = None
preferred_first_name: Optional[str] = None
last_name: Optional[str] = None
pronouns: Optional[str] = None
name_pronunciation: Optional[str] = None
email_address: Optional[str] = None
contact_email_address: Optional[str] = None
primary_phone_number: Optional[str] = None
secondary_phone_number: Optional[str] = None
photo: Optional[str] = None
photo_small: Optional[str] = None
grade: Optional[str] = None
manager_slug: Optional[str] = None
not_employee: Optional[bool] = None
workdays: Optional[List[str]] = None
remote_working: Optional[str] = None
usual_office_days: Optional[str] = None
uk_office_location_id: Optional[str] = None
location_in_building: Optional[str] = None
international_building: Optional[str] = None
country_id: Optional[str] = None
professions: Optional[List[str]] = None
additional_roles: Optional[List[str]] = None
other_additional_roles: Optional[str] = None
key_skills: Optional[List[str]] = None
other_key_skills: Optional[str] = None
learning_interests: Optional[List[str]] = None
other_learning_interests: Optional[str] = None
fluent_languages: Optional[str] = None
intermediate_languages: Optional[str] = None
previous_experience: Optional[str] = None


class PeopleFinderProfileResponseSchema(Schema):
became_inactive: Optional[datetime | None] = Field(alias="became_inactive")
edited_or_confirmed_at: Optional[datetime] = Field(alias="edited_or_confirmed_at")
login_count: Optional[int] = Field(alias="login_count")
first_name: Optional[str] = Field(alias="first_name")
preferred_first_name: Optional[str] = Field(alias="preferred_first_name")
last_name: Optional[str] = Field(alias="last_name")
pronouns: Optional[str] = Field(alias="pronouns")
name_pronunciation: Optional[str] = Field(alias="name_pronunciation")
email_address: Optional[str] = Field(alias="email.address")
contact_email_address: Optional[str] = Field(alias="contact_email.address")
primary_phone_number: Optional[str] = Field(alias="primary_phone_number")
secondary_phone_number: Optional[str] = Field(alias="secondary_phone_number")
photo: Optional[str] = Field(alias="photo")
photo_small: Optional[str] = Field(alias="photo_small")
grade: Optional[str] = Field(alias="grade")
manager_slug: Optional[UUID] = Field(alias="manager.slug")
not_employee: Optional[bool] = Field(alias="not_employee")
workdays: Optional[List[str]] = Field(alias="workdays")
remote_working: Optional[str] = Field(alias="remote_working")
usual_office_days: Optional[str] = Field(alias="usual_office_days")
uk_office_location_id: Optional[str] = Field(alias="uk_office_location.code")
location_in_building: Optional[str] = Field(alias="location_in_building")
international_building: Optional[str] = Field(alias="international_building")
country_id: Optional[str] = Field(alias="country.reference_id")
professions: Optional[List[str]] = Field(alias="professions")
additional_roles: Optional[List[str]] = Field(alias="additional_roles")
other_additional_roles: Optional[str] = Field(alias="other_additional_roles")
key_skills: Optional[List[str]] = Field(alias="key_skills")
other_key_skills: Optional[str] = Field(alias="other_key_skills")
learning_interests: Optional[List[str]] = Field(alias="learning_interests")
other_learning_interests: Optional[str] = Field(alias="other_learning_interests")
fluent_languages: Optional[str] = Field(alias="fluent_languages")
intermediate_languages: Optional[str] = Field(alias="intermediate_languages")
previous_experience: Optional[str] = Field(alias="previous_experience")
97 changes: 95 additions & 2 deletions core/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from profiles import services as profile_services
from profiles.models import PeopleFinderProfile
from profiles.models.combined import Profile
from profiles.models.peoplefinder import PeopleFinderProfile
from profiles.types import UNSET, Unset # noqa
from user import services as user_services

Expand All @@ -28,6 +29,15 @@ def get_identity_by_id(id: str, include_inactive: bool = False) -> Profile:
)


def get_profile_by_slug(
slug: str, include_inactive: bool = False
) -> PeopleFinderProfile:
"""
Retrieve a peoplefinder profile by its slug.
"""
return profile_services.get_by_slug(slug=slug, include_inactive=include_inactive)


def create_peoplefinder_profile(
slug: str,
sso_email_id: str,
Expand Down Expand Up @@ -63,12 +73,12 @@ def create_peoplefinder_profile(
fluent_languages: Optional[str] = None,
intermediate_languages: Optional[str] = None,
previous_experience: Optional[str] = None,
):
) -> PeopleFinderProfile:
"""
Entrypoint for peoplefinder profile creation. Triggers the creation of Peoplefinder record.
"""
user = user_services.get_by_id(sso_email_id=sso_email_id)
profile_services.create_from_peoplefinder(
return profile_services.create_from_peoplefinder(
slug=slug,
user=user,
is_active=user.is_active,
Expand Down Expand Up @@ -107,6 +117,89 @@ def create_peoplefinder_profile(
)


def update_peoplefinder_profile(
profile: Profile,
slug: str,
is_active: bool,
became_inactive: Optional[datetime] = None,
edited_or_confirmed_at: Optional[datetime] = None,
login_count: Optional[int] = None,
first_name: Optional[str] = None,
last_name: Optional[str] = None,
preferred_first_name: Optional[str | Unset] = None,
pronouns: Optional[str | Unset] = None,
name_pronunciation: Optional[str | Unset] = None,
email_address: Optional[str | Unset] = None,
contact_email_address: Optional[str | Unset] = None,
primary_phone_number: Optional[str | Unset] = None,
secondary_phone_number: Optional[str | Unset] = None,
photo: Optional[str | Unset] = None,
photo_small: Optional[str | Unset] = None,
grade: Optional[str | Unset] = None,
manager_slug: Optional[str | Unset] = None,
not_employee: Optional[bool | Unset] = None,
workdays: Optional[list[str] | Unset] = None,
remote_working: Optional[str | Unset] = None,
usual_office_days: Optional[str | Unset] = None,
uk_office_location_id: Optional[str | Unset] = None,
location_in_building: Optional[str | Unset] = None,
international_building: Optional[str | Unset] = None,
country_id: Optional[str] = None,
professions: Optional[list[str] | Unset] = None,
additional_roles: Optional[list[str] | Unset] = None,
other_additional_roles: Optional[str | Unset] = None,
key_skills: Optional[list[str] | Unset] = None,
other_key_skills: Optional[str | Unset] = None,
learning_interests: Optional[list[str] | Unset] = None,
other_learning_interests: Optional[str | Unset] = None,
fluent_languages: Optional[str | Unset] = None,
intermediate_languages: Optional[str | Unset] = None,
previous_experience: Optional[str | Unset] = None,
) -> None:
"""
Entrypoint for peoplefinder profile creation. Triggers the creation of Peoplefinder record.
"""
profile_services.update_from_peoplefinder(
profile=profile,
slug=slug,
is_active=is_active,
became_inactive=became_inactive,
edited_or_confirmed_at=edited_or_confirmed_at,
login_count=login_count,
first_name=first_name,
last_name=last_name,
preferred_first_name=preferred_first_name,
pronouns=pronouns,
name_pronunciation=name_pronunciation,
email_address=email_address,
contact_email_address=contact_email_address,
primary_phone_number=primary_phone_number,
secondary_phone_number=secondary_phone_number,
photo=photo,
photo_small=photo_small,
grade=grade,
manager_slug=manager_slug,
not_employee=not_employee,
workdays=workdays,
remote_working=remote_working,
usual_office_days=usual_office_days,
uk_office_location_id=uk_office_location_id,
location_in_building=location_in_building,
international_building=international_building,
country_id=country_id,
professions=professions,
additional_roles=additional_roles,
other_additional_roles=other_additional_roles,
key_skills=key_skills,
other_key_skills=other_key_skills,
learning_interests=learning_interests,
other_learning_interests=other_learning_interests,
fluent_languages=fluent_languages,
intermediate_languages=intermediate_languages,
previous_experience=previous_experience,
)


def create_identity(
id: str,
first_name: str,
Expand Down
Loading

0 comments on commit 4c9dedf

Please sign in to comment.