Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
June 17, 2021 01:15 am GMT

.Net Angular PoUi : FullStackPlayGroung

Oi Pessoal!

Nesse post vou mostrar como criar um crud com .net e angular utilizando po-ui, uma biblioteca de componentes para angular de alta produtividade.

O repositrio desse cdigo voc encontra aqui.

Voc precisa ter instalado em sua mquia:

Abra uma pasta de sua preferencia no terminal.
Crie uma pasta chamada src.
Criaremos os projetos dentro desta pasta.

Abra o terminal e navegue at esta pasta e digite o comando abaixo para abrir o vscode.

code .

A partir de agora vamos utilizar o terminal integrado do vscode. Aperte ctrl + ' para abrir o terminal integrado.

BackEnd

WebApi

Crie o projeto com o comando abaixo:

dotnet new webapi -o api

Apague as classes WeatherForecast.cs e Controllers/WeatherForecastController.cs

Navegue at a pasta do projeto

cd api

Crie um arquivo de gitignore

dotnet new gitignore

Crie a pasta Models e crie a classe Pet:

md Modelscd . > Models/Pet.cs

No menu lateral do vscode procure a pasta Models e abra a classe Pet.cs

A classe Pet.cs deve ter o seguinte cdigo:

namespace api.Models{    public class Pet    {        public int Id { get; set; }        public string Nome { get; set; }        public string Raca { get; set; }        public string Dono { get; set; }    }}

Instale o pacote Microsoft.EntityFrameworkCore.InMemory

Esse pacote para utilizarmos um banco de dados em memria, ideal para testes.

dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 5.0.7

Crie a pasta Data e crie a classe DataContext:

md Datacd . > Data/DataContext.cs

A classe DataContext.cs deve ter o seguinte cdigo:

using api.Models;using Microsoft.EntityFrameworkCore;namespace api.Data{    public class DataContext : DbContext    {        public DataContext(DbContextOptions<DataContext> options)            : base(options) { }        public DbSet<Pet> Pet { get; set; }    }}

Adicione as referncias abaixo no topo da classe Startup.cs:

using api.Data;using Microsoft.EntityFrameworkCore;

Adicione o trecho abaixo no mtodo ConfigureServices na classe Startup.cs

public void ConfigureServices(IServiceCollection services)    services.AddControllers();    services.AddSwaggerGen(c =>    {        c.SwaggerDoc("v1", new OpenApiInfo { Title = "api", Version = "v1" });    })    //adicione este trecho    services.AddDbContext<DataContext>(opt => opt.UseInMemoryDatabase("DataBase"));}

Instale a ferramenta de gerao de cdigo

dotnet tool install -g dotnet-aspnet-codegenerator

ou atualize caso ela j esteja instalada

dotnet tool update -g dotnet-aspnet-codegenerator

Adicione os pacotes abaixo para gerar a nossa api rest automaticamente.

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Designdotnet add package Microsoft.EntityFrameworkCore.Designdotnet add package Microsoft.EntityFrameworkCore.SqlServer

Gere o scaffolding do model Pet.cs

dotnet aspnet-codegenerator controller -name PetController -async -api -m Pet -dc DataContext -outDir Controllers

Observe o cdigo criado em Controllers/PetController.cs, foi criada uma operao de crud completo.

Execute o cdigo abaixo para rodar a aplicao.

dotnet run

Instale a extenso do vscode, Thunder Client ou utilize o postman para testar.

image

Utilize o endpoint https://localhost:5001/api/pet e alterne os mtodos GET (obter)/POST (criar)/PUT (atualizar)/DELETE (deletar)

image

Para encerrar o aplicativo, aperte ctrl + c no terminal.

Para permitir os teste do endpoint no aplicativo angular temos q liberar o cors. Em Startup.cs altere o mtodo Configure:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)        {            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();                app.UseSwagger();                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "api v1"));            }            // Comente esse trecho            // app.UseHttpsRedirection();            app.UseRouting();            // adicione esse trecho            app.UseCors(x => x                .AllowAnyOrigin()                .AllowAnyMethod()                .AllowAnyHeader());            app.UseAuthorization();            app.UseEndpoints(endpoints =>            {                endpoints.MapControllers();            });        }

Refatore o mtodo GetPet em Controllers/PetController.cs para compatibilidade com o contrato de api do po-ui: https://po-ui.io/guides/api#successMessagesForCollections

...        [HttpGet]        public async Task<ActionResult<dynamic>> GetPet()        {            var pets =  await _context.Pet.ToListAsync();            return new {                hasNext = false,                items = pets            };        }...

Nosso back-end est pronto!

Front-End

WebApp

Volte a raiz do projeto, a pasta src.

Esse projeto utiliza a verso Angular CLI: 12.0.1

Crie o projeto com o comando abaixo:

ng new app

Diga sim para a pergunta sobre criao de rota e escolha CSS como linguagem de estilo

Navegue at a pasta do aplicativo.

cd app

Adicione o pacote de ui do Po-UI

ng add @po-ui/ng-components

Diga sim para criao do procedimento e para criao de menu lateral

Adicione o pacote de template do PO-UI

ng add @po-ui/ng-templates

Componentes

crie o componente de leitura de dados

ng generate @po-ui/ng-templates:po-page-dynamic-table

quando perguntado, informe o nome PetTable

crie o componente de edio de dados

