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);
            }
        }
Exemple #2
0
        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);
            }
        }