Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: publishing an event when the purchase list is disabled and list… #199

Merged
merged 1 commit into from
Jul 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
(ns purchase-listinator.adapters.purchase-list.out.purchase-list-events
(:require [schema.core :as s]
[purchase-listinator.wires.purchase-list.out.purchase-list-events :as out.purchase-list-events]))

(s/defn ->PurchaseListDisabledEvent :- out.purchase-list-events/ListDisabledEvent
[list-id :- s/Uuid
user-id :- s/Uuid
moment :- s/Num
event-id :- s/Uuid]
{:purchase-list-id list-id
:user-id user-id
:moment moment
:event-id event-id})
4 changes: 2 additions & 2 deletions src/purchase_listinator/endpoints/http/purchase_list.clj
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@

(s/defn disable-purchase-lists :- {:status s/Int
:body {}}
[{{:keys [datomic]} :component
[{components :component
{id :id} :path-params
user-id :user-id}]
(branch (misc.either/try-right (-> (adapters.misc/string->uuid id)
(flows.purchase-list/disable (adapters.misc/string->uuid user-id) datomic)))
(flows.purchase-list/disable (adapters.misc/string->uuid user-id) components)))
misc.http/->Error
misc.http/->Success))

Expand Down
14 changes: 11 additions & 3 deletions src/purchase_listinator/flows/purchase_list.clj
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
[purchase-listinator.models.internal.purchase-list.purchase-list :as internal.purchase-list]
[purchase-listinator.logic.purchase-list :as logic.purchase-list]
[purchase-listinator.logic.purchase-category :as logic.purchase-category]
[cats.monad.either :refer [left left? right]]
[cats.monad.either :refer [left right]]
[purchase-listinator.misc.either :as either]
[purchase-listinator.publishers.purchase-list :as publishers.purchase-list]
[purchase-listinator.models.internal.purchase-list.purchase-list-management-data :as internal.purchase-list-management-data]))

(s/defn get-lists
Expand All @@ -31,13 +32,20 @@
(datomic.purchase-list/upsert datomic))))))


(s/defn owner-disabling-the-list
[list-id :- s/Uuid
user-id :- s/Uuid
{:keys [datomic rabbitmq]}]
(datomic.purchase-list/disable list-id datomic)
(publishers.purchase-list/purchase-list-disabled list-id user-id rabbitmq))

(s/defn disable
[list-id :- s/Uuid
user-id :- s/Uuid
datomic]
{:keys [datomic] :as components}]
(let [allowed-lists-ids (datomic.purchase-list/get-allowed-lists-by-user-id user-id datomic)]
(cond
(datomic.purchase-list/existent? list-id user-id datomic) (datomic.purchase-list/disable list-id datomic)
(datomic.purchase-list/existent? list-id user-id datomic) (owner-disabling-the-list list-id user-id components)
(some #{list-id} allowed-lists-ids) (-> (dbs.datomic.share/find-share-id user-id list-id datomic)
(dbs.datomic.share/remove datomic)
(and {:id list-id}))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
(ns purchase-listinator.modules.shopping-cart.adapters.in.purchase-list
(:require [schema.core :as s]
[purchase-listinator.modules.shopping-cart.schemas.wire.in.purchase-list :as shopping-cart.schemas.wire.in.purchase-list]
[purchase-listinator.modules.shopping-cart.schemas.internal.purchase-list :as shopping-cart.schemas.internal.purchase-list]))
(:require
[schema.core :as s]
[purchase-listinator.modules.shopping-cart.schemas.wire.in.purchase-list :as shopping-cart.schemas.wire.in.purchase-list]
[purchase-listinator.modules.shopping-cart.schemas.internal.purchase-list :as shopping-cart.schemas.internal.purchase-list]))

(s/defn wire-items->internal :- shopping-cart.schemas.internal.purchase-list/Item
[item :- shopping-cart.schemas.wire.in.purchase-list/Item]
Expand All @@ -15,4 +16,4 @@
(s/defn purchase-list-wire->internal :- shopping-cart.schemas.internal.purchase-list/PurchaseList
[{:keys [categories] :as purchase-list} :- shopping-cart.schemas.wire.in.purchase-list/PurchaseList]
(-> (assoc purchase-list :categories (map category-wire->internal categories))
(select-keys (keys shopping-cart.schemas.internal.purchase-list/purchase-list-skeleton))))
(select-keys (keys shopping-cart.schemas.internal.purchase-list/purchase-list-skeleton))))
Original file line number Diff line number Diff line change
@@ -1,34 +1,42 @@
(ns purchase-listinator.modules.shopping-cart.adapters.in.purchase-list-events
(:require [schema.core :as s]
[purchase-listinator.modules.shopping-cart.schemas.wire.in.purchase-list-events :as wire.in.purchase-list-events]
[purchase-listinator.modules.shopping-cart.schemas.internal.cart-events :as internal.purchase-list-events]))
(:require
[purchase-listinator.modules.shopping-cart.schemas.internal.purchase-list :as internal.purchase-list]
[schema.core :as s]
[purchase-listinator.modules.shopping-cart.schemas.wire.in.cart-events :as wire.in.cart-events]
[purchase-listinator.modules.shopping-cart.schemas.wire.in.purchase-list-events :as wire.in.purchase-list-events]

[purchase-listinator.modules.shopping-cart.schemas.internal.cart-events :as internal.purchase-list-events]))

