public bool ReadMail(long mailId, long requesterId = -1) { Maple2.Sql.Model.Mail model = SafeGetMail(mailId, requesterId); if (model == null || model.ReadTime > model.CreationTime) { return(false); } model.ReadTime = DateTime.UtcNow; return(context.TrySaveChanges()); }
public bool DeleteMail(long mailId, long requesterId = -1) { Maple2.Sql.Model.Mail model = SafeGetMail(mailId, requesterId); if (model == null) { return(false); } context.Mail.Remove(model); return(context.TrySaveChanges()); }
private Maple2.Sql.Model.Mail SafeGetMail(long mailId, long requesterId) { Maple2.Sql.Model.Mail model = context.Mail.Find(mailId); if (model == null) { return(null); } // requesterId prevents you from accessing other people's mail if (requesterId != -1 && model.RecipientId != requesterId) { return(null); } return(model); }
/* Write */ public long CreateMail(MailInfo mail) { Maple2.Sql.Model.Mail dbMail = storage.mailConverter.ToModel(mail); if (mail.Items.Count == 0) { context.Mail.Add(dbMail); return(context.TrySaveChanges() ? dbMail.Id : -1); } // Use transaction when saving items as well using IDbContextTransaction transaction = context.Database.BeginTransaction(); context.Mail.Add(dbMail); if (!context.TrySaveChanges()) { return(-1); } itemOperations.StageSyncItems(dbMail.Id, mail.Items); transaction.Commit(); return(dbMail.Id); }
/* Read */ public MailInfo GetMail(long mailId, long requesterId = -1) { IQueryable <Maple2.Sql.Model.Mail> mailQuery = context.Mail.AsQueryable() .Where(dbMail => dbMail.Id == mailId); if (requesterId != -1) { mailQuery = mailQuery.Where(dbMail => dbMail.RecipientId == requesterId); } Maple2.Sql.Model.Mail model = mailQuery.SingleOrDefault(); if (model == null) { return(null); } MailInfo mail = storage.mailConverter.FromModel(model); mail.Items = itemOperations.GetItems(mail.Id); SetSenderName(mail); return(mail); }