Skip to content
This repository has been archived by the owner on Apr 13, 2022. It is now read-only.

Implement CRUD operations for User Service #10

Merged
merged 9 commits into from
Nov 23, 2021
Merged
Show file tree
Hide file tree
Changes from 3 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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*firebase.json
*google_cloud.json
11 changes: 11 additions & 0 deletions services/user_service/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
FROM python:3.8

WORKDIR /user_service
OlegAndrus12 marked this conversation as resolved.
Show resolved Hide resolved

COPY requirements.txt .

RUN pip3 install -r requirements.txt

COPY . .
arihilmir marked this conversation as resolved.
Show resolved Hide resolved

CMD ["python3", "main.py"]
30 changes: 30 additions & 0 deletions services/user_service/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{ "users": [{
"name" : "oleh",
"username" : "andrus",
"pass" : "admin123",
"email" : "[email protected]",
"phone" : "123"
},
arihilmir marked this conversation as resolved.
Show resolved Hide resolved
{
"name" : "vova",
"username" : "pannuish",
"pass" : "admin123",
"email" : "[email protected]",
"phone" : "345"
},
{
"name" : "roman",
"username" : "levkovych",
"pass" : "admin123",
"email" : "[email protected]",
"phone" : "12"
},
{
"name" : "nikita",
"username" : "zhavoronkov",
"pass" : "admin123",
"email" : "[email protected]",
"phone" : "1331"
}
]
}
64 changes: 64 additions & 0 deletions services/user_service/database_connector.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import json
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

#implements CRUD operations interface
nikilark marked this conversation as resolved.
Show resolved Hide resolved
class DatabaseAdmin:

def __init__(self,databaseURL, credentials_path):
cred = credentials.Certificate(credentials_path)
firebase_admin.initialize_app(cred,
{
'databaseURL' : databaseURL,
})
self.__users_ref = db.reference("users")


def get_all_users(self):
return self.__users_ref.get()


def get_user_by_email(self, email):
for user_id in self.get_user_ids():
if email == self.__users_ref.child(user_id).child("email").get():
return self.__users_ref.child(user_id).get()
nikilark marked this conversation as resolved.
Show resolved Hide resolved


def get_user_ids(self):
ids = [i for i in self.__users_ref.get()]
return ids
OlegAndrus12 marked this conversation as resolved.
Show resolved Hide resolved


def save_user(self, user_info):
self.__users_ref.push(user_info)


def update_user(self, user_id, user_info):
self.__users_ref.child(user_id).set(user_info)

def delete_user_by_id(self, user_id):
self.__users_ref.child(user_id).delete()


def delete_user_by_email(self, email):
for i in self.__users_ref.get_user_ids():
if email == self.__users_ref.child(i).child("email").get():
self.delete_user_by_id(i)


def drop_users(self):
for user_id in self.get_user_ids():
self.__users_ref.child(user_id).delete()

databaseURL = "https://lohyna-user-service-default-rtdb.firebaseio.com"
credentials_path = "firebase.json"
database_manager = DatabaseAdmin(databaseURL, credentials_path)

with open("data.json", "r") as f:
users = json.load(f)['users']
for i in users:
database_manager.save_user(i)
f.close()

print(database_manager.get_all_records())
nikilark marked this conversation as resolved.
Show resolved Hide resolved
5 changes: 5 additions & 0 deletions services/user_service/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import subscriber
import publisher
import database_connector

print("User Service entry point")
22 changes: 22 additions & 0 deletions services/user_service/publisher.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import os
import json
from google.cloud import pubsub_v1

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/firebase.json"


project_id = "lohyna-user-service"
topic_id = "create_user"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_id)

data = {
1: "Data for the first method",
2: "Data for the second method",
}
message = json.dumps(data).encode("utf-8")

res = publisher.publish(topic_path, message)

print(f"published message: {res.result()}")
arihilmir marked this conversation as resolved.
Show resolved Hide resolved
2 changes: 2 additions & 0 deletions services/user_service/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
firebase_admin==5.0.3
google-cloud-pubsub
28 changes: 28 additions & 0 deletions services/user_service/subscriber.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import os
from google.cloud import pubsub_v1

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/firebase.json"
timeout = 2.0 #secs

subscriber = pubsub_v1.SubscriberClient()

subscription_path = 'projects/lohyna-user-service/subscriptions/create_user-sub'

print(f"Listening messages on {subscription_path}")


def callback(message):
print(f"Received message : {message}")
print(f"Data : {message.data}")
print(type(message))
message.ack()

user_pull = subscriber.subscribe(subscription_path, callback = callback)

with subscriber:
try:
user_pull.result()
except:
user_pull.cancel()
user_pull.result()

arihilmir marked this conversation as resolved.
Show resolved Hide resolved