(s/defn category-created-event->internal :- internal.purchase-list-events/PurchaseListCategoryCreated
[{:keys [event-id] :as wire} :- wire.in.purchase-list-events/PurchaseCategoryCreatedEvent]
[{:keys [event-id] :as wire} :- wire.in.cart-events/PurchaseCategoryCreatedEvent]
(-> (assoc wire :event-type :purchase-list-category-created
:id event-id)
(dissoc :event-id)))

(s/defn category-deleted-event->internal :- internal.purchase-list-events/PurchaseListCategoryDeleted
[{:keys [event-id] :as wire} :- wire.in.purchase-list-events/PurchaseCategoryDeletedEvent]
[{:keys [event-id] :as wire} :- wire.in.cart-events/PurchaseCategoryDeletedEvent]
(-> (assoc wire :event-type :purchase-list-category-deleted
:id event-id)
(dissoc :event-id)))

(s/defn item-created-event->internal :- internal.purchase-list-events/PurchaseListItemCreated
[{:keys [event-id] :as wire} :- wire.in.purchase-list-events/PurchaseItemCreatedEvent]
[{:keys [event-id] :as wire} :- wire.in.cart-events/PurchaseItemCreatedEvent]
(-> (assoc wire :event-type :purchase-list-item-created
:id event-id)
(dissoc :event-id)))

(s/defn item-deleted-event->internal :- internal.purchase-list-events/PurchaseListItemDeleted
[{:keys [event-id] :as wire} :- wire.in.purchase-list-events/PurchaseItemDeletedEvent]
[{:keys [event-id] :as wire} :- wire.in.cart-events/PurchaseItemDeletedEvent]
(-> (assoc wire :event-type :purchase-list-item-deleted
:id event-id)
(dissoc :event-id)))

(s/defn item-changed-event->internal :- internal.purchase-list-events/PurchaseListItemChanged
[{:keys [event-id] :as wire} :- wire.in.purchase-list-events/PurchaseItemChangedEvent]
[{:keys [event-id] :as wire} :- wire.in.cart-events/PurchaseItemChangedEvent]
(-> (assoc wire :event-type :purchase-list-item-changed
:id event-id)
(dissoc :event-id)))
(dissoc :event-id)))

(s/defn purchase-list-disabled-wire->internal :- internal.purchase-list/PurchaseListDisabled
[wire :- wire.in.purchase-list-events/ListDisabledEvent]
(select-keys wire (keys internal.purchase-list/purchase-list-disabled-skeleton)))
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
[purchase-listinator.modules.shopping-cart.schemas.wire.in.shopping :as wire.in.shopping]
[purchase-listinator.modules.shopping-cart.flows.cart :as flows.cart]
[schema.core :as s]
[purchase-listinator.modules.shopping-cart.schemas.wire.in.cart-events :as wire.in.cart-events]
[purchase-listinator.modules.shopping-cart.schemas.wire.in.purchase-list-events :as wire.in.purchase-list-events]
[purchase-listinator.modules.shopping-cart.adapters.in.purchase-list-events :as adapters.in.purchase-list-events]
[purchase-listinator.modules.shopping-cart.flows.cart-events-reception :as flows.cart-events-reception]))
Expand All @@ -11,39 +12,39 @@
[_channel
_metadata
components
event :- wire.in.purchase-list-events/PurchaseCategoryCreatedEvent]
event :- wire.in.cart-events/PurchaseCategoryCreatedEvent]
(-> (adapters.in.purchase-list-events/category-created-event->internal event)
(flows.cart-events-reception/receive-cart-event-by-list components)))

(s/defn purchase-list-category-deleted-event-received
[_channel
_metadata
components
event :- wire.in.purchase-list-events/PurchaseCategoryDeletedEvent]
event :- wire.in.cart-events/PurchaseCategoryDeletedEvent]
(-> (adapters.in.purchase-list-events/category-deleted-event->internal event)
(flows.cart-events-reception/receive-cart-event-by-list components)))

