An Interest In:
Web News this Week
- April 1, 2024
- March 31, 2024
- March 30, 2024
- March 29, 2024
- March 28, 2024
- March 27, 2024
- March 26, 2024
.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.
Utilize o endpoint https://localhost:5001/api/pet e alterne os mtodos GET (obter)/POST (criar)/PUT (atualizar)/DELETE (deletar)
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:
Agora vamos testar!
Testes
No navegador foi aberto a pgina: http://localhost:4200/table
Veja toda estrutura que foi criada, isso incrvel!
Clique no boto novo e voc ser direcionado para a pgina com o formulrio de edio:
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.
Agora vamos atualizar esse dado:
Clique nos 3 pontinho no final da linha e depois em editar:
Altere o nome do dono e clique em salvar:
Voc ser redirecionado para pgina de tabela novamente e o dado foi alterado e uma nova notificao foi adicionada.
Agora vamos excluir o dado:
Uma janela de confirmao vai abrir, clique em confirmar:
Veja que o item j no aparece mais e uma notificao foi adicionada.
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
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To