private static async Task ProvisionTeamAsync(string accessToken, CreateFlightTeamRequest request) { // Initialize Graph client var graphClient = new GraphService(accessToken, logger); // Create the unified group var group = await CreateUnifiedGroupAsync(graphClient, request); // Create the team in the group var teamChannel = await InitializeTeamInGroupAsync(graphClient, group.Id, $"Welcome to Flight {request.FlightNumber}!"); // Copy flight log template to team files await CopyFlightLogToTeamFilesAsync(graphClient, group.Id); // Create Planner plan and tasks await CreatePreflightPlanAsync(graphClient, group.Id, teamChannel.Id, request.DepartureTime); // Create SharePoint list await CreateChallengingPassengersListAsync(graphClient, group.Id, teamChannel.Id); // Create SharePoint page if (createSharepointPage) { await CreateSharePointPageAsync(graphClient, group.Id, request.FlightNumber); } }
private static async Task <Group> CreateUnifiedGroupAsync(GraphService graphClient, CreateFlightTeamRequest request) { // Initialize members list with pilots and flight attendants var members = await graphClient.GetUserIds(request.Pilots, request.FlightAttendants); // Handle admins var admin = await graphClient.GetUserByUpn(request.Admin); var me = await graphClient.GetMe(); // Add admin and me as members members.Add($"https://graph.microsoft.com/beta/users/{admin.Id}"); members.Add($"https://graph.microsoft.com/beta/users/{me.Id}"); // Create owner list var owners = new List <string>() { $"https://graph.microsoft.com/beta/users/{admin.Id}", $"https://graph.microsoft.com/beta/users/{me.Id}" }; // Create the group var flightGroup = new Group { DisplayName = $"Flight {request.FlightNumber}", Description = request.Description, Visibility = "Private", MailEnabled = true, MailNickname = $"flight{request.FlightNumber}{GetTimestamp()}", GroupTypes = new string[] { "Unified" }, SecurityEnabled = false, Extension = new ProvisioningExtension { SharePointItemId = request.SharePointItemId }, Members = members.Distinct().ToList(), Owners = owners.Distinct().ToList() }; var createdGroup = await graphClient.CreateGroupAsync(flightGroup); logger.Info("Created group"); // Add catering liaison as a guest var guestInvite = new Invitation { InvitedUserEmailAddress = request.CateringLiaison, InviteRedirectUrl = "https://teams.microsoft.com", SendInvitationMessage = true }; var createdInvite = await graphClient.CreateGuestInvitationAsync(guestInvite); // Add guest user to team await graphClient.AddMemberAsync(createdGroup.Id, createdInvite.InvitedUser.Id); logger.Info("Added guest user"); return(createdGroup); }