From eaeff0cc685d9c3c4ce0be35206ee490d49c6db8 Mon Sep 17 00:00:00 2001 From: bashzcrypt Date: Thu, 28 Mar 2024 16:06:41 +0530 Subject: [PATCH 1/2] endpoint for order added --- source/RewardsService/load_mongo_data.py | 2 +- .../handlers/rewards_handler.py | 88 ++++++++++++++++++- .../rewardsservice/url_patterns.py | 5 +- 3 files changed, 91 insertions(+), 4 deletions(-) diff --git a/source/RewardsService/load_mongo_data.py b/source/RewardsService/load_mongo_data.py index d2a67718..f3d1c690 100644 --- a/source/RewardsService/load_mongo_data.py +++ b/source/RewardsService/load_mongo_data.py @@ -3,7 +3,7 @@ def main(): - client = MongoClient("mongodb", 27017) + client = MongoClient("localhost", 27017) db = client["Rewards"] print("Removing and reloading rewards in mongo") diff --git a/source/RewardsService/rewardsservice/handlers/rewards_handler.py b/source/RewardsService/rewardsservice/handlers/rewards_handler.py index 4f2aea6e..61c67c4c 100644 --- a/source/RewardsService/rewardsservice/handlers/rewards_handler.py +++ b/source/RewardsService/rewardsservice/handlers/rewards_handler.py @@ -1,15 +1,99 @@ import json import tornado.web -from pymongo import MongoClient +from pymongo import MongoClient, ASCENDING from tornado.gen import coroutine +mongo_client = MongoClient("localhost", 27017) + class RewardsHandler(tornado.web.RequestHandler): @coroutine def get(self): - client = MongoClient("mongodb", 27017) + client = mongo_client db = client["Rewards"] rewards = list(db.rewards.find({}, {"_id": 0})) self.write(json.dumps(rewards)) + + + +class CalculateRewardsHandler(tornado.web.RequestHandler): + def initialize(self): + client = mongo_client #MongoClient("mongodb", 27017) + db = client["Rewards"] + self.db = db + + def post(self): + email = self.get_argument("email") + order_total = float(self.get_argument("order_total")) + + orders = self.calculate_rewards(email, order_total) + + # Store rewards data in MongoDB + self.db.orders.insert_one(orders) + + self.write({"success": True}) + + def calculate_rewards(self, email, order_total): + rewards_data = self.db.rewards.find().sort("points", ASCENDING) + + total_points = int(order_total) + current_tier = None + next_tier = None + for reward in rewards_data: + if total_points >= reward["points"]: + current_tier = reward + else: + next_tier = reward + break + next_tier_name = None + if current_tier: + next_tier_points = next_tier["points"] if next_tier else None + next_tier_name = next_tier["rewardName"] if next_tier else None + next_tier_progress = (next_tier_points - total_points) / (next_tier_points - current_tier["points"]) + if next_tier_progress < 0: + next_tier_progress = 0 + else: + current_tier = next_tier = None + next_tier_progress = None + + return { + "email": email, + "reward_points": total_points, + "reward_tier": current_tier["tier"] if current_tier else None, + "reward_tier_name": current_tier["rewardName"] if current_tier else None, + "next_reward_tier": next_tier["tier"] if next_tier else None, + "next_reward_tier_name": next_tier_name, + "next_reward_tier_progress": next_tier_progress + } + +class RetrieveCustomerRewardsHandler(tornado.web.RequestHandler): + def initialize(self): + client = mongo_client #MongoClient("mongodb", 27017) + db = client["Rewards"] + self.db = db + + def get(self, email): + rewards = self.db.orders.find_one({"email": email}) + if rewards: + del rewards["_id"] + self.write(rewards) + else: + self.set_status(404) + self.write({"error": "Rewards data not found for the provided email."}) + +class RetrieveAllCustomersRewardsHandler(tornado.web.RequestHandler): + def initialize(self): + client = mongo_client #MongoClient("mongodb", 27017) + db = client["Rewards"] + self.db = db + + def get(self): + orders = self.db.orders.find({}, {"_id": 0}) + # self.write(list(rewards)) + orders_list = list(orders) + orders_json = json.dumps(orders_list) # Convert list to JSON string + self.write(orders_json.encode()) # Encode JSON string to bytes and write to response + + diff --git a/source/RewardsService/rewardsservice/url_patterns.py b/source/RewardsService/rewardsservice/url_patterns.py index 55e471d6..fd15ea5a 100644 --- a/source/RewardsService/rewardsservice/url_patterns.py +++ b/source/RewardsService/rewardsservice/url_patterns.py @@ -1,5 +1,8 @@ -from handlers.rewards_handler import RewardsHandler +from handlers.rewards_handler import RewardsHandler, CalculateRewardsHandler, RetrieveCustomerRewardsHandler, RetrieveAllCustomersRewardsHandler url_patterns = [ (r'/rewards', RewardsHandler), + (r"/calculate_rewards", CalculateRewardsHandler), + (r"/retrieve_rewards/([^/]+)", RetrieveCustomerRewardsHandler), + (r"/retrieve_all_rewards", RetrieveAllCustomersRewardsHandler), ] From c5a66dadeee0ba7ee9ed76b81c9156dc6cf5c7da Mon Sep 17 00:00:00 2001 From: bashzcrypt Date: Thu, 28 Mar 2024 16:11:33 +0530 Subject: [PATCH 2/2] docker mongodb service config --- source/RewardsService/load_mongo_data.py | 2 +- .../RewardsService/rewardsservice/handlers/rewards_handler.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/RewardsService/load_mongo_data.py b/source/RewardsService/load_mongo_data.py index f3d1c690..d2a67718 100644 --- a/source/RewardsService/load_mongo_data.py +++ b/source/RewardsService/load_mongo_data.py @@ -3,7 +3,7 @@ def main(): - client = MongoClient("localhost", 27017) + client = MongoClient("mongodb", 27017) db = client["Rewards"] print("Removing and reloading rewards in mongo") diff --git a/source/RewardsService/rewardsservice/handlers/rewards_handler.py b/source/RewardsService/rewardsservice/handlers/rewards_handler.py index 61c67c4c..4410b66f 100644 --- a/source/RewardsService/rewardsservice/handlers/rewards_handler.py +++ b/source/RewardsService/rewardsservice/handlers/rewards_handler.py @@ -4,7 +4,7 @@ from pymongo import MongoClient, ASCENDING from tornado.gen import coroutine -mongo_client = MongoClient("localhost", 27017) +mongo_client = MongoClient("mongodb", 27017) class RewardsHandler(tornado.web.RequestHandler):