Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
oo7gabriel committed Dec 1, 2023
2 parents c928ae6 + cea5cf0 commit 20a6f7a
Show file tree
Hide file tree
Showing 11 changed files with 522 additions and 29 deletions.
46 changes: 46 additions & 0 deletions codigos/TemplateMethodValidation/TestTemplateMethod.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { classeConcreta } from "./classeConcreta";

const TestTemplateMethod = () => {
const instancia = new classeConcreta();
console.log("Primeiro Exemplo");
console.log("----------------");
instancia.template(
"01234-567",
"1234-5678-9012-3456",
"0123",
"456789",
1,
new Date("2023-11-30"),
"BlueDragon87",
"FireStorm23"
);
console.log("");

console.log("Segundo Exemplo");
instancia.template(
"10001",
"2468-1357-9753-8642",
"0789",
"987654",
2,
new Date("2023-11-01"),
"GoldenTiger64",
"SunsetRoar19"
);
console.log("");

console.log("Terceiro Exemplo");
instancia.template(
"01234-567",
"6543-2109-8765-4321",
"0234",
"345678",
1,
new Date("2022-11-30"),
"BlueDragon87",
"FireStorm23"
);
console.log("");
};

TestTemplateMethod();
36 changes: 36 additions & 0 deletions codigos/TemplateMethodValidation/classeAbstrata.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
export abstract class classeAbstrata {
template(
cep: string,
numero_cartao: string,
agencia: string,
conta: string,
identificador: number,
data: Date,
usuario: string,
senha: string
): void {
if (!this.AtenticacaoUsuario(identificador, usuario, senha)) return;
if (!this.ValidacaoPedido(identificador, data)) return;
if (!this.ValidacaoReembolso(identificador, numero_cartao, agencia, conta))
return;
if (!this.ValidacaoEnvioEndereco(identificador, cep)) return;

// Se todos os passos forem bem-sucedidos, continue a execução
console.log("Todos os passos foram validados com sucesso");
}

// Métodos abstratos que serão implementados pelas subclasses concretas
abstract AtenticacaoUsuario(
identificador: number,
usuario: string,
senha: string
): boolean;
abstract ValidacaoPedido(identificador: number, data: Date): boolean;
abstract ValidacaoReembolso(
identificador: number,
numero_cartao: string,
agencia: string,
conta: string
): boolean;
abstract ValidacaoEnvioEndereco(identificador: number, cep: string): boolean;
}
63 changes: 63 additions & 0 deletions codigos/TemplateMethodValidation/classeConcreta.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { classeAbstrata } from "./classeAbstrata";

const usuarioExemplo = {
nomeUsuario: "BlueDragon87",
senha: "FireStorm23",
};

let identificadorUsuario = 0;

export class classeConcreta extends classeAbstrata {
AtenticacaoUsuario(
identificador: number,
usuario: string,
senha: string
): boolean {
if (
usuario == usuarioExemplo.nomeUsuario &&
senha == usuarioExemplo.senha
) {
console.log(`Usuário Autenticado`);
identificadorUsuario = identificador;
return true;
}
return false;
}

ValidacaoPedido(identificador: number, data: Date): boolean {
const dataValida = new Date();
dataValida.setDate(dataValida.getDate() - 30);
if (dataValida <= data) {
console.log(`Pedido Válido para reembolso`);
return true;
}
return false;
}

ValidacaoReembolso(
identificador: number,
numero_cartao: string,
agencia: string,
conta: string
): boolean {
if (
(numero_cartao.length < 16 || numero_cartao.length > 13) &&
agencia.length == 4 &&
conta.length == 6
) {
console.log(`Metodo de reembolso é válido`);
return true;
}

return false;
}

ValidacaoEnvioEndereco(identificador: number, cep: string): boolean {
if (cep.length === 9) {
console.log(`CEP ${cep} é válido.`);
return true;
}

return false;
}
}
144 changes: 144 additions & 0 deletions codigos/TemplateMethodValidation/data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
export const pedido = [
{
identificador: "1",
id: 1,
nome: "Chainsaw Man Vol. 13",
preco: 27.68,
categoria: "Livro",
marca: "Planet Manga",
cor: "Amarelo",
data: "2022-11-30",
},
{
identificador: "1",
id: 2,
nome: "Smartwatch X-200",
preco: 199.99,
categoria: "Eletrônicos",
marca: "TechGear",
cor: "Preto",
data: "2023-11-30",
},
{
identificador: "2",
id: 3,
nome: "Tênis Corrida Speedster",
preco: 120.5,
categoria: "Calçados",
marca: "FastFeet",
cor: "Azul",
data: "2023-11-01",
},
{
identificador: "4",
id: 4,
nome: "Câmera ProShot 4K",
preco: 879.9,
categoria: "Fotografia",
marca: "LensMaster",
cor: "Cinza",
data: "2023-09-18",
},
];

export const usuario = [
{
identificador: "1",
usuario: "BlueDragon87",
senha: "FireStorm23",
},
{
identificador: "2",
usuario: "GoldenTiger64",
senha: "SunsetRoar19"
},
{
identificador: "3",
usuario: "SilverFox42",
senha: "MoonlightHowl57"
},
{
identificador: "4",
usuario: "CrystalWings91",
senha: "StarlightGaze36"
},
];

export const metodoReembolso = [
{
identificador: "1",
numero_cartao: "1234-5678-9012-3456",
agencia: "0123",
conta: "456789",
banco: "Banco A",
nome_titular: "Alice Silva",
chave_pix: "[email protected]"
},
{
identificador: "3",
numero_cartao: "9876-5432-1098-7654",
agencia: "0456",
conta: "123456",
banco: "Banco B",
nome_titular: "Carlos Oliveira",
chave_pix: "[email protected]"
},
{
identificador: "2",
numero_cartao: "2468-1357-9753-8642",
agencia: "0789",
conta: "987654",
banco: "Banco C",
nome_titular: "Elena Pereira",
chave_pix: "[email protected]"
},
{
identificador: "1",
numero_cartao: "6543-2109-8765-4321",
agencia: "0234",
conta: "345678",
banco: "Banco D",
nome_titular: "Gabriel Santos",
chave_pix: "[email protected]"
},
];

export const endereco = [
{
identificador: "1",
País: "Brasil",
Nome: "Ana Silva",
Endereço: "Rua das Flores, 123",
Cidade: "São Paulo",
CEP: "01234-567",
Telefone: "(11) 98765-4321"
},
{
identificador: "2",
País: "Estados Unidos",
Nome: "John Smith",
Endereço: "123 Main Street",
Cidade: "New York",
CEP: "10001",
Telefone: "(212) 555-1234"
},
{
identificador: "1",
País: "Canadá",
Nome: "Emily Johnson",
Endereço: "Maple Avenue, 456",
Cidade: "Toronto",
CEP: "M5J 2T8",
Telefone: "(416) 789-0123"
},
{
identificador: "2",
País: "Austrália",
Nome: "David Lee",
Endereço: "Ocean Street, 789",
Cidade: "Sydney",
CEP: "2000",
Telefone: "(02) 9876-5432"
},
];

Loading

0 comments on commit 20a6f7a

Please sign in to comment.