Example #1
0
        public async Task <IActionResult> GenerateReturnToken([FromBody] GenerateReturnTokenDto generateReturnTokenDto)
        {
            var result = await _returnTokenGenerator.GenerateToken(generateReturnTokenDto);

            return(StatusCode(result));
        }
        public async Task <IActionResult> GenerateReturnToken([FromBody] GenerateReturnTokenDto generateReturnTokenDto)
        {
            if (generateReturnTokenDto is null || generateReturnTokenDto.RegistrationId.IsNullOrEmpty())
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.TOKEN.GENERATE.RETURN.NULL",
                    Message = "Please provide valid data",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }

            if (!Guid.TryParse(generateReturnTokenDto.RegistrationId, out var guidRegistrationId))
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.TOKEN.GENERATE.INVALID.ID",
                    Message = "Please provide valid data",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }

            var registration = (from r in _registrationsRepo.Table
                                where r.ObjectRegistrationId == guidRegistrationId
                                select r)
                               .Include(r => r.ObjectReceiving)
                               .ThenInclude(r => r.ObjectReturning)
                               .Include(r => r.Object)
                               .FirstOrDefault();

            if (registration is null || registration.Status == ObjectRegistrationStatus.Canceled)
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.TOKEN.GENERATE.RETURN.INVALID.ID",
                    Message = "Please provide valid data",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }

            //if (!registration.Object.ShouldReturn)
            //{
            //    return new ErrorMessage
            //    {
            //        ErrorCode = "TRANSACTION.TOKEN.GENERATE.RETURN.FREE.OBJECT",
            //        Message = "The Object now is yours, you don't have to return it",
            //        StatusCode = System.Net.HttpStatusCode.BadRequest
            //    }.ToCommand<GenerateReturnTokenResultDto>();
            //}

            if (!_authorizer.IsAuthorized(or => or.ObjectRegistrationId == guidRegistrationId, or => or.RecipientLogin.User))
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.TOKEN.GENERATE.RETURN.UNAUTHORIZED",
                    Message = "You are not authorized to execute this request",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }

            if (registration.ObjectReceiving is null)
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.TOKEN.GENERATE.RETURN.NOT.RECEIVED",
                    Message = "The object has not been received yet",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }

            if (registration.ObjectReceiving.ObjectReturning is object)
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.TOKEN.GENERATE.RETURN.ALREADY.RETURNED",
                    Message = "The object has been returned",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }

            var token = await _tokenManager.GenerateToken(registration.ObjectReceiving.ObjectReceivingId, TokenType.Returning);

            return(Ok(new GenerateReturnTokenResultDto
            {
                CreatedAtUtc = token.IssuedAtUtc,
                UseBeforeUtc = token.UseBeforeUtc,
                ReturnToken = token.Token
            }));
        }