(s/defn purchase-list-item-created-event-received
[_channel
_metadata
components
event :- wire.in.purchase-list-events/PurchaseItemCreatedEvent]
event :- wire.in.cart-events/PurchaseItemCreatedEvent]
(-> (adapters.in.purchase-list-events/item-created-event->internal event)
(flows.cart-events-reception/receive-cart-event-by-list components)))

(s/defn purchase-list-item-deleted-event-received
[_channel
_metadata
components
event :- wire.in.purchase-list-events/PurchaseItemDeletedEvent]
event :- wire.in.cart-events/PurchaseItemDeletedEvent]
(-> (adapters.in.purchase-list-events/item-deleted-event->internal event)
(flows.cart-events-reception/receive-cart-event-by-list components)))

(s/defn purchase-list-item-changed-event-received
[_channel
_metadata
components
event :- wire.in.purchase-list-events/PurchaseItemChangedEvent]
event :- wire.in.cart-events/PurchaseItemChangedEvent]
(-> (adapters.in.purchase-list-events/item-changed-event->internal event)
(flows.cart-events-reception/receive-cart-event-by-list components)))

Expand All @@ -54,28 +55,42 @@
event :- wire.in.shopping/CloseShoppingEvent]
(flows.cart/close-cart event components))

(s/defn purchase-list-disabled-event-received
[_channel
_metadata
components
event :- wire.in.purchase-list-events/ListDisabledEvent]
(-> (adapters.in.purchase-list-events/purchase-list-disabled-wire->internal event)
(flows.cart/remove-list-cart components)))

(def subscribers
[{:exchange :purchase-listinator/purchase-list.category.created
:queue :shopping-cart/shopping-list.category.create
:schema wire.in.purchase-list-events/PurchaseCategoryCreatedEvent
:schema wire.in.cart-events/PurchaseCategoryCreatedEvent
:handler purchase-list-category-created-event-received}
{:exchange :purchase-listinator/purchase-list.category.deleted
:queue :shopping-cart/shopping-list.category.delete
:schema wire.in.purchase-list-events/PurchaseCategoryDeletedEvent
:schema wire.in.cart-events/PurchaseCategoryDeletedEvent
:handler purchase-list-category-deleted-event-received}
{:exchange :purchase-listinator/purchase-list.item.created
:queue :shopping-cart/shopping-list.item.create
:schema wire.in.purchase-list-events/PurchaseItemCreatedEvent
:schema wire.in.cart-events/PurchaseItemCreatedEvent
:handler purchase-list-item-created-event-received}
{:exchange :purchase-listinator/purchase-list.item.deleted
:queue :shopping-cart/shopping-list.item.deleted
:schema wire.in.purchase-list-events/PurchaseItemDeletedEvent
:schema wire.in.cart-events/PurchaseItemDeletedEvent
:handler purchase-list-item-deleted-event-received}
{:exchange :purchase-listinator/purchase-list.item.changed
:queue :shopping-cart/shopping-list.item.changed
:schema wire.in.purchase-list-events/PurchaseItemChangedEvent
:schema wire.in.cart-events/PurchaseItemChangedEvent
:handler purchase-list-item-changed-event-received}
{:exchange :purchase-listinator/shopping.finished
:queue :shopping-cart/shopping.finished
:schema wire.in.shopping/CloseShoppingEvent
:handler close-shopping-event-received}])
:handler close-shopping-event-received}
{:exchange :purchase-listinator/purchase-list.disabled
:queue :shopping-cart/purchase-list.disabled
:schema wire.in.purchase-list-events/ListDisabledEvent
:handler purchase-list-disabled-event-received}])


6 changes: 6 additions & 0 deletions src/purchase_listinator/modules/shopping_cart/flows/cart.clj
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
(:require
[purchase-listinator.logic.errors :as logic.errors]
[purchase-listinator.misc.general :as misc.general]
[purchase-listinator.modules.shopping-cart.schemas.internal.purchase-list :as internal.purchase-list]
[purchase-listinator.modules.shopping-cart.schemas.internal.shopping :as schemas.internal.shopping]
[purchase-listinator.modules.shopping-cart.schemas.wire.in.purchase-list :as modules.shopping-cart.schemas.wire.in.purchase-list]
[schema.core :as s]
Expand Down Expand Up @@ -51,3 +52,8 @@
(diplomat.db.redis/delete-global-cart list-id redis)
(diplomat.db.redis/delete-shopping-sessions list-id redis))
(producers.shopping-cart-event/shopping-cart-closed shopping all-events rabbitmq-channel))))

