public async Task <ManagerResponse <ContactDetail> > CreateOrUpdate(ContactDetail model) { _logger.LogInformation("CreateOrUpdate: Begin"); var result = new ManagerResponse <ContactDetail> { ResultStatus = Common.Enums.ManagerResponseResult.Success, Result = new List <ContactDetail>() }; var created = false; var dao = await _unitOfWork.Query <Data.Dao.ContactDetail>() .Where(o => o.Contact.Uid == ContactUid) .FirstOrDefaultAsync(o => o.Uid == model.Uid); if (dao == null) { // create dao = _mapper.Map <ContactDetail, Data.Dao.ContactDetail>(model); var parentId = await TryGetParentId(ContactUid); if (parentId == null) { _logger.LogWarning("CreateOrUpdate: End (Invalid ContactUid)"); result.ResultStatus = Common.Enums.ManagerResponseResult.ForeignKeyViolation; return(result); } dao.ContactId = parentId.Value; _unitOfWork.Add(dao); created = true; } else { // update dao.Description = model.Description; dao.Value = model.Value; dao.Type = model.Type; _unitOfWork.Update(dao); } await _unitOfWork.SaveChangesAsync(); var createdOrUpdatedModel = _mapper.Map <Data.Dao.ContactDetail, ContactDetail>(dao); //createdOrUpdatedModel.ContactUid = contactUid; result.Result.Add(createdOrUpdatedModel); if (created) { _logger.LogInformation("Put: End (Created)"); result.ResultStatus = Common.Enums.ManagerResponseResult.Created; return(result); } else { _logger.LogInformation("Put: End (Updated)"); result.ResultStatus = Common.Enums.ManagerResponseResult.Updated; return(result); } }
public async Task <ManagerResponse <Contact> > CreateOrUpdate(Contact model) { _logger.LogInformation("CreateOrUpdate: Begin"); var created = false; var dao = await _unitOfWork.Query <Data.Dao.Contact>() .FirstOrDefaultAsync(o => o.Uid == model.Uid); if (dao == null) { // create dao = _mapper.Map <Contact, Data.Dao.Contact>(model); _unitOfWork.Add(dao); created = true; } else { // update dao.FirstName = model.FirstName; dao.LastName = model.LastName; _unitOfWork.Update(dao); } var result = new ManagerResponse <Contact> { ResultStatus = Common.Enums.ManagerResponseResult.Success, Result = new List <Contact>() }; try { await _unitOfWork.SaveChangesAsync(); } catch (DbUpdateException ex) {// TODO var dbErrorType = _dbExceptionHelper.HandleUpdateException(ex); switch (dbErrorType) { case Common.Enums.DbUpdateExceptionType.UniqueKeyConstraintViolation: result.ResultStatus = Common.Enums.ManagerResponseResult.UniqueKeyViolation; result.ErrorMessage = "Unique constraint violation"; return(result); default: result.ResultStatus = Common.Enums.ManagerResponseResult.UnknownError; result.ErrorMessage = "Unknown database error"; return(result); } } var createdOrUpdatedModel = _mapper.Map <Data.Dao.Contact, Contact>(dao); result.Result.Add(createdOrUpdatedModel); if (created) { _logger.LogInformation("CreateOrUpdate: End (Created)"); result.ResultStatus = Common.Enums.ManagerResponseResult.Created; return(result); } else { // updated _logger.LogInformation("CreateOrUpdate: End (Updated)"); result.ResultStatus = Common.Enums.ManagerResponseResult.Updated; return(result); } }