public static LockerDto ToError(this LockerDto model)
 {
     return(new LockerDto()
     {
         StatusCode = model.StatusCode,
         Error = model.Error
     });
 }
        /// <summary>
        /// Gets the open compartment parameters with Json web token credentials and MongoDB database credentials.
        /// Json web token credentials contains enable or disable, if enable then need to provide jwt secret and token.
        /// </summary>
        /// <returns>
        ///  List of compartment open status with object detection, LED status by requested compartment id's.
        /// </returns>
        public LockerDto OpenCompartment(Compartment model)
        {
            var lockerDto = new LockerDto();

            Log.Information("[HCM][Open Compartment][Req]" + "[" + JsonSerializer.Serialize(model) + "]");

            try {
                if (!PortsHealthCheck.IsLockPortAvailable && !PortsHealthCheck.IsDetectionPortAvailable)
                {
                    return(OpenCompartmentMapper.ToError(new LockerDto {
                        StatusCode = StatusCode.Status503ServiceUnavailable, Error = new Common.Exceptions.ApplicationException(ApplicationErrorCodes.BrokenComPort, ApplicationErrorCodes.GetMessage(ApplicationErrorCodes.BrokenComPort))
                    }));
                }

                var(statusCode, errorResult) = LockerManagementValidator.PayloadValidator(LockerConfiguration, model.JwtCredentials.IsEnabled, model.JwtCredentials.Secret, model.JwtCredentials.Token, PayloadTypes.OpenCompartment, model.LockerId, model.TransactionId, model.CompartmentIds, null);
                if (statusCode != StatusCode.Status200OK)
                {
                    return(OpenCompartmentMapper.ToError(new LockerDto {
                        StatusCode = statusCode, Error = errorResult
                    }));
                }

                var result = CompartmentManager.CompartmentOpen(model, LockerConfiguration);
                lockerDto = OpenCompartmentMapper.ToObject(result);
                Log.Information("[HCM][Open Compartment][Res]" + "[" + JsonSerializer.Serialize(result) + "]");
            }
            catch (Exception ex)
            {
                Log.Error("[HCM][Open Compartment]" + "[" + ex + "]");
                return(OpenCompartmentMapper.ToError(new LockerDto {
                    StatusCode = StatusCode.Status500InternalServerError, Error = new Common.Exceptions.ApplicationException(ApplicationErrorCodes.InternalServerError, ex.Message)
                }));
            }

            return(lockerDto);
        }