oncall-engine/engine/apps/api/serializers/team.py
Yulya Artyukhina e17bad4cdd
Fix calculating number of oncall users per team (#3773)
# What this PR does
Fixes calculating number of oncall users per team for `team` api
endpoint

## Checklist

- [x] Unit, integration, and e2e (if applicable) tests updated
- [x] Documentation added (or `pr:no public docs` PR label added if not
required)
- [x] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not
required)
2024-01-29 14:32:03 +00:00

59 lines
1.5 KiB
Python

import typing
from rest_framework import serializers
from apps.schedules.ical_utils import SchedulesOnCallUsers
from apps.user_management.models import Team
class TeamSerializerContext(typing.TypedDict):
schedules_with_oncall_users: SchedulesOnCallUsers
class FastTeamSerializer(serializers.ModelSerializer):
id = serializers.CharField(read_only=True, source="public_primary_key")
class Meta:
model = Team
fields = ["id", "name", "email", "avatar_url"]
class TeamSerializer(serializers.ModelSerializer):
id = serializers.CharField(read_only=True, source="public_primary_key")
class Meta:
model = Team
fields = [
"id",
"name",
"email",
"avatar_url",
"is_sharing_resources_to_all",
]
read_only_fields = [
"id",
"name",
"email",
"avatar_url",
]
class TeamLongSerializer(TeamSerializer):
context: TeamSerializerContext
number_of_users_currently_oncall = serializers.SerializerMethodField()
class Meta(TeamSerializer.Meta):
fields = TeamSerializer.Meta.fields + [
"number_of_users_currently_oncall",
]
def get_number_of_users_currently_oncall(self, obj: Team) -> int:
oncall_users = set()
for schedule, users in self.context["schedules_with_oncall_users"].items():
if schedule.team == obj:
oncall_users |= set(users)
return len(oncall_users)