mirror of
https://github.com/aljazceru/python-teos.git
synced 2025-12-18 06:34:19 +01:00
Adds user database and modifies registered_user content to be a dict instead of an int
Future additional data may be stored, so it's better if we store it as something that can hold it
This commit is contained in:
@@ -28,9 +28,10 @@ class Gatekeeper:
|
|||||||
registered_users (:obj:`dict`): a map of user_pk:appointment_slots.
|
registered_users (:obj:`dict`): a map of user_pk:appointment_slots.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, default_slots):
|
def __init__(self, user_db, default_slots):
|
||||||
self.default_slots = default_slots
|
self.default_slots = default_slots
|
||||||
self.registered_users = {}
|
self.user_db = user_db
|
||||||
|
self.registered_users = user_db.load_all_users()
|
||||||
|
|
||||||
def add_update_user(self, user_pk):
|
def add_update_user(self, user_pk):
|
||||||
"""
|
"""
|
||||||
@@ -47,11 +48,13 @@ class Gatekeeper:
|
|||||||
raise ValueError("provided public key does not match expected format (33-byte hex string)")
|
raise ValueError("provided public key does not match expected format (33-byte hex string)")
|
||||||
|
|
||||||
if user_pk not in self.registered_users:
|
if user_pk not in self.registered_users:
|
||||||
self.registered_users[user_pk] = self.default_slots
|
self.registered_users[user_pk] = {"available_slots": self.default_slots}
|
||||||
else:
|
else:
|
||||||
self.registered_users[user_pk] += self.default_slots
|
self.registered_users[user_pk]["available_slots"] += self.default_slots
|
||||||
|
|
||||||
return self.registered_users[user_pk]
|
self.user_db.store_user(user_pk, self.registered_users[user_pk])
|
||||||
|
|
||||||
|
return self.registered_users[user_pk]["available_slots"]
|
||||||
|
|
||||||
def identify_user(self, message, signature):
|
def identify_user(self, message, signature):
|
||||||
"""
|
"""
|
||||||
@@ -95,9 +98,9 @@ class Gatekeeper:
|
|||||||
|
|
||||||
# We are not making sure the value passed is a integer, but the value is computed by the API and rounded before
|
# We are not making sure the value passed is a integer, but the value is computed by the API and rounded before
|
||||||
# passing it to the gatekeeper.
|
# passing it to the gatekeeper.
|
||||||
# DISCUSS: we may want to return a different exception if teh user does not exist
|
# DISCUSS: we may want to return a different exception if the user does not exist
|
||||||
if user_pk in self.registered_users and n <= self.registered_users.get(user_pk):
|
if user_pk in self.registered_users and n <= self.registered_users.get(user_pk).get("available_slots"):
|
||||||
self.registered_users[user_pk] -= n
|
self.registered_users[user_pk]["available_slots"] -= n
|
||||||
else:
|
else:
|
||||||
raise NotEnoughSlots(user_pk, n)
|
raise NotEnoughSlots(user_pk, n)
|
||||||
|
|
||||||
@@ -114,4 +117,4 @@ class Gatekeeper:
|
|||||||
# passing it to the gatekeeper.
|
# passing it to the gatekeeper.
|
||||||
# DISCUSS: if the user does not exist we may want to log or return an exception.
|
# DISCUSS: if the user does not exist we may want to log or return an exception.
|
||||||
if user_pk in self.registered_users:
|
if user_pk in self.registered_users:
|
||||||
self.registered_users[user_pk] += n
|
self.registered_users[user_pk]["available_slots"] += n
|
||||||
|
|||||||
Reference in New Issue
Block a user