Skip to content

Instantly share code, notes, and snippets.

@danielmarquesr
Last active October 6, 2022 15:17
Show Gist options
  • Save danielmarquesr/2769dd49fc4c349895337815381fd76e to your computer and use it in GitHub Desktop.
Save danielmarquesr/2769dd49fc4c349895337815381fd76e to your computer and use it in GitHub Desktop.
(ns aula9.exercicio
(:require [aula9.dados-banco :as data]))
;; 1 crie um átomo com o vetor dados banco.
(def clients-map
(atom
(reduce
(fn [acc item]
(assoc acc (:id item) item)) {} data/banco-db)))
(def clients (atom data/banco-db))
;; 2 crie uma função capaz de trazer um cliente de acordo com o seu id
(defn get-client-by-id-map
[clients id]
(get clients id))
(defn get-client-by-id
[clients client-id]
(first
(filter
(fn [{:keys [id]}] (= client-id id))
clients)))
(comment
(get-client-by-id-map @clients-map 2)
(get-client-by-id @clients 2)
(get-client-by-id-map @clients-map 100)
(get-client-by-id @clients 100)
)
;; 3 crie uma função que, dado um valor adiciona esse valor do saldo existente de um cliente dado id. A função deve printar o valor anterior do saldo
(defn add-new-value-map
[id new-value]
(let [old-client (get-client-by-id-map @clients-map id)]
(println old-client)
(swap!
clients-map
(fn [clients]
(update-in
clients
[id :saldo]
#(+ % new-value))))))
(defn add-new-value
[id new-value]
(let [old-client (get-client-by-id @clients id)
old-client-index (.indexOf @clients old-client)]
(println old-client)
(swap!
clients
(fn [clients]
(update-in
clients
[old-client-index :saldo]
#(+ % new-value))))))
(comment
(add-new-value-map 2 100)
(add-new-value 2 100)
)
;; 4 crie uma função que, dado um valor subtrai esse valor do saldo existente de um cliente dado id. A função deve printar o valor anterior do saldo
(comment
(add-new-value-map 2 -100)
(add-new-value 2 -100)
)
;; 5 crie uma função chamada 'transação' da qual você passa uma das operações (deposito/saque), o valor a ser depositado/retirado e efetua uma transação bancária.
(defn transacao-map
[operation value id]
(cond
(= operation :deposito) (add-new-value-map id value)
(= operation :saque) (add-new-value-map id (- value))))
(defn transacao
[operation value id]
(cond
(= operation :deposito) (add-new-value id value)
(= operation :saque) (add-new-value id (- value))))
(comment
(transacao-map :deposito 100 2)
(transacao-map :saque 100 2)
(transacao :deposito 100 2)
(transacao :saque 100 2)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment