public Models.DigitalTwinResponse CreateDigitalTwin(Models.DigitalTwinRequest value, long organization)
        {
            Models.DigitalTwinResponse response = new Models.DigitalTwinResponse();

            try
            {
                //SQL Statement
                var sqlString = "INSERT INTO digital_twins (id, name, description, security_token, digital_twin_model, organization, enabled, group, created) " +
                                "VALUES (@id, @name, @description, @security_token, @digital_twin_model, @organization, @enabled, @group, @created)";

                //Create UNIX Timestamp
                var utcDateTime  = DateTime.UtcNow;
                var dto          = new DateTimeOffset(utcDateTime);
                var unixDateTime = dto.ToUnixTimeMilliseconds();

                var  random        = new Random();
                int  rnd           = random.Next(1000000000, 2000000000);
                long securityToken = unixDateTime - rnd;

                using (var connection = new NpgsqlConnection(connectionString))
                {
                    connection.Open();

                    using (var command = new NpgsqlCommand(sqlString, connection))
                    {
                        command.Parameters.AddWithValue("@id", NpgsqlTypes.NpgsqlDbType.Bigint, unixDateTime);
                        command.Parameters.AddWithValue("@name", NpgsqlTypes.NpgsqlDbType.Varchar, value.Name);
                        command.Parameters.AddWithValue("@description", NpgsqlTypes.NpgsqlDbType.Varchar, value.Description);
                        command.Parameters.AddWithValue("@security_token", NpgsqlTypes.NpgsqlDbType.Bigint, securityToken);
                        command.Parameters.AddWithValue("@digital_twin_model", NpgsqlTypes.NpgsqlDbType.Bigint, value.DigitalTwinModel);
                        command.Parameters.AddWithValue("@organization", NpgsqlTypes.NpgsqlDbType.Bigint, organization);
                        command.Parameters.AddWithValue("@enabled", NpgsqlTypes.NpgsqlDbType.Bigint, value.Enabled);
                        command.Parameters.AddWithValue("@group", NpgsqlTypes.NpgsqlDbType.Bigint, value.Group);
                        command.Parameters.AddWithValue("@created", NpgsqlTypes.NpgsqlDbType.Timestamp, utcDateTime);
                        command.Prepare();
                        command.ExecuteNonQuery();

                        //Log Success
                        response.Status        = "success";
                        response.Message       = "digital twin created";
                        response.Id            = unixDateTime;
                        response.SecurityToken = securityToken;
                        return(response);
                    }
                }
            }
            catch (Exception ex)
            {
                //Log Exception
                //_logger.LogError(ex, "digital twin creation failed");
                response.Status        = "error";
                response.Message       = "digital twin creation failed";
                response.Id            = 0;
                response.SecurityToken = 0;
                return(response);
            }
        }
        public Models.DigitalTwinResponse CreateDigitalTwin(Models.DigitalTwinRequest value, Guid organization)
        {
            Models.DigitalTwinResponse response = new Models.DigitalTwinResponse();

            try
            {
                //SQL Statement
                var sqlString = "INSERT INTO digital_twins (id, name, description, security_token, digital_twin_model, organization, enabled, group_, created, created_by) " +
                                "VALUES (@id, @name, @description, @security_token, @digital_twin_model, @organization, @enabled, @group_, @created, @created_by)";

                //Create a new Id UUID
                Guid idGuid = Guid.NewGuid();

                //Create a new Security Token UUID
                Guid securityTokenGuid = Guid.NewGuid();

                using (var connection = new NpgsqlConnection(connectionString))
                {
                    connection.Open();

                    using (var command = new NpgsqlCommand(sqlString, connection))
                    {
                        command.Parameters.AddWithValue("@id", NpgsqlTypes.NpgsqlDbType.Uuid, idGuid);
                        command.Parameters.AddWithValue("@name", NpgsqlTypes.NpgsqlDbType.Text, value.Name);
                        command.Parameters.AddWithValue("@description", NpgsqlTypes.NpgsqlDbType.Text, value.Description);
                        command.Parameters.AddWithValue("@security_token", NpgsqlTypes.NpgsqlDbType.Uuid, securityTokenGuid);
                        command.Parameters.AddWithValue("@digital_twin_model", NpgsqlTypes.NpgsqlDbType.Uuid, value.DigitalTwinModel);
                        command.Parameters.AddWithValue("@organization", NpgsqlTypes.NpgsqlDbType.Uuid, organization);
                        command.Parameters.AddWithValue("@enabled", NpgsqlTypes.NpgsqlDbType.Bigint, value.Enabled);
                        command.Parameters.AddWithValue("@group_", NpgsqlTypes.NpgsqlDbType.Uuid, value.Group);
                        command.Parameters.AddWithValue("@created", NpgsqlTypes.NpgsqlDbType.TimestampTz, DateTime.UtcNow);
                        command.Parameters.AddWithValue("@created_by", NpgsqlTypes.NpgsqlDbType.Uuid, value.CreatedBy);
                        command.Prepare();
                        command.ExecuteNonQuery();

                        //Log Success
                        response.Status        = "success";
                        response.Message       = "digital twin created";
                        response.Id            = idGuid;
                        response.SecurityToken = securityTokenGuid;
                        return(response);
                    }
                }
            }
            catch (Exception ex)
            {
                //Log Exception
                _logger.LogError(ex, "digital twin creation failed");
                response.Status        = "error";
                response.Message       = "digital twin creation failed";
                response.Id            = errorGuid;
                response.SecurityToken = errorGuid;
                return(response);
            }
        }