예제 #1
0
        public async Task TryEnter(EnterLeaveDto dto)
        {
            await Execute(async() => {
                using (UnitOfWork db = new UnitOfWork())
                {
                    EnterLeavePointEntity enterLeavePoint = await db.GetRepo <EnterLeavePointEntity>().Get(dto.EnterLeavePointId.Value);
                    AccountEntity account = await db.GetRepo <AccountEntity>().Get(dto.AccountId.Value);

                    EnterLeavePointEventEntity enterLeavePointEvent = new EnterLeavePointEventEntity()
                    {
                        account_id           = account.id,
                        enter_leave_point_id = enterLeavePoint.id,
                        is_enter             = true,
                        timespan             = DateTime.Now
                    };

                    NotPermittedException ex = null;

                    if (account.Roles.SelectMany(r => r.ManufactoryPermissions).Any(m => m.id == enterLeavePoint.Manufactory.id))
                    {
                        enterLeavePointEvent.log = $"Enter to Manufactory #{enterLeavePoint.Manufactory.id} via Enter Point ${enterLeavePoint.id} by Account #{account.id}: SUCCESS";
                    }
                    else
                    {
                        enterLeavePointEvent.log = $"Enter to Manufactory #{enterLeavePoint.Manufactory.id} via Enter Point ${enterLeavePoint.id} by Account #{account.id}: ACCESS DENIED";
                        ex = new NotPermittedException(enterLeavePointEvent.log);
                    }

                    await db.GetRepo <EnterLeavePointEventEntity>().Create(enterLeavePointEvent);
                    await db.Save();

                    if (ex != null)
                    {
                        throw ex;
                    }
                }
            });
        }
예제 #2
0
 public async Task <HttpResponseMessage> TryLeave([FromBody] EnterLeaveDto dto)
 {
     return(await Execute(d => LocationService.TryLeave(d), dto));
 }