add events
This commit is contained in:
parent
7a5312c607
commit
f11c18f012
3 changed files with 164 additions and 6 deletions
141
create_events.py
Normal file
141
create_events.py
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
import os
|
||||
from dotenv import load_dotenv
|
||||
import psycopg2
|
||||
import uuid
|
||||
import json
|
||||
|
||||
load_dotenv()
|
||||
|
||||
conn_params = {
|
||||
"host": os.getenv("POSTGRES_HOST"),
|
||||
"port": os.getenv("POSTGRES_PORT"),
|
||||
"dbname": os.getenv("POSTGRES_DB"),
|
||||
"user": os.getenv("POSTGRES_USER"),
|
||||
"password": os.getenv("POSTGRES_PASSWORD"),
|
||||
}
|
||||
|
||||
|
||||
class User:
|
||||
|
||||
def __init__(self, cursor, name, age, hair_color):
|
||||
self.cursor = cursor
|
||||
self.id = uuid.uuid4()
|
||||
self.name = name
|
||||
self.age = age
|
||||
self.hair_color = hair_color
|
||||
|
||||
self._fire_created_user_event()
|
||||
|
||||
def update_user_details(self, name=None, age=None, hair_color=None):
|
||||
if name:
|
||||
self.name = name
|
||||
if age:
|
||||
self.age = age
|
||||
if hair_color:
|
||||
self.hair_color = hair_color
|
||||
|
||||
self._fire_updated_user_event()
|
||||
|
||||
def delete_user(self):
|
||||
self._fire_deleted_user_event()
|
||||
|
||||
def _fire_created_user_event(self):
|
||||
event = CreateUserEvent(self)
|
||||
self._fire_event(event)
|
||||
|
||||
def _fire_updated_user_event(self):
|
||||
event = UpdateUserEvent(self)
|
||||
self._fire_event(event)
|
||||
|
||||
def _fire_deleted_user_event(self):
|
||||
event = DeleteUserEvent(self)
|
||||
self._fire_event(event)
|
||||
|
||||
def _fire_event(self, event):
|
||||
query = f"INSERT INTO user_events (event_payload) VALUES ('{event.to_json()}')"
|
||||
self.cursor.execute(query)
|
||||
|
||||
|
||||
class CreateUserEvent:
|
||||
|
||||
def __init__(self, user):
|
||||
self._user = user
|
||||
|
||||
def to_json(self):
|
||||
return json.dumps(
|
||||
{
|
||||
"event_type": "user_created",
|
||||
"payload": {
|
||||
"id": self._user.id,
|
||||
"name": self._user.name,
|
||||
"age": self._user.age,
|
||||
"hair_color": self._user.hair_color,
|
||||
},
|
||||
},
|
||||
default=str,
|
||||
)
|
||||
|
||||
|
||||
class UpdateUserEvent:
|
||||
def __init__(self, user):
|
||||
self._user = user
|
||||
|
||||
def to_json(self):
|
||||
return json.dumps(
|
||||
{
|
||||
"event_type": "user_updated",
|
||||
"payload": {
|
||||
"id": self._user.id,
|
||||
"name": self._user.name,
|
||||
"age": self._user.age,
|
||||
"hair_color": self._user.hair_color,
|
||||
},
|
||||
},
|
||||
default=str,
|
||||
)
|
||||
|
||||
|
||||
class DeleteUserEvent:
|
||||
def __init__(self, user):
|
||||
self._user = user
|
||||
|
||||
def to_json(self):
|
||||
return json.dumps(
|
||||
{
|
||||
"event_type": "user_deleted",
|
||||
"payload": {"id": self._user.id},
|
||||
},
|
||||
default=str,
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
try:
|
||||
# Connect to PostgreSQL
|
||||
conn = psycopg2.connect(**conn_params)
|
||||
cur = conn.cursor()
|
||||
|
||||
my_user = User(cursor=cur, name="John", age=95, hair_color="Gray")
|
||||
|
||||
my_user.update_user_details(age=96)
|
||||
|
||||
my_user.delete_user()
|
||||
|
||||
# Commit the transaction
|
||||
conn.commit()
|
||||
|
||||
print("Done")
|
||||
|
||||
except Exception as e:
|
||||
print("Error:", e)
|
||||
|
||||
finally:
|
||||
if cur:
|
||||
cur.close()
|
||||
if conn:
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue