// !! IMPORTANT NOTE: PrivateTalk, PrivateTalkReceiver, PrivateTalkTeamReceiver models should have [JsonIgnore] for that method to work properly. public PrivateTalkInsideOut GetNewUnreadPrivateTalk(int privateTalkId, string thisMember) { //[Type(MyOrReceived), PrivateTalk, MessageCountModel, Receivers, TeamReceivers] DateTimeOffset lastSeen = (context.PrivateTalkLastSeen.Where(pt => pt.PrivateTalkId == privateTalkId && pt.Visitor == thisMember).FirstOrDefault()?.LastSeen) ?? new DateTimeOffset(DateTime.MinValue, TimeSpan.Zero); int messageCount = context.PrivateTalkMessage.Where(ptm => ptm.PrivateTalkId == privateTalkId && ptm.Sender != thisMember && ptm.DateTimeSent > lastSeen).Count(); //messages belongs to others. if (messageCount > 0) { PrivateTalk pTalk = this.PrivateTalks.Where(pt => pt.PrivateTalkId == privateTalkId).FirstOrDefault(); pTalk = new PrivateTalk { PrivateTalkId = pTalk.PrivateTalkId, Owner = pTalk.Owner, Sender = pTalk.Sender, Thread = pTalk.Thread, DateTimeCreated = pTalk.DateTimeCreated }; bool my = pTalk.Sender == thisMember; MessageCountModel mcm = new MessageCountModel { PrivateTalkId = privateTalkId, MessagesCount = messageCount, OrderingCriterion = DateTimeOffset.MinValue }; PrivateTalkReceiver[] ptr = PrivateTalkReceivers.Where(pt => pt.PrivateTalkId == privateTalkId)?.ToArray(); PrivateTalkTeamReceiver[] pttr = PrivateTalkTeamReceivers.Where(pt => pt.PrivateTalkId == privateTalkId)?.ToArray(); return(new PrivateTalkInsideOut { My = my, PrivateTalk = pTalk, MessageCountModel = mcm, Receivers = ptr, TeamReceivers = pttr }); } return(null); }
[HttpDelete("{privateTalkId}")] // DELETE PrivateTalks/1 public IActionResult DeletePrivateTalk([FromRoute] long privateTalkId) //[FromRoute] is optional, it already accepts from route parameters not JSON. { PrivateTalk privateTalk = IPrivateTalkRepository.DeletePrivateTalk(privateTalkId); if (privateTalk != null) { return(Ok(privateTalk)); // or use No Content without arguments returned. } return(NoContent()); // 404 resource not found, Microsoft docs use NotFound for this kind of behavior. }
[HttpGet("{privateTalkId}")] // GET PrivateTalks/2133 public IActionResult GetPrivateTalk(long privateTalkId) //Accepts from route parameters not JSON. You don't have to speficy [FromRoute], but you can.. { PrivateTalk privateTalk = IPrivateTalkRepository.GetPrivateTalk(privateTalkId); if (privateTalk != null) { return(Ok(privateTalk)); } return(NoContent()); // 404 resource not found, Microsoft docs use NotFound for this kind of behavior. }
public PrivateTalk DeletePrivateTalk(long privateTalkId) // Return null for any errors otherwise PrivateTalk(deleted) { PrivateTalk privateTalk = context.PrivateTalk.Where(bt => bt.PrivateTalkId == privateTalkId).FirstOrDefault(); if (privateTalk != null) { context.Remove(privateTalk); context.SaveChanges(); } return(privateTalk); }
public ReturnModel NewPrivateTalk(PrivateTalk privateTalk) // Return -1 for any errors otherwise PrivateTalkId { try { context.PrivateTalk.Add(privateTalk); context.SaveChanges(); } catch { return(new ReturnModel { ErrorCode = ErrorCodes.DatabaseError }); } return(new ReturnModel { ErrorCode = ErrorCodes.OK, ReturnedId = privateTalk.PrivateTalkId }); // Provides PrivateTalkId(identity autoset from db) }
public bool isMyPrivateTalkGuard(long privateTalkId, string thisMember) { PrivateTalk privateTalk = PrivateTalks.Where(p => p.PrivateTalkId == privateTalkId).FirstOrDefault(); if (privateTalk == null) { return(false); } if (privateTalk.Sender == thisMember) { return(true); } else { return(false); } }
[HttpPut("{privateTalkId}")] // PUT PrivateTalks/3 + JSON Object public IActionResult UpdatePrivateTalk([FromRoute] long privateTalkId, [FromBody] PrivateTalk privateTalk) { if (privateTalk == null || privateTalk.Sender != User.Identity.Name || privateTalkId != privateTalk.PrivateTalkId) { return(BadRequest()); // 400 Bad Request } ReturnModel r = IPrivateTalkRepository.UpdatePrivateTalk(privateTalk); if (r.ErrorCode == ErrorCodes.OK) { return(NoContent()); //204 No Content } else if (r.ErrorCode == ErrorCodes.ItemNotFoundError) { return(BadRequest()); } return(new StatusCodeResult(StatusCodes.Status503ServiceUnavailable)); // 503 Service Unavailable Error. }
//for unique, GroupBy(ptr => ptr.PrivateTalkId).Select(group => group.First()) // public PrivateTalk[] PrivateTalksReceived(string receiver, int pageNo, string searchValue,int pageSize=50) // gelen kutusu // { // var context2 = new XYZToDo.Models.DatabasePersistanceLayer.XYZToDoSQLDbContext(); // //int pageSize = 12; // PrivateTalk[] ptrs = PrivateTalkReceivers.Where(ptr => ptr.Receiver == receiver).Select(ptr => ptr.PrivateTalk).ToArray(); // PrivateTalk[] ptrs2 = context.TeamMember.Where(tm => tm.Username == receiver && tm.Status == true).SelectMany(tm => tm.Team.PrivateTalkTeamReceiver).Select(rec => rec.PrivateTalk).Where(pt => pt.Sender != receiver).ToArray(); //İçinde bulunduğum takımların, takım alıcıları. 2 takımında bulunuyorum, private talk id 2, 3 takımında bulunuyoorum private talk 5, buradan private talkları getirelim. // PrivateTalk[] pTalks = null; // try // { // pTalks = ptrs.Concat(ptrs2)?.GroupBy(pt => pt.PrivateTalkId).Select(x => x.First()) // .OrderByDescending(pt => PTOrderingCriterion(pt.PrivateTalkId, receiver, context2)). // Where(bt => searchValue == "undefined" || (bt.Thread.Contains(searchValue) || bt.Sender.Contains(searchValue))).Skip((pageNo - 1) * pageSize).Take(pageSize).ToArray(); // } // catch (System.Exception) // { // } // context2.Dispose(); // return pTalks; // } public bool isPrivateTalkJoinedGuard(long privateTalkId, string thisMember) { PrivateTalk pTalk = PrivateTalkReceivers.Where(ptr => ptr.Receiver == thisMember).Select(ptr => ptr.PrivateTalk).Where(pt => pt.PrivateTalkId == privateTalkId).FirstOrDefault(); if (pTalk != null) { return(true); } PrivateTalk pTalk2 = context.TeamMember.Where(tm => tm.Username == thisMember && tm.Status == true). SelectMany(tm => tm.Team.PrivateTalkTeamReceiver).Select(rec => rec.PrivateTalk).Where(pt => pt.Sender != thisMember).Where(pt => pt.PrivateTalkId == privateTalkId).FirstOrDefault(); if (pTalk2 != null) { return(true); } return(false); }
public ReturnModel UpdatePrivateTalk(PrivateTalk privateTalk) { if (privateTalk.PrivateTalkId == 0) { return new ReturnModel { ErrorCode = ErrorCodes.ItemNotFoundError } } ; try { context.Entry(privateTalk).State = EntityState.Modified; context.SaveChanges(); } catch { return(new ReturnModel { ErrorCode = ErrorCodes.DatabaseError }); } return(new ReturnModel { ErrorCode = ErrorCodes.OK }); }
[HttpPost()] // POST /PrivateTalks + JSON Object public IActionResult NewPrivateTalk([FromBody] PrivateTalk privateTalk) //Accepts JSON body, not x-www-form-urlencoded! { if (privateTalk == null) { return(BadRequest()); // 400 Bad Request } var member = User.Identity.Name; // For security. From Claim(ClaimTypes.Name, Username) in JWT if (member == null) { return(Unauthorized()); } privateTalk.Sender = member; ReturnModel newPrivateTalk = IPrivateTalkRepository.NewPrivateTalk(privateTalk); if (newPrivateTalk.ErrorCode == ErrorCodes.OK) { return(CreatedAtAction(nameof(GetPrivateTalk), new { PrivateTalkId = newPrivateTalk.ReturnedId }, newPrivateTalk.ReturnedId)); // 201 Created } return(new StatusCodeResult(StatusCodes.Status503ServiceUnavailable)); // 503 Service Unavailable Error. }