Skip to content
Merged
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
13 changes: 13 additions & 0 deletions src/impl/Event/router_v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,19 @@ def get_pending_hackers_gruped(event_id: int, token: BaseToken = Depends(JWTBear
return event_service.get_pending_hackers_gruped(event_id, token)


@router.get("/{event_id}/hackers_participants_gruped_list")
def get_hackers_participants_gruped_list(event_id: int,
token: BaseToken = Depends(
JWTBearer())):
return event_service.get_hackers_participants_gruped_list(event_id, token)


@router.get("/{event_id}/hackers_participants_list")
def get_hackers_participants_list(event_id: int,
token: BaseToken = Depends(JWTBearer())):
return event_service.get_hackers_participants_list(event_id, token)


@router.get("/{event_id}/resend-accepted-mails")
def resend_accept_mails(event_id: int, token: BaseToken = Depends(JWTBearer())):
event_service.resend_mails(event_id, token)
Expand Down
83 changes: 83 additions & 0 deletions src/impl/Event/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,89 @@ def get_pending_hackers_gruped(self, event_id: int, data: BaseToken):
# Combine group and nogroup data into a dictionary
return {"groups": output_data, "nogroup": nogroup_data}

@BaseService.needs_service('HackerGroupService')
def get_hackers_participants_list(
self, event_id: int, data: BaseToken
): ##Servei per obtindre la llista de participants amb status acceptat, rechazat o pending.
if not data.check([UserType.LLEIDAHACKER]):
raise AuthenticationException("Not authorized")
# Extract hacker IDs from registered_hackers
event = self.get_by_id(event_id)
# Extract pending hackers
pending_hackers_ids = [
h.id for h in subtract_lists(
subtract_lists(event.registered_hackers,
event.accepted_hackers), event.rejected_hackers)
]
registered_hackers = event.registered_hackers
# Accepted hackers
accepted_hackers_ids = [h.id for h in event.accepted_hackers]
# Rejected hackers
rejected_hackers_ids = [h.id for h in event.rejected_hackers]

# List hackers and add status as pending, accepted or rejected.
participants_list = [
get_hacker_info(hacker, pending_hackers_ids, accepted_hackers_ids,
rejected_hackers_ids)
for hacker in registered_hackers
]
# Combine group and nogroup data into a dictionary
return {"participants": participants_list}

## This returns 2 lists: people going alone and people in groups. They will have status and food restrictions.
@BaseService.needs_service('HackerGroupService')
def get_hackers_participants_gruped_list(self, event_id: int,
data: BaseToken):
if not data.check([UserType.LLEIDAHACKER]):
raise AuthenticationException("Not authorized")
# Extract hacker IDs from registered_hackers
event = self.get_by_id(event_id)
pending_hackers_ids = [
h.id for h in subtract_lists(
subtract_lists(event.registered_hackers,
event.accepted_hackers), event.rejected_hackers)
]
# Registered hackers
registered_hackers = event.registered_hackers
# Accepted hackers
accepted_hackers_ids = [h.id for h in event.accepted_hackers]
# Rejected hackers
rejected_hackers_ids = [h.id for h in event.rejected_hackers]

event_groups = event.groups
group_users = []
for group in event_groups:
group_users.extend([hacker.id for hacker in group.members])

# List hackers and add status as pending, accepted or rejected.
output_data = []
non_group_hackers_ids = subtract_lists(
pending_hackers_ids + accepted_hackers_ids +
rejected_hackers_ids, group_users)

non_group_hackers_ids_set = set(non_group_hackers_ids)
non_group_hackers = [hacker for hacker in registered_hackers if hacker.id in non_group_hackers_ids_set]

non_group_hackers_participants = [
get_hacker_info(hacker, pending_hackers_ids, accepted_hackers_ids,
rejected_hackers_ids)
for hacker in non_group_hackers
]

for group in event_groups:
group_data = {
"name":
group.name,
"members": [
get_hacker_info(hacker, pending_hackers_ids, accepted_hackers_ids,
rejected_hackers_ids)
for hacker in group.members]
}
output_data.append(group_data)
# Retrieve pending hacker groups
# Combine group and nogroup data into a dictionary
return {"groups": output_data, "nogroup": non_group_hackers_participants}

@BaseService.needs_service(HackerService)
def confirm_assistance(self, data: AssistenceToken):
# data = get_data_from_token(token, special=True)
Expand Down
56 changes: 56 additions & 0 deletions src/utils/service_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,59 @@ def generate_user_code(length=20):

def subtract_lists(list1, list2):
return [item for item in list1 if item not in list2]


def get_hacker_status(hacker_id, pending_hackers_ids, accepted_hackers_ids,
rejected_hackers_ids):
Comment thread
Big-Lolo marked this conversation as resolved.
"""
Determine the status of a hacker based on their ID and lists of pending, accepted, and rejected hacker IDs.

Args:
hacker_id: The ID of the hacker to check.
pending_hackers_ids: List of IDs for hackers with pending status.
accepted_hackers_ids: List of IDs for hackers with accepted status.
rejected_hackers_ids: List of IDs for hackers with rejected status.

Returns:
A string representing the hacker's status ("pending", "accepted", "rejected"), or None if the ID is not found in any list.
"""
if hacker_id in pending_hackers_ids:
return "pending"
elif hacker_id in accepted_hackers_ids:
return "accepted"
elif hacker_id in rejected_hackers_ids:
return "rejected"
return None


attribute_hacker_list = [
"id",
"name",
"email",
"birthdate",
"address",
"food_restrictions",
"shirt_size",
]

def get_hacker_info(hacker, pending_hackers_ids, accepted_hackers_ids, rejected_hackers_ids):
"""
Generate a dictionary containing hacker attributes and their status.

Args:
hacker: The hacker object.
pending_hackers_ids: List of IDs for pending hackers.
accepted_hackers_ids: List of IDs for accepted hackers.
rejected_hackers_ids: List of IDs for rejected hackers.

Returns:
A dictionary with hacker attributes and their status.
"""
hacker_info = {
attr: getattr(hacker, attr)
for attr in attribute_hacker_list
}
hacker_info["status"] = get_hacker_status(
hacker.id, pending_hackers_ids, accepted_hackers_ids, rejected_hackers_ids
)
return hacker_info
Loading