public async Task <ActionResult> CreateItem(AddItemDto addItemDto) { var itemToAdd = _mapper.Map <Entities.Item>(addItemDto); await _beachBuddyRepository.AddItem(itemToAdd); await _beachBuddyRepository.Save(); var itemToReturn = _mapper.Map <ItemDto>(itemToAdd); return(CreatedAtRoute("GetItem", new { itemId = itemToReturn.Id }, itemToReturn)); }
public async Task sendNotification(RequestedItem requestedItem, NotificationType notificationType, string notificationTitle, string notificationMessage, bool dataOnly) { var devices = await _beachBuddyRepository.GetDevices(); Dictionary <string, string> data; if (dataOnly) { data = new Dictionary <string, string> { { "notificationType", notificationType.ToString() }, { "updateOnly", "true" } }; } else { data = new Dictionary <string, string> { { "notificationType", notificationType.ToString() }, { "updateOnly", "false" }, { "itemId", $"{requestedItem.Id}" }, { "name", $"{requestedItem.Name}" }, { "count", $"{requestedItem.Count}" }, { "sentByUserId", $"{requestedItem.RequestedByUserId}" } }; } var deviceList = devices.ToList(); var results = await SendFcmNotification(deviceList, notificationTitle, notificationMessage, dataOnly, data); for (var i = 0; i < results.Count; i++) { var response = results[i]; var device = deviceList[i]; if (response.IsSuccess) { _logger.LogDebug($"Message was sent!"); // Woohoo! } else { _logger.LogWarning(response.Exception.InnerException, $"Error sending notification to device {device.DeviceToken}"); if (response.Exception.MessagingErrorCode.HasValue && response.Exception.MessagingErrorCode == MessagingErrorCode.Unregistered) { // the token has been unregistered, must delete the device record _beachBuddyRepository.DeleteDevice(device); await _beachBuddyRepository.Save(); _logger.LogDebug($"Device {device.DeviceToken} has been unregistered"); } } } }
public async Task <ActionResult> CreateRequestedItem(AddRequestedItemDto requestedItemDto) { var requestedByUserId = requestedItemDto.RequestedByUserId; if (requestedByUserId != Guid.Empty && await _beachBuddyRepository.UserExists(requestedByUserId) == false) { return(NotFound("User was not found.")); } var itemToAdd = _mapper.Map <Entities.RequestedItem>(requestedItemDto); itemToAdd.CreatedDateTime = DateTimeOffset.UtcNow; itemToAdd.CompletedDateTime = null; await _beachBuddyRepository.AddRequestedItem(itemToAdd); await _beachBuddyRepository.Save(); var itemToReturn = _mapper.Map <RequestedItemDto>(itemToAdd); return(Ok(itemToReturn)); }
public async Task <ActionResult> UpdateScore(Guid scoreId, UpdateScoreDto updateScoreDto) { var scoreToUpdate = await _beachBuddyRepository.GetScore(scoreId); if (scoreToUpdate == null) { return(NotFound()); } if (updateScoreDto.WinCount < 0) { return(BadRequest("You can't be that bad! Win count must be greater than 0.")); } _mapper.Map(updateScoreDto, scoreToUpdate); _beachBuddyRepository.UpdateScore(scoreToUpdate); await _beachBuddyRepository.Save(); await _notificationService.sendNotification(null, NotificationType.ScoreUpdated, null, null, true); return(NoContent()); }
public async Task <ActionResult> CreateDevice(AddDeviceDto addDeviceDto) { var itemToAdd = _mapper.Map <Device>(addDeviceDto); if (await _beachBuddyRepository.GetDevice(itemToAdd.DeviceToken) == null) { await _beachBuddyRepository.AddDevice(itemToAdd); await _beachBuddyRepository.Save(); } return(NoContent()); }
public async Task <IActionResult> UpdateUser(Guid userId, UpdateUserDto updateUserDto) { var userToUpdate = await _beachBuddyRepository.GetUser(userId); if (userToUpdate == null) { return(NotFound()); } _mapper.Map(updateUserDto, userToUpdate); _beachBuddyRepository.UpdateUser(userToUpdate); await _beachBuddyRepository.Save(); return(NoContent()); }
public async Task MessageReceived(string fromNumber, string toNumber, string text, List <RemoteFile> files) { _logger.LogInformation($"New Incoming SMS from {fromNumber}: {text}"); var users = await _beachBuddyRepository.GetUsers(new UserResourceParameters() { PhoneNumber = fromNumber }); var userWhoSentMessage = users.FirstOrDefault(); if (userWhoSentMessage == null) { await _twilioService.SendSms(fromNumber, "Sorry, I don't know who you are."); return; } var words = text.Split(" "); var firstWordOfMessage = words[0].ToLower(); var firstChar = firstWordOfMessage.ToCharArray()[0]; if (firstChar == '+' || firstChar == '-') { await ProcessScoreUpdate(text, userWhoSentMessage, fromNumber, toNumber); return; } string secondWordOfMessage = null; if (words.Length >= 2) { secondWordOfMessage = text.Split(" ")[1].ToLower(); } switch (firstWordOfMessage.ToLower()) { case "done": _backgroundTaskQueue.QueueSunscreenReminderForUser(userWhoSentMessage.Id); await _twilioService.SendSms(fromNumber, "Great! I'll let you know once it's dry and then again when it's time to reapply. ⏱"); return; case "refresh": await _notificationService.sendNotification(null, NotificationType.DashboardPulledToRefresh, null, null, true); return; case "remove": await RemoveItems(fromNumber, toNumber, text, firstWordOfMessage); // Send data notification so app will update await _notificationService.sendNotification(null, NotificationType.RequestedItemRemoved, null, null, true); return; case "list": await ShowAllItems(fromNumber); return; case "h": await ShowHelp(fromNumber); return; case "nukefromorbit": await RemoveItems(fromNumber, toNumber, text, firstWordOfMessage, true); // Send data notification so app will update await _notificationService.sendNotification(null, NotificationType.RequestedItemRemoved, null, null, true); return; case "bal": await GetBalance(fromNumber); return; case "add": if (secondWordOfMessage != null && secondWordOfMessage == "game") { var gameName = text.Substring("add game".Length).Trim(); await AddGame(gameName, fromNumber); return; } break; case "leaderboard": await ShowLeaderBoard(fromNumber); return; } var requestedItemToSave = new RequestedItem(); // Check if there is a quantity if (int.TryParse(firstWordOfMessage, out var quantity)) { text = text.Substring(firstWordOfMessage.Length).Trim(); } else { quantity = 1; } if (string.IsNullOrWhiteSpace(text)) { await _twilioService.SendSms(fromNumber, $"Sorry, I didn't detect anything to add to the list."); return; } requestedItemToSave.Id = Guid.NewGuid(); requestedItemToSave.Count = quantity; requestedItemToSave.CreatedDateTime = DateTimeOffset.UtcNow; requestedItemToSave.RequestedByUserId = userWhoSentMessage.Id; requestedItemToSave.RequestedByUser = userWhoSentMessage; requestedItemToSave.Name = text; try { await _beachBuddyRepository.AddRequestedItem(requestedItemToSave); await _beachBuddyRepository.Save(); } catch (Exception e) { _logger.LogError($"Something did not work when trying to save a requested item via Twilio: {e.Message}", e); await _twilioService.SendSms(fromNumber, $"Sorry, I couldn't add {text} to the list. Try again.)"); return; } await _notificationService.sendNotification( await _beachBuddyRepository.GetRequestedItem(requestedItemToSave.Id), NotificationType.RequestedItemAdded, $"\"{requestedItemToSave.Name}\" added to list", $"{userWhoSentMessage.FirstName} " + $"added {requestedItemToSave.Count} {requestedItemToSave.Name} to the Beach List.", false); await _twilioService.SendSms(fromNumber, $"\"{text}\" was added to the list!"); }