public async Task <IActionResult> GetCardsAsync([FromBody] GetCardsRequest request) { try { if (request.ExcludedCardIds == null) { throw new ArgumentException("request.ExcludedCardIds is null"); } if (request.ExcludedTagIds == null) { throw new ArgumentException("request.ExcludedTagIds is null"); } var currentUserId = await UserServices.UserIdFromContextAsync(HttpContext, userManager); var cardsToDownload = request.CurrentCardCount == 0 ? 1 : (request.LearnModeIsUnknown ? 30 : 5); //loading cards to repeat is much more time consuming var applicationRequest = new GetCardsToLearn.Request(currentUserId, request.DeckId, request.LearnModeIsUnknown, request.ExcludedCardIds, request.ExcludedTagIds, cardsToDownload); var applicationResult = await new GetCardsToLearn(dbContext).RunAsync(applicationRequest); var user = await userManager.GetUserAsync(HttpContext.User); var result = new GetCardsViewModel(applicationResult, localizer, user.UserName); return(Ok(result)); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> Update(Guid imageId, [FromBody] UpdateRequestModel request) { if (request.ImageName == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["NameNotSet"].Value, false, localizer))); } if (request.Description == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["DescriptionNotSet"].Value, false, localizer))); } if (request.Source == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["SourceNotSet"].Value, false, localizer))); } if (request.VersionDescription == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["VersionDescriptionNotSet"].Value, false, localizer))); } try { var user = await userManager.GetUserAsync(HttpContext.User); var applicationRequest = new UpdateImageMetadata.Request(imageId, user, request.ImageName, request.Source, request.Description, request.VersionDescription); await new UpdateImageMetadata(dbContext, localizer).RunAsync(applicationRequest); var toastText = $"{localizer["SuccessfullyUpdatedImage"]} '{request.ImageName}'"; return(Ok(new { ToastText = toastText, ToastTitle = localizer["Success"] })); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> RunQuery([FromBody] RunQueryRequest request) { try { CheckRunQueryRequestValidity(request); var user = await userManager.GetUserAsync(HttpContext.User); var userId = user == null ? Guid.Empty : user.Id; var userName = user == null ? null : user.UserName; var excludedTags = (request.ExcludedTags.Count() == 1 && request.ExcludedTags.First() == allTagsFakeGuid) ? null : request.ExcludedTags; var applicationRequest = new SearchCards.Request(request.Deck, request.DeckIsInclusive, request.Heap, request.PageNo, request.PageSize, request.RequiredText, request.RequiredTags, excludedTags, request.Visibility, request.RatingFilteringMode, request.RatingFilteringValue, request.NotificationFiltering); var applicationResult = new SearchCards(dbContext).Run(applicationRequest, userId); var result = new RunQueryViewModel(applicationResult, userName, localizer, decksControllerLocalizer); return(base.Ok(result)); } catch (SearchResultTooBigForRatingException) { return(ControllerError.BadRequest(localizer["SearchTooBigForRatingFiltering"].Value, this)); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> PostCardOfUser([FromBody] PostCardOfUserRequest card) { if (card.FrontSide == null) { return(ControllerError.BadRequest(localizer["InvalidCardEmptyFrontSide"].Value, this)); } if (card.BackSide == null) { card.BackSide = ""; } if (card.AdditionalInfo == null) { card.AdditionalInfo = ""; } if (card.FrontSideImageList == null) { return(ControllerError.BadRequest("Invalid input: card.FrontSideImageList == null", this)); } if (card.BackSideImageList == null) { return(ControllerError.BadRequest("Invalid input: card.BackSideImageList == null", this)); } if (card.AdditionalInfoImageList == null) { return(ControllerError.BadRequest("Invalid input: card.AdditionalInfoImageList == null", this)); } if (card.UsersWithVisibility == null) { return(ControllerError.BadRequest("Invalid input: card.UsersWithVisibility == null", this)); } if (card.Tags == null) { return(ControllerError.BadRequest("Invalid input: card.Tags == null", this)); } try { var user = await userManager.GetUserAsync(HttpContext.User); var versionDescription = localizer["InitialCardVersionCreation"].Value; var request = new CreateCard.Request(user, card.FrontSide, card.FrontSideImageList, card.BackSide, card.BackSideImageList, card.AdditionalInfo, card.AdditionalInfoImageList, card.LanguageId, card.Tags, card.UsersWithVisibility, versionDescription); var cardId = await new CreateCard(dbContext).RunAsync(request, localizer); if (card.AddToDeck != Guid.Empty) { await new AddCardInDeck(dbContext).RunAsync(card.AddToDeck, cardId); } return(Ok()); } catch (RequestInputException e) { return(ControllerError.BadRequest(e.Message, this)); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public IActionResult GetImageList([FromBody] GetImageListRequest request) { try { var result = new GetImageList(dbContext).Run(request.PageSize, request.PageNo, request.Filter ?? ""); return(Ok(new GetImageListViewModel(result, localizer))); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> UpdateCard(Guid cardId, [FromBody] UpdateCardRequest card) { if (card.FrontSide == null) { return(ControllerError.BadRequest(localizer["InvalidCardEmptyFrontSide"].Value, this)); } if (card.BackSide == null) { card.BackSide = ""; } if (card.AdditionalInfo == null) { card.AdditionalInfo = ""; } if (card.FrontSideImageList == null) { return(ControllerError.BadRequest("Invalid input: card.FrontSideImageList == null", this)); } if (card.BackSideImageList == null) { return(ControllerError.BadRequest("Invalid input: card.BackSideImageList == null", this)); } if (card.AdditionalInfoImageList == null) { return(ControllerError.BadRequest("Invalid input: card.AdditionalInfoImageList == null", this)); } if (card.UsersWithVisibility == null) { return(ControllerError.BadRequest("Invalid input: card.UsersWithVisibility == null", this)); } if (card.Tags == null) { return(ControllerError.BadRequest("Invalid input: card.Tags == null", this)); } if (string.IsNullOrWhiteSpace(card.VersionDescription)) { return(ControllerError.BadRequest(localizer["InvalidCardEmptyVersionDescription"].Value, this)); } try { var user = await userManager.GetUserAsync(HttpContext.User); var request = new UpdateCard.Request(cardId, user, card.FrontSide, card.FrontSideImageList, card.BackSide, card.BackSideImageList, card.AdditionalInfo, card.AdditionalInfoImageList, card.LanguageId, card.Tags, card.UsersWithVisibility, card.VersionDescription); await new UpdateCard(dbContext).RunAsync(request, localizer); return(Ok()); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public IActionResult GetImage(Guid imageId, int size) { try { var blob = new GetImage(dbContext).Run(new GetImage.Request(imageId, size)); var content = new MemoryStream(blob); return(base.File(content, "APPLICATION/octet-stream", "noname")); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> ImageVersions(Guid imageId) { try { var appResults = await new GetImageVersions(dbContext, localizer).RunAsync(imageId); var result = appResults.Select(appResult => new ImageVersion(appResult, localizer)); return(Ok(result)); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
async public Task <IActionResult> Create([FromBody] CreateRequest request) { try { var user = await userManager.GetUserAsync(HttpContext.User); var appRequest = new CreateDeck.Request(user, request.Description == null ? "" : request.Description, request.HeapingAlgorithmId); return(Ok(await new CreateDeck(dbContext).RunAsync(appRequest))); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> GetCardForEdit(Guid cardId) { try { var userId = await UserServices.UserIdFromContextAsync(HttpContext, userManager); var result = new GetCardForEdit(dbContext).RunAsync(new GetCardForEdit.Request(userId, cardId)); return(Ok(new GetCardForEditViewModel(await result, localizer))); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> GetImageMetadata(Guid imageId) { try { var appRequest = new GetImageInfo(dbContext, localizer); var result = await appRequest.RunAsync(imageId); return(Ok(new GetImageMetadataViewModel(result.Name, result.Source, result.Description))); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> DeleteCards([FromBody] DeleteCardsRequest request) { try { var user = await userManager.GetUserAsync(HttpContext.User); var appRequest = new DeleteCards.Request(user, request.CardIds); await new DeleteCards(dbContext, localizer).RunAsync(appRequest); return(Ok()); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> UnregisterForNotifications([FromBody] UnregisterForNotificationsRequest request) { try { var userId = await UserServices.UserIdFromContextAsync(HttpContext, userManager); var appRequest = new RemoveCardNotifications.Request(userId, request.CardIds); await new RemoveCardNotifications(dbContext).RunAsync(appRequest); return(Ok()); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> MoveCardToHeap(Guid deckId, Guid cardId, int targetHeap, bool manualMove) { try { var userId = await UserServices.UserIdFromContextAsync(HttpContext, userManager); var request = new MoveCardToHeap.Request(userId, deckId, cardId, targetHeap, manualMove); await new MoveCardToHeap(dbContext).RunAsync(request); return(Ok()); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> SetCardRating(Guid cardId, int rating) { try { var user = await userManager.GetUserAsync(HttpContext.User); var request = new SetCardRating.Request(user, cardId, rating); await new SetCardRating(dbContext).RunAsync(request); return(Ok()); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> CardVersions(Guid cardId) { try { var userId = await UserServices.UserIdFromContextAsync(HttpContext, userManager); var appResults = await new GetCardVersions(dbContext, localizer).RunAsync(cardId, userId); var result = appResults.Select(appResult => new CardVersion(appResult, localizer)); return(Ok(result)); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> UserDecks() { try { var user = await userManager.GetUserAsync(HttpContext.User); var userId = (user == null) ? Guid.Empty : user.Id; var decks = new GetUserDecksWithTags(dbContext).Run(userId); var result = decks.Select(deck => new UserDecksViewModel(deck.DeckId, deck.Description, DisplayServices.ShowDebugInfo(user), deck.Tags, localizer)); return(base.Ok(result)); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> UploadImage([FromForm] UploadImageRequest request) { if (request.Name == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["NameNotSet"].Value, false, localizer))); } if (request.Description == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["DescriptionNotSet"].Value, false, localizer))); } if (request.Source == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["SourceNotSet"].Value, false, localizer))); } if (request.File == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["FileNotSet"].Value, false, localizer))); } try { var user = await userManager.GetUserAsync(HttpContext.User); if (user == null) { return(BadRequest(UploadImageResultViewModel.Failure(localizer["NeedLogin"].Value, false, localizer))); } using (var stream = request.File.OpenReadStream()) using (var reader = new BinaryReader(stream)) { var fileContent = reader.ReadBytes((int)request.File.Length); var applicationRequest = new StoreImage.Request(user, request.Name, request.Description, request.Source, request.File.ContentType, fileContent); var id = await new StoreImage(dbContext, localizer).RunAsync(applicationRequest); if (id == Guid.Empty) { throw new ApplicationException("Stored image with empty GUID as id"); } return(Ok(UploadImageResultViewModel.Success(localizer["ImageSavedWithName"].Value + $" '{applicationRequest.Name}'", localizer))); } } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> RemoveCardFromDeck(Guid deckId, Guid cardId) { try { var currentUserId = await UserServices.UserIdFromContextAsync(HttpContext, userManager); var query = new RemoveCardFromDeck.Request(currentUserId, deckId, cardId); var applicationResult = await new RemoveCardFromDeck(dbContext).RunAsync(query); var frontSide = $" '{applicationResult.FrontSideText.Truncate(30, true)}'"; var mesgBody = localizer["CardWithFrontSideHead"] + frontSide + ' ' + localizer["RemovedFromDeck"] + ' ' + applicationResult.DeckName; var result = new { MessageTitle = localizer["Success"].Value, MessageBody = mesgBody }; return(base.Ok(result)); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> Delete(Guid imageId, [FromBody] DeleteRequest request) { try { if (request.DeletionDescription == null) { return(BadRequest(UploadImageResultViewModel.Failure("DeletionDescriptionNotSet", false, localizer))); } var user = await userManager.GetUserAsync(HttpContext.User); var applicationRequest = new DeleteImage.Request(user, imageId, request.DeletionDescription); var imageName = await new DeleteImage(dbContext, localizer).RunAsync(applicationRequest); var toastText = $"{localizer["SuccessfullyDeletedImage"]} '{imageName}'"; return(Ok(new { ToastText = toastText, ToastTitle = localizer["Success"] })); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> GetAllAsync() { try { var user = await userManager.GetUserAsync(HttpContext.User); if (user == null) { return(Ok(new GetAllViewModel(null, false, 0, new GetAllDeckViewModel[0], DateTime.UtcNow))); } var userDecks = new GetDecksWithLearnCounts(dbContext).Run(user.Id); var anythingToLearn = userDecks.Any(deck => deck.ExpiredCardCount > 0 || deck.UnknownCardCount > 0); var cardCount = userDecks.Sum(deck => deck.CardCount); return(Ok(new GetAllViewModel(user.UserName, anythingToLearn, cardCount, userDecks.Select(deck => new GetAllDeckViewModel(deck)), DateTime.UtcNow))); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> GetImageInfo([FromBody] GetImageInfoRequest request) { if (request.ImageName == null) { return(BadRequest(new { ToastText = localizer["PleaseEnterAnImageName"].Value, ShowStatus = false, ToastTitle = localizer["Failure"].Value })); } try { var appResult = await new GetImageInfo(dbContext, localizer).RunAsync(request.ImageName); var popoverInfo = localizer["ImageUploader"] + ' ' + appResult.Owner.UserName + Environment.NewLine + localizer["ImageName"] + ' ' + appResult.Name + Environment.NewLine + localizer["Description"] + ' ' + appResult.Description + Environment.NewLine + localizer["Source"] + ' ' + appResult.Source + Environment.NewLine + localizer["UsedIn"] + ' ' + appResult.CardCount + localizer["Cards"]; return(Ok(new GetImageInfoViewModel(appResult.ImageId, popoverInfo))); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> SetCardNotificationRegistration(Guid cardId, bool notif) { try { var userId = await UserServices.UserIdFromContextAsync(HttpContext, userManager); if (notif) { var request = new AddCardNotifications.Request(userId, new[] { cardId }); await new AddCardNotifications(dbContext).RunAsync(request); } else { var request = new RemoveCardNotifications.Request(userId, new[] { cardId }); await new RemoveCardNotifications(dbContext).RunAsync(request); } return(Ok()); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> GetUsers([FromBody] GetUsersRequest request) { if (request.Filter == null) { return(BadRequest(localizer["FilterSet"].Value)); } try { var user = await userManager.GetUserAsync(HttpContext.User); if (user == null) { return(BadRequest(localizer["NeedLogin"].Value)); } var appRequest = new GetAllUsers.Request(user, request.PageSize, request.PageNo, request.Filter); var result = await new GetAllUsers(dbContext, userManager).RunAsync(appRequest); return(Ok(new GetUsersViewModel(result))); } catch (Exception e) { return(ControllerError.BadRequest(e, this)); } }
public async Task <IActionResult> LaunchNotifier() { var launchingUser = await userManager.GetUserAsync(HttpContext.User); try { await emailSender.SendEmailAsync(launchingUser.Email, "Notifier starting", $"At {DateTime.Now}"); var chrono = Stopwatch.StartNew(); var notifier = new Notifier(dbContext); var notifierResult = await notifier.GetNotificationsAsync(); foreach (var userNotifications in notifierResult.UserNotifications) { var mailBody = new StringBuilder(); mailBody.Append("<html>"); mailBody.Append("<body>"); mailBody.Append($"<p>Hello {userNotifications.UserName}</p>"); mailBody.Append("<h1>Summary</h1>"); mailBody.Append("<p>"); mailBody.Append($"{userNotifications.RegisteredCardCount} registered cards<br/>"); mailBody.Append($"Finished at {DateTime.Now}<br/>"); mailBody.Append($"Notifier execution took {chrono.Elapsed}"); mailBody.Append("</p>"); mailBody.Append("<h1>Cards with new versions</h1>"); mailBody.Append("<ul>"); foreach (var card in userNotifications.CardVersions) { mailBody.Append("<li>"); mailBody.Append($"<a href={authoringPageLink}?CardId={card.CardId}>{card.FrontSide}</a><br/>"); mailBody.Append($"By {card.VersionCreator}<br/>"); mailBody.Append($"On {card.VersionUtcDate} (UTC)<br/>"); mailBody.Append($"Version description: '{card.VersionDescription}'"); mailBody.Append("</li>"); } mailBody.Append("</ul>"); mailBody.Append("<h1>Deleted cards</h1>"); mailBody.Append("<ul>"); foreach (var card in userNotifications.DeletedCards) { mailBody.Append("<li>"); mailBody.Append($"{card.FrontSide}<br/>"); mailBody.Append($"By {card.DeletionAuthor}<br/>"); mailBody.Append($"On {card.DeletionUtcDate} (UTC)<br/>"); mailBody.Append($"Deletion description: '{card.DeletionDescription}'"); mailBody.Append("</li>"); } mailBody.Append("</ul>"); mailBody.Append("</body>"); mailBody.Append("</html>"); await emailSender.SendEmailAsync(userNotifications.UserEmail, "MemCheck notifications", mailBody.ToString()); } await emailSender.SendEmailAsync(launchingUser.Email, "Notifier ended on success", $"<html><body><p>Finished at {DateTime.Now}<br/>Notifier execution took {chrono.Elapsed}</p></body></html>"); return(Ok()); } catch (Exception e) { await emailSender.SendEmailAsync(launchingUser.Email, "Notifier ended on exception", $"<h1>{e.GetType().Name}</h1><p>{e.Message}</p>"); return(ControllerError.BadRequest(e, this)); } }