Olá Flávio, fiz o adiciona dentro do NegociacaoDao, mas quando chamo no console dá um erro:
ConnectionFactory.getConnection().then(connection => new NegociacaoDao(connection).adiciona(new Negociacao(new Date(), 7, 100))); Promise {} NegociacaoDao.js:11 Uncaught (in promise) TypeError: Cannot read property 'transaction' of undefined at Promise (NegociacaoDao.js:11) at new Promise () at NegociacaoDao.adiciona (NegociacaoDao.js:9) at ConnectionFactory.getConnection.then.connection (:1:84)
segue o ConnectionFactory e o NegociacaoDao
em tempo, instânciei os dois no index.html
var ConnectionFactory = (function () { //criando uma função auto invocada, vai ser carregada e executada
const store = ['negociacoes']; //nome da tabela
const version = 5;
const dbName = 'aluraframe';
var connection = null;
var close = null;
//const não pode reatribuir valor;
return class ConnectionFactory {
constructor() {
throw new Error('Não é possível criar instâncias de ConnectionFactory');
}
static getConnection() {
return new Promise((resolve, reject) => {
let openRequest = window.indexedDB.open(dbName, version);
openRequest.onupgradeneeded = e => {
ConnectionFactory._createStores(e.target.result);
};
openRequest.onsuccess = e => {
if (!connection) {
connection = e.target.result;
close = connection.close.bind(connection);
connection.close = function() {
throw new Error("Você não pode fechar diretamente a conexão");
};
}
resolve(connection);
};
openRequest.onerror = e => {
console.log(e.target.error);
reject(e.target.error.name);
};
});
}
static _createStores(connection) {
stores.forEach(store => {
if (connection.objectStoreNames.contains(store)) connection.deleteObjectStore(store);
connection.createObjectStore(store, { autoIncrement: true }); // primeiro cria o banco e dps a tablea ou objectstore
});
}
static closeConnection() {
if(connection) {
close();
connection = null;
}
}
}
})();
class NegociacaoDao{
constructor(connection) {
this._connnection = connection;
this._store = 'negociacoes';
}
adiciona(negociacao) {
return new Promise((resolve, reject) => {
let request = this._connection
.transaction([this._store], 'readwrite')
.objectStore(this._store)
.add(negociacao);
request.onsuccess = e => {
resolve();
};
request.onerror = e => {
console.log(e.target.error);
reject('Não foi possível negociar a negociação');
};
});
}
}