public async Task <ActionResult <GroupInfo> > UpdateGroup(int groupId, [FromBody] UpdateGroupParameters parameters) { var hasEditAccess = await groupAccessesRepo.HasUserEditAccessToGroupAsync(groupId, UserId).ConfigureAwait(false); if (!hasEditAccess) { return(StatusCode((int)HttpStatusCode.Forbidden, new ErrorResponse("You have no edit access to this group"))); } var group = await groupsRepo.FindGroupByIdAsync(groupId).ConfigureAwait(false); var newName = parameters.Name ?? group.Name; var newIsManualCheckingEnabled = parameters.IsManualCheckingEnabled ?? group.IsManualCheckingEnabled; var newIsManualCheckingEnabledForOldSolutions = parameters.IsManualCheckingEnabledForOldSolutions ?? group.IsManualCheckingEnabledForOldSolutions; var newDefaultProhibitFurtherReview = parameters.DefaultProhibitFurtherReview ?? group.DefaultProhibitFutherReview; var newCanUsersSeeGroupProgress = parameters.CanStudentsSeeGroupProgress ?? group.CanUsersSeeGroupProgress; await groupsRepo.ModifyGroupAsync( groupId, newName, newIsManualCheckingEnabled, newIsManualCheckingEnabledForOldSolutions, newDefaultProhibitFurtherReview, newCanUsersSeeGroupProgress ).ConfigureAwait(false); if (parameters.IsArchived.HasValue) { await groupsRepo.ArchiveGroupAsync(groupId, parameters.IsArchived.Value).ConfigureAwait(false); if (parameters.IsArchived.Value) { var notification = new GroupIsArchivedNotification { GroupId = groupId }; await notificationsRepo.AddNotification(group.CourseId, notification, UserId); await ArchiveAllOldGroups(); } } if (parameters.IsInviteLinkEnabled.HasValue) { await groupsRepo.EnableInviteLinkAsync(groupId, parameters.IsInviteLinkEnabled.Value).ConfigureAwait(false); } return(BuildGroupInfo(await groupsRepo.FindGroupByIdAsync(groupId).ConfigureAwait(false))); }
private async Task ArchiveAllOldGroups() { var groupsIdsToArchive = await groupsArchiver.GetOldGroupsToArchive(); var bot = await usersRepo.GetUlearnBotUser(); foreach (var groupId in groupsIdsToArchive) { var group = await groupsRepo.FindGroupByIdAsync(groupId); await groupsRepo.ArchiveGroupAsync(groupId, true); var notification = new GroupIsArchivedNotification { GroupId = groupId }; await notificationsRepo.AddNotification(group.CourseId, notification, bot.Id); } }