public List <Pedido> ListarPedidos()
        {
            const string query = @"
            SELECT
                Pedido.CodigoPedido         AS 'CodigoPedido'
                , ItemPedido.Codigo         AS 'Codigo'
                , ItemPedido.Descricao      AS 'Descricao'
                , ItemPedido.PrecoUnitario  AS 'PrecoUnitario'
                , ItemPedido.Quantidade     AS 'Quantidade'
            FROM
                Pedido
                INNER JOIN ItemPedido ON Pedido.CodigoPedido = ItemPedido.CodigoPedido";

            using var conexao = ConnectionFactory.AbrirConexao();

            var pedidos = new Dictionary <string, Pedido>();

            conexao.Query <Pedido, ItemPedido, Pedido>(query,
                                                       (pedido, itemPedido) =>
            {
                if (!pedidos.TryGetValue(pedido.CodigoPedido, out var pedidoDicionario))
                {
                    pedidos.Add(pedido.CodigoPedido, pedidoDicionario = pedido);
                }

                pedidoDicionario.Itens ??= new List <ItemPedido>();
                pedidoDicionario.Itens.Add(itemPedido);

                return(pedido);
            },
                                                       splitOn: "Codigo");

            return(pedidos.Values.ToList());
        }
        public void AtualizarPedido(Pedido pedido)
        {
            using var conexao = ConnectionFactory.AbrirConexao();

            DeletarItensPedido(conexao, pedido.CodigoPedido);
            InserirItensPedido(conexao, pedido.Itens);
        }
        public void DeletarPedido(string codigoPedido)
        {
            const string deletePedido = "DELETE FROM Pedido WHERE CodigoPedido = @CodigoPedido";

            using var conexao = ConnectionFactory.AbrirConexao();

            DeletarItensPedido(conexao, codigoPedido);
            conexao.Execute(deletePedido, new { CodigoPedido = codigoPedido });
        }
        private void CriarTabelaPedido()
        {
            const string create = @"
            CREATE TABLE IF NOT EXISTS Pedido (
                CodigoPedido    VARCHAR(10) PRIMARY KEY,
                DataCriacao     TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
            );";

            using var conexao = ConnectionFactory.AbrirConexao();

            conexao.Execute(create);
        }
        public void InserirPedido(Pedido pedido)
        {
            const string insertPedido = @"
            INSERT INTO Pedido
                (CodigoPedido)
            VALUES
                (@CodigoPedido);";

            using var conexao = ConnectionFactory.AbrirConexao();

            conexao.Execute(insertPedido, pedido);
            InserirItensPedido(conexao, pedido.Itens);
        }
        private void CriarTabelaItemPedido()
        {
            const string create = @"
            CREATE TABLE IF NOT EXISTS ItemPedido (
                Codigo          INTEGER PRIMARY KEY,
                CodigoPedido    TEXT    NOT NULL,
                Descricao       TEXT    NOT NULL,
                PrecoUnitario   REAL    NOT NULL,
                Quantidade      INTEGER NOT NULL,
                FOREIGN KEY (CodigoPedido) REFERENCES Pedido (CodigoPedido)
            );";

            using var conexao = ConnectionFactory.AbrirConexao();

            conexao.Execute(create);
        }