ng generate @po-ui/ng-templates:po-page-dynamic-edit

quando perguntado, informe o nome PetEdit

Rotas

Utilize o menu lateral do vscode e encontre o arquivo app/src/app/app-routing.module.ts

adicione os imports no topo do arquivo:

...import { PetEditComponent } from './pet-edit/pet-edit.component';import { PetTableComponent } from './pet-table/pet-table.component';...

No mesmo arquivo adicione as rotas:

...const routes: Routes = [  { path: 'new', component: PetEditComponent },  { path: 'edit/:id', component: PetEditComponent },  { path: 'table', component: PetTableComponent },  { path: '', pathMatch: 'full', redirectTo: 'table' },];...

altere o cdigo de app/src/app/app.component.html para adicionar elemento router-outlet (para dar suporte as rotas) e o ttulo do aplicativo

<div class="po-wrapper">  <po-toolbar p-title="Pet App"></po-toolbar>  <po-menu [p-menus]="menus"></po-menu>  <router-outlet></router-outlet></div>

altere o cdigo de app.component.ts para remover o cdigo desnecessrio e acrescentar a rota para tabela de pets no menu.

import { Component } from "@angular/core";import { PoMenuItem } from "@po-ui/ng-components";@Component({  selector: "app-root",  templateUrl: "./app.component.html",  styleUrls: ["./app.component.css"],})export class AppComponent {  readonly menus: Array<PoMenuItem> = [{ label: "Pets", link: "/table" }];}

Services

adicione a propriedade service em app/src/environments/environment.ts

export const environment = {  production: false,  service: 'http://localhost:5000/api/pet'};

altere o endpoint e as propriedades em app/src/app/pet-table/pet-table.component.ts

...// adicione esses importsimport { PoPageDynamicTableActions, PoPageDynamicTableField } from '@po-ui/ng-templates';import { environment } from 'src/environments/environment';@Component({  selector: 'app-pet-table',  templateUrl: './pet-table.component.html',  styleUrls: ['./pet-table.component.css']})export class PetTableComponent implements OnInit {  // Copie os cdigos abaixo  readonly apiService = environment.service;  readonly actions: PoPageDynamicTableActions = {    new: "/new",    edit: "/edit/:id",    remove: true,  };  readonly fields: Array<PoPageDynamicTableField> = [    { property: "id", label: "Id", key: true },    { property: "nome", label: "Nome" },    { property: "raca", label: "Raa" },    { property: "dono", label: "Dono" },  ];  ...

adicione a propriedade p-fields em app/src/app/pet-table/pet-table.component.html

<po-page-dynamic-table  p-title="PetTable"  [p-actions]="actions"  [p-service-api]="apiService"  [p-fields]="fields"></po-page-dynamic-table>

e em app/src/app/pet-edit/pet-edit.component.ts

...// adicione esses importsimport { PoPageDynamicEditActions, PoPageDynamicEditField } from '@po-ui/ng-templates';import { environment } from 'src/environments/environment';@Component({  selector: 'app-pet-edit',  templateUrl: './pet-edit.component.html',  styleUrls: ['./pet-edit.component.css']})export class PetEditComponent implements OnInit {  // copie os cdigos abaixo  readonly apiService = environment.service;  readonly fields: Array<PoPageDynamicEditField> = [    { property: "id", label: "Id", key: true, visible: false },    { property: "nome", label: "Nome" },    { property: "raca", label: "Raa" },    { property: "dono", label: "Dono" },  ];  public readonly actions: PoPageDynamicEditActions = {    save: "/table",    saveNew: "/new",  };...

adicione a propriedade p-actions em app/src/app/pet-edit/pet-edit.component.html

<po-page-dynamic-edit  p-title="PetEdit"  [p-service-api]="apiService"  [p-fields]="fields"  [p-actions]="actions"></po-page-dynamic-edit>

Pronto nosso front-end est pronto!

Para executar os dois projeto, crie uma nova aba do terminal e navegue at ..src/api e execute

dotnet run

em outra aba do terminal navegue at ..src/app e execute:

ng s -o

Eu utilizei o prprio terminal integrado com duas instancias:
image

Agora vamos testar!

Testes

No navegador foi aberto a pgina: http://localhost:4200/table

Veja toda estrutura que foi criada, isso incrvel!

image

Clique no boto novo e voc ser direcionado para a pgina com o formulrio de edio:

image

Preencha o formulrio e clique em salvar.

Voc ser redirecionado para pgina de tabela, repare que o dado foi includo, listado e apareceu uma notificao de sucesso.

image

Agora vamos atualizar esse dado:

Clique nos 3 pontinho no final da linha e depois em editar:

image

Altere o nome do dono e clique em salvar:

image

Voc ser redirecionado para pgina de tabela novamente e o dado foi alterado e uma nova notificao foi adicionada.

image

Agora vamos excluir o dado:

image

Uma janela de confirmao vai abrir, clique em confirmar:

image

Veja que o item j no aparece mais e uma notificao foi adicionada.

image

O Post ficou um pouco grande, mas a replicao desse projeto rpido.

O PO-UI uma biblioteca fantstica!!!
Veja que criamos uma estrutura de crud, notificao e navegao de forma muito rpida e com pouco cdigo! Confira todos os componentes no portal deles.

Espero que isso te ajude!


Original Link: https://dev.to/silverio27/net-angular-poui-fullstackplaygroung-4f1d

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To