Skip to content

Instantly share code, notes, and snippets.

View gbzarelli's full-sized avatar
Coding...

Guilherme Biff Zarelli gbzarelli

Coding...
View GitHub Profile
@gbzarelli
gbzarelli / ArquiteturaHexagonal.md
Last active April 19, 2024 13:51
Exemplo de implementação da Arquitetura Hexagonal com garantias por testes unitários

Arquitetura Hexagonal

A Arquitetura Hexagonal promove a modularidade, flexibilidade e manutenibilidade do código, permitindo que as mudanças nos componentes externos não afetem diretamente a lógica de negócios. Essa abordagem é especialmente útil em sistemas nos quais a evolução das regras de negócio é frequente, e a capacidade de adaptação a mudanças é crucial.

Estrutura

A estrutura proposta por Alister Cockburn em seu artigo, visa o isolamento da camada de aplicação (core do negócio) fornecendo portas para as implementações de entrada e saída da aplicação, para atender os padrões propostos pela arquitetura, usamos o seguinte modelo de estrutura para implementação

image

@gbzarelli
gbzarelli / ThreadAwaitTermination.java
Last active March 22, 2024 14:34
Await termination many threads
public static void main(String[] args) throws InterruptedException {
ExecutorService pool = Executors.newFixedThreadPool(2);
pool.submit(() -> {
try {
Thread.sleep(5000);
} catch (Exception e) {
}
System.out.println("5s");
});
pool.submit(() -> {
@gbzarelli
gbzarelli / mongo-docker-compose.yml
Last active February 29, 2024 17:24
Initializing mongo db in docker-compose with init script
version: '3.8'
services:
# Database - Mongo DB
mongo:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: helpdev
MONGO_INITDB_ROOT_PASSWORD: 123456
@gbzarelli
gbzarelli / .OnBackPressedInFragment_ActivityUtils.kt
Last active January 29, 2024 02:50
Android - Adicionando onBackPressed com dois clicks no Fragment - Clicking the back button twice to exit in fragment
import android.os.CountDownTimer
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.FragmentActivity
import java.util.concurrent.atomic.AtomicBoolean
fun FragmentActivity.addOnBackPressedCallbackWithInterval(
millisToBack: Long,
firstPressed: () -> Unit
) {
onBackPressedDispatcher.addCallback(
@gbzarelli
gbzarelli / linux.md
Last active December 9, 2023 12:29
Linux Customize after install

after all

  • sudo apt-get update
  • sudo apt-get upgrade

basic installs:

  • sudo apt-get install git
  • sudo apt-get install tilix
  • sudo update-alternatives --config x-terminal-emulator

fish

@gbzarelli
gbzarelli / test_mock_input.py
Last active December 6, 2023 19:20
Python - Mock input() method
from unittest.mock import patch
@patch('builtins.input', lambda _: 'y') # <- value to be returned by input method
def test_should_be_the_correct_value(self):
# replace with your class or method to be tested:
value = input('enter with a value')
assert value == 'y'
@gbzarelli
gbzarelli / Order.java
Last active November 21, 2023 18:35
Domain model - Rich Sample
// Remoção nas notações globais do Lombook, deixando-as específicas e garantindo mais imutablidade para o domínio
public class Order {
// Considere a criação de objetos usando static factory
//Static factory para a criação de uma nova Order:
public static Order create(final OrderId orderId, final List<Product> items, final BigDecimal orderAmount) {
return new Order(orderId, items, null, orderAmount);
}
@gbzarelli
gbzarelli / Order.java
Last active November 21, 2023 14:24
Domain model - Anemic Sample
@AllArgsConstructor
@Getter
@Setter
public class Order {
private String id;
private List<Product> items;
private Payment payment;
@gbzarelli
gbzarelli / RabbitmqConnectionConfig.java
Created September 25, 2023 15:20
RabbitMQ - Graceful shutdown - Configure Shutdown timeout in rabbitmq
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitmqConnectionConfig {
private final AmazonS3 amazonS3;
private final KafkaTemplate<String, String> kafkaTemplate;
private final RedisTemplate<String, Integer> redisTemplate;
public static final String DEFAULT_KEY = "default-key";
public static final String KAFKA_TOPIC = "kafka-topic";
public static final String CSV_DELIMITER = ";";
public void readFile(String file) {
final var s3Object = amazonS3.getObject("/file-reader-bucket", file);