Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Storage cria apenas um registro

Consigo inserir no banco apenas um agendamento. Depois da primeira inserção não consigo inserir outros.

Este é o meu cadastro.ts:

import { AgendamentoService } from './../../domain/agendamento/agendamento-service';
import { Agendamento } from './../../domain/agendamento/agendamento';
import { HomePage } from './../home/home';
import { Carro } from './../../domain/carro/carro';
import { Component } from '@angular/core';
import { NavController, NavParams, AlertController, Alert } from 'ionic-angular';

@Component({
  templateUrl: 'cadastro.html'
})
export class CadastroPage {

  public carro: Carro;
  public precoTotal: number;

  public agendamento: Agendamento;

  private _alerta: Alert;

  constructor(
    public navCtrl: NavController, 
    public navParams: NavParams,
    private _service: AgendamentoService,
    private _alertCtrl: AlertController
              ) {
    this.carro = this.navParams.get('carro');
    this.precoTotal = this.navParams.get('precoTotal');

    this.agendamento = new Agendamento();
    this.agendamento.carro = this.carro;
    this.agendamento.valor = this.precoTotal;

    this._alerta = this._alertCtrl.create({
      title: 'Aviso!',
      buttons: [{ text: 'Ok', handler: () => this.navCtrl.setRoot(HomePage) }]
    });
  }

  agenda() {

    if(!this.agendamento.data || !this.agendamento.email || !this.agendamento.endereco || !this.agendamento.nome) {
      this._alertCtrl.create({
        title: 'Preenchimento obrigatório!',
        subTitle: 'Você deve preencher todas as informações.',
        buttons: [{ text: 'Ok'}]
      })
      .present();

      return;
    }

    this._service.
      agenda(this.agendamento)
        .then(confirmado => {
          confirmado ?
            this._alerta.setSubTitle('Agendamento realizado com sucesso!') :
            this._alerta.setSubTitle('Não foi possível realizar o agendamento. Tente mais tarde');

        this._alerta.present();
      });

  }

}

**E este é o meu agendamento-service.ts:**

import { AgendamentoService } from './../../domain/agendamento/agendamento-service';
import { Agendamento } from './../../domain/agendamento/agendamento';
import { HomePage } from './../home/home';
import { Carro } from './../../domain/carro/carro';
import { Component } from '@angular/core';
import { NavController, NavParams, AlertController, Alert } from 'ionic-angular';

@Component({
  templateUrl: 'cadastro.html'
})
export class CadastroPage {

  public carro: Carro;
  public precoTotal: number;

  public agendamento: Agendamento;

  private _alerta: Alert;

  constructor(
    public navCtrl: NavController, 
    public navParams: NavParams,
    private _service: AgendamentoService,
    private _alertCtrl: AlertController
              ) {
    this.carro = this.navParams.get('carro');
    this.precoTotal = this.navParams.get('precoTotal');

    this.agendamento = new Agendamento();
    this.agendamento.carro = this.carro;
    this.agendamento.valor = this.precoTotal;

    this._alerta = this._alertCtrl.create({
      title: 'Aviso!',
      buttons: [{ text: 'Ok', handler: () => this.navCtrl.setRoot(HomePage) }]
    });
  }

  agenda() {

    if(!this.agendamento.data || !this.agendamento.email || !this.agendamento.endereco || !this.agendamento.nome) {
      this._alertCtrl.create({
        title: 'Preenchimento obrigatório!',
        subTitle: 'Você deve preencher todas as informações.',
        buttons: [{ text: 'Ok'}]
      })
      .present();

      return;
    }

    this._service.
      agenda(this.agendamento)
        .then(confirmado => {
          confirmado ?
            this._alerta.setSubTitle('Agendamento realizado com sucesso!') :
            this._alerta.setSubTitle('Não foi possível realizar o agendamento. Tente mais tarde');

        this._alerta.present();
      });

  }

}
3 respostas

Bom dia!

Você postou duas vezes a mesma classe, inclusive tive que alterar seu post para usar o comentário de código para ele ser formatado.

Aguardo a classe que faltou postar, AgendamentoService.

Aqui está AgendamentoService:

import { Storage } from '@ionic/storage';
import { Agendamento } from './agendamento';
import { Http } from '@angular/http';
import { Injectable } from "@angular/core";

@Injectable()
export class AgendamentoService {

    constructor(private _http: Http, private _storage: Storage) {}

    agenda(agendamento: Agendamento) {

        let api = `https://aluracar.herokuapp.com/salvarpedido?carro=${agendamento.carro.nome}&preco=${agendamento.valor}&nome=${agendamento.nome}&endereco=${agendamento.endereco}&email=${agendamento.email}&dataAgendamento=${agendamento.data}`;
        return this._http
            .get(api)
            .toPromise()
            .then(() =>  agendamento.confirmado = true, err => console.log(err))
            .then(() => {
                let key = agendamento.email + agendamento.data.substr(0,10);
                console.log(key);
                return this._storage.set(key, agendamento)
            })
            .then(() => agendamento.confirmado);   
    }
}

E aqui CadastroPage:

import { AgendamentoService } from './../../domain/agendamento/agendamento-service';
import { Agendamento } from './../../domain/agendamento/agendamento';
import { HomePage } from './../home/home';
import { Carro } from './../../domain/carro/carro';
import { Component } from '@angular/core';
import { NavController, NavParams, AlertController, Alert } from 'ionic-angular';

@Component({
  templateUrl: 'cadastro.html'
})
export class CadastroPage {

  public carro: Carro;
  public precoTotal: number;

  public agendamento: Agendamento;

  private _alerta: Alert;

  constructor(
    public navCtrl: NavController, 
    public navParams: NavParams,
    private _service: AgendamentoService,
    private _alertCtrl: AlertController
              ) {
    this.carro = this.navParams.get('carro');
    this.precoTotal = this.navParams.get('precoTotal');

    this.agendamento = new Agendamento();
    this.agendamento.carro = this.carro;
    this.agendamento.valor = this.precoTotal;

    this._alerta = this._alertCtrl.create({
      title: 'Aviso!',
      buttons: [{ text: 'Ok', handler: () => this.navCtrl.setRoot(HomePage) }]
    });
  }

  agenda() {

    if(!this.agendamento.data || !this.agendamento.email || !this.agendamento.endereco || !this.agendamento.nome) {
      this._alertCtrl.create({
        title: 'Preenchimento obrigatório!',
        subTitle: 'Você deve preencher todas as informações.',
        buttons: [{ text: 'Ok'}]
      })
      .present();

      return;
    }

    this._service.
      agenda(this.agendamento)
        .then(confirmado => {
          confirmado ?
            this._alerta.setSubTitle('Agendamento realizado com sucesso!') :
            this._alerta.setSubTitle('Não foi possível realizar o agendamento. Tente mais tarde');

        this._alerta.present();
      });

  }

}
solução!

Estava inserindo. hehehe

O problema é que era preciso fechar as opções de desenvolvedores do navegador e abrir novamente com F12 para que fosse possível visualizar os dados atualizados. A opção de refresh do navegador não funciona(pelo menos não comigo aqui no chrome).

Valeu aí!

o/