Ejemplo n.º 1
0
        public IHttpActionResult Update(string key, AttentionNoticeStatus value)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                service.Update(key, value);
                return(StatusCode(HttpStatusCode.NoContent));
            }
            catch (NotSupportedException)
            {
                return(BadRequest());
            }
            catch (UnauthorizedAccessException)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound());
            }
            catch (DuplicateKeyException)
            {
                ModelState.AddModelError(nameof(AttentionNoticeStatus.Key), nameof(DuplicateKeyException));
                return(BadRequest(ModelState));
            }
        }
Ejemplo n.º 2
0
        public IHttpActionResult Create(AttentionNoticeStatus value)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                service.Create(value);
                return(CreatedAtRoute("AttentionNoticeStatuses_Create", new { id = value.Id }, value));
            }
            catch (NotSupportedException)
            {
                return(BadRequest());
            }
            catch (UnauthorizedAccessException)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound());
            }
            catch (DuplicateKeyException)
            {
                ModelState.AddModelError(nameof(AttentionNoticeStatus.Key), nameof(DuplicateKeyException));
                return(BadRequest(ModelState));
            }
        }
Ejemplo n.º 3
0
 private void OnReaded(AttentionNoticeStatus value)
 {
     using (log.Activity(m => m($"Execute {nameof(OnReaded)} for {nameof(AttentionNoticeStatus)}[{value.Id}]")))
     {
         Ensure(value);
     }
 }
Ejemplo n.º 4
0
 private void OnDeleted(AttentionNoticeStatus value)
 {
     using (log.Activity(m => m($"Execute {nameof(OnDeleted)} for {nameof(AttentionNoticeStatus)}[{value.Id}]")))
     {
         log.Info($"Delete {nameof(AttentionNoticeStatusTracker)} for {nameof(AttentionNoticeStatus)}[{value.Id}] ignored. Expected Cascade Delete");
     }
 }
Ejemplo n.º 5
0
        public void Create(AttentionNoticeStatus value)
        {
            using (log.Activity(m => m($"Creating {nameof(AttentionNoticeStatus)} by {Thread.CurrentPrincipal?.Identity?.Name}")))
            {
                using (log.Activity(m => m("Authorization")))
                {
                    try
                    {
                        security.ValidateCreate(value);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        log.Warn($"Authorization Denied");
                        throw;
                    }
                    catch (Exception e)
                    {
                        log.Error($"Authorization Error", e);
                        throw;
                    }
                }

                var entity = null as AttentionNoticeStatus;
                using (log.Activity(m => m("Create Entity")))
                {
                    try
                    {
                        entity = context.AttentionNoticeStatuses.Add(value);
                        context.SaveChanges();
                    }
                    catch (Exception e) when(e.HasDuplicateKeyNumber())
                    {
                        log.Warn($"Duplicate {nameof(AttentionNoticeStatus.Key)}:\"{value.Key}\"", e);
                        throw new DuplicateKeyException(value.Key);
                    }
                    catch (Exception e)
                    {
                        log.Error($"Update Error", e);
                        throw;
                    }
                }
                var newValue = entity.Filter();

                using (log.Activity(m => m("Emit Event")))
                {
                    try
                    {
                        emitter.OnCreated(newValue);
                    }
                    catch (Exception e)
                    {
                        log.Error($"Emit Event Error", e);
                        throw;
                    }
                }

                log.Info(m => m($"Created {nameof(AttentionNoticeStatus)}[{entity.Id}] by {Thread.CurrentPrincipal?.Identity?.Name}"));
            }
        }
Ejemplo n.º 6
0
        private void Ensure(AttentionNoticeStatus value)
        {
            using (log.Activity(m => m($"Execute {nameof(Ensure)} for {nameof(AttentionNoticeStatus)}[{value.Id}]")))
            {
                var entity = null as AttentionNoticeStatusTracker;
                using (log.Activity(m => m($"Read {nameof(AttentionNoticeStatusTracker)} for {nameof(AttentionNoticeStatus)}[{value.Id}]")))
                {
                    entity = context.AttentionNoticeStatusTrackers.SingleOrDefault(item => item.Id == value.Id);
                }

                if (entity == null)
                {
                    using (log.Activity(m => m($"Create {nameof(AttentionNoticeStatusTracker)} for {nameof(AttentionNoticeStatus)}[{value.Id}]")))
                    {
                        try
                        {
                            entity = context.AttentionNoticeStatusTrackers.Add(new AttentionNoticeStatusTracker
                            {
                                Id           = value.Id,
                                ValidThrough = DateTime.Now + options.Value.Life
                            });
                            context.SaveChanges();
                        }
                        catch (Exception e)
                        {
                            log.Error($"Create {nameof(AttentionNoticeStatusTracker)} for {nameof(AttentionNoticeStatus)}[{value.Id}] Error", e);
                            throw;
                        }
                    }
                }
                else
                {
                    using (log.Activity(m => m($"Update {nameof(AttentionNoticeStatusTracker)}[{value.Id}] for {nameof(AttentionNoticeStatus)}[{value.Id}]")))
                    {
                        try
                        {
                            entity.ValidThrough = DateTime.Now + options.Value.Life;
                            context.SaveChanges();
                        }
                        catch (Exception e)
                        {
                            log.Error($"Update {nameof(AttentionNoticeStatusTracker)}[{entity.Id}] for {nameof(AttentionNoticeStatus)}[{value.Id}] Error", e);
                            throw;
                        }
                    }
                }

                log.Info($"Ensured {nameof(AttentionNoticeStatusTracker)}[{entity.Id}] for {nameof(AttentionNoticeStatus)}[{value.Id}]");
            }
        }
