Desenvolvimento para dispositivos móveis

Notas de aula do prof. Eduardo da disciplina de Desenvolvimento para Dispositivos Móveis (curso técnico)

View on GitHub

Camada de armazenamento

A camada de armazenamento é responsável por acessar os dados da camada de serviço e disponibilizá-los para os componentes. Ela é responsável por armazenar os dados da aplicação e fazer a comunicação com a camada de serviço. Também, essa camada será responsável por fazer a comunicação com a camada de serviço, bem como manter o gerenciamento de estado da aplicação.

Camada de armazenamento para categorias

Vamos criar uma camada de armazenamento para categorias. Para isso crie um arquivo chamado src/stores/category.js e adicione o seguinte código:

import { ref } from 'vue';
import { defineStore } from 'pinia';

import CategoryService from '@/service/category';
const categoryService = new CategoryService();

export const useCategoryStore = defineStore('category', () => {
  const categories = ref([]);

  async function getCategories() {
    categories.value = await categoryService.getCategories();
  }

  async function createCategory(category) {
    await categoryService.createCategory(category);
    getCategories();
  }

  return { categories, getCategories, createCategory };
});

Note que criamos dois métodos: getCategories e createCategory. O método getCategories faz uma chamada para a camada de serviço para buscar as categorias cadastradas e armazená-las no estado da aplicação. O método createCategory faz uma chamada para a camada de serviço para adicionar uma categoria e, em seguida, chama o método getCategories para atualizar a lista de categorias. Também criamos um ref chamado categories para armazenar as categorias.

Camada de armazenamento para uploader de imagens

Vamos criar uma camada de armazenamento para o uploader de imagens. Para isso crie um arquivo chamado src/stores/uploader.js e adicione o seguinte código:

import { defineStore } from 'pinia';

import UploaderService from '@/service/uploader';
const uploaderService = new UploaderService();

export const useUploaderStore = defineStore('uploader', () => {
  async function uploadImage(image) {
    const { attachment_key } = await uploaderService.uploadImage(image);
    return attachment_key;
  }

  return { uploadImage };
});

No código acima, criamos um método uploadImage que faz uma chamada para a camada de serviço para fazer o upload de uma imagem e retorna a chave de anexo da imagem.

Camada de armazenamento para produtos

Nós já temos um serviço para produtos, mas que ainda não tem implementada a criação de produtos. Vamos então adicionar essa funcionalidade. Para isso, edite o arquivo src/stores/product.js e substitua o conteúdo pelo seguinte:

import { ref } from 'vue';
import { defineStore } from 'pinia';

import ProductService from '@/service/product';
const productService = new ProductService();

export const useProductStore = defineStore('product', () => {
  const products = ref([]);

  async function getProducts() {
    products.value = await productService.getProducts();
  }

  async function getProductsByCategory(category_id) {
    products.value = await productService.getProductByCategory(category_id);
  }

  async function createProduct(product) {
    await productService.createProduct(product);
    getProducts();
  }

  return { products, createProduct, getProducts, getProductsByCategory };
});

Nesse caso, criamos três métodos: getProducts, getProductsByCategory e createProduct. O método getProducts faz uma chamada para a camada de serviço para buscar os produtos cadastrados e armazená-los no estado da aplicação. O método getProductsByCategory faz uma chamada para a camada de serviço para buscar os produtos de uma categoria específica e armazená-los no estado da aplicação. O método createProduct faz uma chamada para a camada de serviço para adicionar um produto e, em seguida, chama o método getProducts para atualizar a lista de produtos. Também criamos um ref chamado products para armazenar os produtos.

Nas próximas etapas, vamos implementar os componentes de criação de produtos e categorias.

< Criando a camada de serviçoFormulário modal para criação de categorias >