/// <summary> /// Send the open/close message to the dm conversation /// </summary> /// <param name="title"></param> /// <param name="open"></param> private void sendClosedMessage(DirectMessageTitle title, bool open) { DirectMessageMessages msg = new DirectMessageMessages { message = open ? "El administrador encargado de la convesación la ha reabierto" : "Esta conversación ha sido cerrada", isAdmin = true, DirectMessageTitle = title }; _context.Add(msg); title.unreadMessagesForAdmin = 0; title.unreadMessagesForUser++; title.lastUpdate = DateTime.Now; }
/// <summary> /// Sends a message to a dm conversation /// </summary> /// <param name="order">The info to send the message</param> /// See <see cref="Areas.DirectMessages.Models.SendDMMessage"/> to know the param structure /// <returns>IActionResult of the send message action</returns> /// See <see cref="Areas.DirectMessages.Models.DMRoom"/> to know the response structure public async Task <IActionResult> sendMsg([FromBody] SendDMMessage order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); DirectMessageTitle title = new DirectMessageTitle(); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (!checkOrder(ref title, order.dmId, user)) { return(BadRequest()); } try { bool isAdmin = AdminPolicy.isAdmin(user, _context); DirectMessageMessages msg = new DirectMessageMessages { message = order.message, isAdmin = isAdmin, DirectMessageTitle = title }; addUnreadMessages(title, isAdmin); _context.Add(msg); _context.SaveChanges(); await sendMailAndSendNotification(title, user); using (var scope = _scopeFactory.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService <ApplicationDBContext>(); DirectMessageTitle dbTitle = dbContext.DirectMessagesTitle.Where(t => t.id == title.id).First(); User dbuser = dbContext.User.Where(u => u.id == user.id).First(); DMRoom room = new DMRoom(dbTitle, dbuser, dbContext); return(Ok(room)); } } catch (Exception) { return(StatusCode(500)); } }