Skip to content

Instantly share code, notes, and snippets.

View aasumitro's full-sized avatar
🌏

A. A. Sumitro aasumitro

🌏
View GitHub Profile
@aasumitro
aasumitro / auth.service.ts
Last active March 13, 2023 10:38
ANGULAR
import {Injectable} from '@angular/core';
import {CONFIGS} from '../config';
import {RestService} from './rest.service';
@Injectable({providedIn: "root"})
export class AuthRestService {
private pathResourceURL = CONFIGS.api.rest.path;
constructor(private restService: RestService) {}

What the heck is CQRS

CQRS (Command Query Responsibility Segregation (but with our current design/arch maybe this will be called Command–query separation 😀)) is a software design pattern that emphasizes the separation of a system's read and writes operations. Instead of using a single model to handle both queries and commands, CQRS advocates for the use of distinct models, each optimized for its specific task (Greg Young).

The main benefit of using CQRS is improved scalability and performance. Another important benefit of CQRS is improved maintainability and extensibility of the system. By separating the read and write concerns, CQRS promotes a more modular and decoupled architecture, making it easier to change or add new features without disrupting existing functionality.

So how to implement with our current arch?

1. Query

query

@aasumitro
aasumitro / validation.go
Last active February 23, 2023 02:39
Geography
type GeographyDetailForm struct {
TenantID string `json:"-" form:"-"`
Name string `form:"name" json:"name"`
Type string `form:"type" json:"type" default:"region"`
Countries []struct {
ID string `form:"id" json:"id"`
Code string `form:"code" json:"code"`
Name string `form:"name" json:"name"`
Type string `form:"type" json:"type" default:"country"`
Currency struct {
[
{
"id": "82bf26a6-9dd7-461b-a0c2-8d3e1a5e9b15",
"code": "AF",
"name": "Afghanistan",
"continent": "Asia",
"calling_code": "+93",
"currency": {
"code": "AFN",
"name": "Afghan afghani"
@aasumitro
aasumitro / ARCH.md
Created January 28, 2023 11:38
ARCH

single-app-db-pertenant

single-or-multiapp-with-single-db-pertenant

single-shard-app-db

single-app-db-pertenant-perservice

@aasumitro
aasumitro / README.md
Last active December 30, 2022 08:45
DATA TRANSFORMER

Data Transformer

@aasumitro
aasumitro / options-pattern.go
Created December 24, 2022 15:22
Design Pattern in GO
package main
import "fmt"
func main() {
dummy := NewDummy()
fmt.Println(dummy.Lorem)
fmt.Println(dummy.Ipsum)
dummy.Lorem = "test"
@aasumitro
aasumitro / index.html
Last active February 5, 2023 07:50
Pokewar main index.html script
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Pokewar - Pocket Monster Battleroyale</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script>
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner inputDetik = new Scanner(System.in);
System.out.print("Masukkan Detik: ");
int detikInputan = Integer.parseInt(inputDetik.nextLine());
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
int satuanAwal = 0;
int satuanAkhir = 0;
double panjangSatuan = 0;