Skip to content

Instantly share code, notes, and snippets.

View jeroenr's full-sized avatar

Jeroen Rosenberg jeroenr

View GitHub Profile
@jeroenr
jeroenr / logback.xml
Created July 25, 2017 19:42
Logback configuration splitting to stdout and stderr
<configuration>
<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
<target>System.err</target>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
@jeroenr
jeroenr / Chart.yaml
Last active August 9, 2023 07:19
Env specific helm deployment
name: my-app-chart
version: 0.0.1 # Use Jenkinsfile for versioning
description: My App
keywords:
- app
maintainers:
- name: Jeroen Rosenberg
email: jeroen.rosenberg@gmail.com
engine: gotpl
fun <T> List<T>.permutations(): List<List<T>> =
when {
size < 2 -> listOf(this)
size == 2 -> listOf(listOf(first(), last()), listOf(last(), first()))
else -> flatMap { element ->
(this - element).permutations().map { listOf(element) + it }
}
}
@jeroenr
jeroenr / ExchangeRateApiClient.kt
Created February 23, 2023 15:14
Example of a port and an adapter
// in Domain Module
data class ExchangeRateDto(val rate: BigDecimal, val currency: Currency)
interface ExchangeRateApiClientPort {
fun getRate(source: Currency, target: Currency): ExchangeRateDto
}
// in Infrastructure Module
class ExchangeRateApiClientAdapter : ExchangeRateApiClientPort {
override fun getRate(source: Currency, target: Currency): ExchangeRateDto {
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: prometheus
name: prometheus
data:
prometheus.yml: |
global:
evaluation_interval: 1m
@jeroenr
jeroenr / Gemfile
Created July 19, 2012 09:34
Make will_paginate generate ajax links
source 'https://rubygems.org'
gem 'rails', '3.2.3'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
@jeroenr
jeroenr / config.rb
Created May 14, 2012 15:17
Capistrano deployment script for play2 application
namespace :deploy do
task :restart do
stop
sleep 1
start
end
task :start do
targets = find_servers_for_task(current_task)
@jeroenr
jeroenr / DepositService.kt
Last active July 8, 2021 19:52
Example of service with many dependencies
@Service
class DepositService(
val userRepo: UserRepository,
val userAccountRepo: UserAccountRepository,
val exchangeApiClient: ExchangeApiClient,
val eventBus: EventBus
) {
@Transactional
fun deposit(userId: String, amount: BigDecimal, currency: String){
require(amount > BigDecimal.ZERO) { “Amount must be larger than 0” }
@jeroenr
jeroenr / DepositOrchestrationService.kt
Created July 8, 2021 19:22
Application Service example
open class DepositOrchestrationService(
private val depositService: DepositService,
private val userAccountRepositoryPort: UserAccountRepositoryPort,
private val userAccountEventPublisherPort: UserAccountEventPublisherPort
) {
@Transactional
open suspend fun deposit(request: DepositRequestDto): DepositResponseDto? =
userAccountRepositoryPort.findById(request.userId)?.let { userAccount ->
val oldBalance = userAccount.balance
val updated = depositService.deposit(userAccount, request.amount)
@jeroenr
jeroenr / DepositService.kt
Created July 8, 2021 19:15
Domain service example
class DepositService(private val exchangeRateApiClient: ExchangeRateApiClientPort) {
suspend fun deposit(userAccount: UserAccountDto, amount: Money): UserAccountDto {
require(amount.largerThanZero) { "Amount must be larger than 0" }
val rateToUsd = if (amount.currency != Currency.USD) {
exchangeRateApiClient.getRate(amount.currency, Currency.USD)
} else {
ExchangeRateDto(BigDecimal.ONE, Currency.USD)
}
val rateToPref = if (userAccount.balance.currency != Currency.USD) {
exchangeRateApiClient.getRate(Currency.USD, userAccount.balance.currency)