(s/defn remove-list-cart
[list-disabled :- internal.purchase-list/PurchaseListDisabled
components]
(clojure.pprint/pprint list-disabled))
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,11 @@
(def purchase-list-skeleton
{:id s/Uuid
:categories [Category]})
(s/defschema PurchaseList purchase-list-skeleton)
(s/defschema PurchaseList purchase-list-skeleton)

(def purchase-list-disabled-skeleton
{:event-id s/Uuid
:purchase-list-id s/Uuid
:moment s/Num
:user-id s/Uuid})
(s/defschema PurchaseListDisabled purchase-list-disabled-skeleton)
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
(ns purchase-listinator.modules.shopping-cart.schemas.wire.in.cart-events
(:require
[purchase-listinator.misc.schema :as misc.schema]
[schema.core :as s]
[purchase-listinator.modules.shopping-cart.schemas.internal.cart-events :as internal.cart-events]))

(misc.schema/loose-schema PurchaseCategoryCreatedEvent
(-> (assoc internal.cart-events/purchase-list-categoty-created-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))

(misc.schema/loose-schema PurchaseCategoryDeletedEvent
(-> (assoc internal.cart-events/purchase-list-category-deleted-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))

(misc.schema/loose-schema PurchaseItemCreatedEvent
(-> (assoc internal.cart-events/purchase-list-item-created-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))

(misc.schema/loose-schema PurchaseItemDeletedEvent
(-> (assoc internal.cart-events/purchase-item-deleted-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))

(misc.schema/loose-schema PurchaseItemChangedEvent
(-> (assoc internal.cart-events/purchase-item-changed-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@

(misc.schema/loose-schema PurchaseList
(assoc modules.shopping-cart.schemas.internal.purchase-list/purchase-list-skeleton
:categories [Category]))
:categories [Category]))
Original file line number Diff line number Diff line change
@@ -1,25 +1,6 @@
(ns purchase-listinator.modules.shopping-cart.schemas.wire.in.purchase-list-events
(:require
[purchase-listinator.misc.schema :as misc.schema]
[schema.core :as s]
[purchase-listinator.modules.shopping-cart.schemas.internal.cart-events :as internal.purchase-list-category-events]))
(:require [purchase-listinator.misc.schema :as misc.schema]
[purchase-listinator.modules.shopping-cart.schemas.internal.purchase-list :as modules.shopping-cart.schemas.internal.purchase-list]))

(misc.schema/loose-schema PurchaseCategoryCreatedEvent
(-> (assoc internal.purchase-list-category-events/purchase-list-categoty-created-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))

(misc.schema/loose-schema PurchaseCategoryDeletedEvent
(-> (assoc internal.purchase-list-category-events/purchase-list-category-deleted-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))

(misc.schema/loose-schema PurchaseItemCreatedEvent
(-> (assoc internal.purchase-list-category-events/purchase-list-item-created-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))

(misc.schema/loose-schema PurchaseItemDeletedEvent
(-> (assoc internal.purchase-list-category-events/purchase-item-deleted-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))

(misc.schema/loose-schema PurchaseItemChangedEvent
(-> (assoc internal.purchase-list-category-events/purchase-item-changed-skeleton :event-id s/Uuid)
(dissoc :id :event-type)))
(misc.schema/loose-schema ListDisabledEvent
modules.shopping-cart.schemas.internal.purchase-list/purchase-list-disabled-skeleton)
17 changes: 17 additions & 0 deletions src/purchase_listinator/publishers/purchase_list.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
(ns purchase-listinator.publishers.purchase-list
(:require
[purchase-listinator.misc.date :as misc.date]
[purchase-listinator.misc.general :as misc.general]
[schema.core :as s]
[purchase-listinator.adapters.purchase-list.out.purchase-list-events :as adapters.purchase-list.out.purchase-list-events]))

(s/defn purchase-list-disabled
[list-id :- s/Uuid
user-id :- s/Uuid
{:keys [publish]}]
(publish :purchase-listinator/purchase-list.disabled
(adapters.purchase-list.out.purchase-list-events/->PurchaseListDisabledEvent list-id
user-id
(misc.date/numb-now)
(misc.general/squuid)))
list-id)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
(ns purchase-listinator.wires.purchase-list.out.purchase-list-events
(:require [schema.core :as s]))

(s/defschema ListDisabledEvent
{:event-id s/Uuid
:purchase-list-id s/Uuid
:moment s/Num
:user-id s/Uuid})
Loading