Skip to main content

Members

Information about members populates the Membership tab on the Leadership site.

Schema

The following information about members is stored.

interface participant {
id: string;
name: string;

email?: string[];
netid?: string;
classification?: string;
major?: string;
participation?: string[];
accolades?: string[] | accolade[];
teams?: team[];
}
tip

The id field for each member can be seen when accessing their personal page as follows --> https://leadership.acmutd.co/participant/<ID>. This is a uniquely auto-generated id that also serves as the document name in the participants collection on firestore.

The email field in the participant document is saved as a string[] because we store all the different emails that students have submitted in their applications. This includes both personal emails, utd emails and other emails that they may own.

Participation

The participation array contains the list of all permutations for each semester and each program that a member participated in. For example if a member was involved in ACM Research Fall 2020 and TIP Spring 2021, then the participation array would be as follows:

{
participation: ["Research F20", "TIP S21", "Research", "TIP"],
}

The information in this array is used by the filter functionality on the membership tab. This filter allows for searching for the participants that were either involved in a specific program in a given semester or for all the participants that ever participated in a given program.

Accolades

warning

The accolades feature for members is currently disabled. Although the functionality is complete, members have not been briefed on the existance of a such a feature. Additionally, setting up the integration & environment variables with the respective Projects, Research, and TIP slack workspaces is not complete.

Accolades for participants works in the same way as officers. See Officer Accolades for more information.

Teams

Each officer contains a team[] field. Each team object only contains the required fields from the team interface. This field is only used by the GraphQL API.

Aggregations

To avoid having to read all documents when populating the membership tab for the leadership site, some information is aggregated into a single document. The following information is stored in the total/participants document.

interface totalParticipants {
participants: participant[];
programs: string[];
}
caution

Only the required fields from the participant interface is used to populate the aggregation document. This reduces the size of the document and ensures that only the information required is loaded up.

To accomodate for reading only the aggregation document vs reading all the profile information about an officer, the participant interface only requires the id and name fields. The full participant interface with all fields is read back when loading up the profile page. The programs tab is the list of all permutations of programs and semesters (the union of all the participation fields in the individal member documents).