Ejemplo n.º 7
0
        private void CheckAttentionNoticeStatusValue(AttentionNoticeStatus value)
        {
            var principal = GetAuthPrincipal();
            //var facilityRoles = new[] { "BD.MedView.Web.Pharmacist", "BD.MedView.Web.Technician" };
            //var facilityIds = principal.Roles
            //    .Where(item => (facilityRoles.Contains(item.Name) && item.Realm.ParentId != null))
            //    .Select(item => item.Realm)
            //    .SelectMany(item => item.Claims)
            //    .Where(item => item.Issuer == "BD.MedView.Facility"
            //                    && item.OriginalIssuer == "BD.MedView.Facility"
            //                    && item.Type == "Provider.Id"
            //                    && item.ValueType == "Int32")
            //    .Select(item => Convert.ToInt32(item.Value))
            //    .Distinct();
            //if (facilityIds.Contains(value.FacilityId))
            //{
            //    return;
            //}
            var resourceNames    = new[] { "BD.MedView.Web.Screens.Pharmacist", "BD.MedView.Web.Screens.Technician" };
            var facilityIdsQuery = context.Accesses
                                   .Where(item => item.PrincipalId == principal.Id)
                                   .Where(item => resourceNames.Contains(item.Permission.Resource.Name))
                                   .SelectMany(item => item.Realm.Claims)
                                   .Where(item => item.Issuer == "BD.MedView.Facility" &&
                                          item.OriginalIssuer == "BD.MedView.Facility" &&
                                          item.Type == "Provider.Id" &&
                                          item.ValueType == "Int32")
                                   .Select(item => item.Value)
                                   .Distinct();
            var facilityIds = facilityIdsQuery.AsEnumerable()
                              .Select(item => int.Parse(item))
                              .ToList();

            if (facilityIds.Contains(value.FacilityId))
            //if (facilityIds.Any())
            {
                return;
            }
            throw new UnauthorizedAccessException();
        }
Ejemplo n.º 8
0
 void IEntitySecurity <AttentionNoticeStatus> .ValidateCreate(AttentionNoticeStatus value)
 {
     CheckAttentionNoticeStatusValue(value);
 }
Ejemplo n.º 9
0
 void IEntitySecurity <AttentionNoticeStatus> .ValidateUpdate(AttentionNoticeStatus entity, AttentionNoticeStatus value)
 {
     CheckAttentionNoticeStatusValue(entity);
     CheckAttentionNoticeStatusValue(value);
 }
Ejemplo n.º 10
0
 void IEntitySecurity <AttentionNoticeStatus> .ValidateRead(AttentionNoticeStatus value, string expand)
 {
     CheckAuthPrincipal();
 }
Ejemplo n.º 11
0
        public void Update(string key, AttentionNoticeStatus value)
        {
            using (log.Activity(m => m($"Update {nameof(AttentionNoticeStatus)}[{key}] by {Thread.CurrentPrincipal?.Identity?.Name}")))
            {
                using (log.Activity(m => m($"Validate {nameof(value)}")))
                {
                    if (key != value.Key)
                    {
                        //Cannot change primary key
                        log.Warn(l => l($"Cannot update unique key {nameof(AttentionNoticeStatus)}[{key}]"));
                        throw new NotSupportedException();
                    }
                }

                var entity = null as AttentionNoticeStatus;
                using (log.Activity(m => m($"Read {nameof(AttentionNoticeStatus)}[{key}]")))
                {
                    entity = context.AttentionNoticeStatuses.SingleOrDefault(item => item.Key == key);
                    if (entity == null)
                    {
                        log.Warn($"{nameof(AttentionNoticeStatus)}[{key}] is not found");
                        throw new KeyNotFoundException();
                    }
                }

                using (log.Activity(m => m("Authorization")))
                {
                    try
                    {
                        security.ValidateUpdate(entity, value);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        log.Warn($"Authorization Denied");
                        throw;
                    }
                    catch (Exception e)
                    {
                        log.Error($"Authorization Error", e);
                        throw;
                    }
                }

                var oldValue = entity.Filter();
                using (log.Activity(m => m("Update Entity")))
                {
                    try
                    {
                        entity.Key             = value.Key;
                        entity.FacilityId      = value.FacilityId;
                        entity.UpdatedBy       = value.UpdatedBy;
                        entity.UpdatedDateTime = value.UpdatedDateTime;
                        context.SaveChanges();
                    }
                    catch (Exception e) when(e.HasDuplicateKeyNumber())
                    {
                        log.Warn($"Duplicate {nameof(AttentionNoticeStatus.Key)}:\"{value.Key}\"", e);
                        throw new DuplicateKeyException(value.Key);
                    }
                    catch (Exception e)
                    {
                        log.Error($"Update Error", e);
                        throw;
                    }
                }
                var newValue = entity.Filter();

                using (log.Activity(m => m("Emit Event")))
                {
                    try
                    {
                        emitter.OnUpdated(newValue, oldValue);
                    }
                    catch (Exception e)
                    {
                        log.Error($"Emit Event Error", e);
                        throw;
                    }
                }

                log.Info(l => l($"Updated {nameof(AttentionNoticeStatus)}[{key}] by {Thread.CurrentPrincipal?.Identity?.Name}"));
            }
        }