· 8 years ago · May 03, 2018, 04:00 PM
1import { Injectable } from '@angular/core';
2import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
3
4@Injectable()
5export class DatabaseProvider {
6
7 constructor(private sqlite: SQLite) { }
8
9 /**
10 * Cria um banco caso não exista ou pega um banco existente com o nome no parametro
11 */
12 public getDB() {
13 return this.sqlite.create({
14 name: 'products.db',
15 location: 'default'
16 });
17 }
18
19 /**
20 * Cria a estrutura inicial do banco de dados
21 */
22 public createDatabase() {
23 return this.getDB()
24 .then((db: SQLiteObject) => {
25
26 // Criando as tabelas
27 this.createTables(db);
28
29 // Inserindo dados padrão
30 this.insertDefaultItems(db);
31
32 })
33 .catch(e => console.log(e));
34 }
35
36 /**
37 * Criando as tabelas no banco de dados
38 * @param db
39 */
40 private createTables(db: SQLiteObject) {
41 // Criando as tabelas
42 db.sqlBatch([
43 ['CREATE TABLE IF NOT EXISTS categories (id integer primary key AUTOINCREMENT NOT NULL, name TEXT)'],
44 ['CREATE TABLE IF NOT EXISTS products (id integer primary key AUTOINCREMENT NOT NULL, name TEXT, price REAL, duedate DATE, active integer, category_id integer, FOREIGN KEY(category_id) REFERENCES categories(id))']
45 ])
46 .then(() => console.log('Tabelas criadas'))
47 .catch(e => console.error('Erro ao criar as tabelas', e));
48 }
49
50 /**
51 * Incluindo os dados padrões
52 * @param db
53 */
54 private insertDefaultItems(db: SQLiteObject) {
55 db.executeSql('select COUNT(id) as qtd from categories', {})
56 .then((data: any) => {
57 //Se não existe nenhum registro
58 if (data.rows.item(0).qtd == 0) {
59
60 // Criando as tabelas
61 db.sqlBatch([
62 ['insert into categories (name) values (?)', ['Hambúrgueres']],
63 ['insert into categories (name) values (?)', ['Bebidas']],
64 ['insert into categories (name) values (?)', ['Sobremesas']]
65 ])
66 .then(() => console.log('Dados padrões incluÃdos'))
67 .catch(e => console.error('Erro ao incluir dados padrões', e));
68
69 }
70 })
71 .catch(e => console.error('Erro ao consultar a qtd de categorias', e));
72 }
73}