feat: add /api/v1/sms-messages GET endpoint
This commit is contained in:
@@ -85,5 +85,15 @@ def get_sim_cards_by_device():
|
|||||||
return make_response(jsonify([s.to_dict() for s in db.get_sim_cards_by_device(cur, access_key)]), 200)
|
return make_response(jsonify([s.to_dict() for s in db.get_sim_cards_by_device(cur, access_key)]), 200)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/api/v1/sms-messages", methods=["GET"])
|
||||||
|
@jwt_required()
|
||||||
|
def get_sms_messages_by_local_phone_number():
|
||||||
|
if not is_primary(get_jwt()):
|
||||||
|
return make_response(jsonify(msg=msg_403_not_primary), 403)
|
||||||
|
|
||||||
|
local_phone_number = request.args.get("local_phone_number", None)
|
||||||
|
return make_response(jsonify([n.to_dict() for n in db.get_sms_messages_by_local_phone_number(cur, local_phone_number)]), 200)
|
||||||
|
|
||||||
|
|
||||||
def is_primary(jwt):
|
def is_primary(jwt):
|
||||||
return jwt["typ"] == "PRIMARY"
|
return jwt["typ"] == "PRIMARY"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from dto import Device, SimCard
|
from dto import Device, SimCard, SmsMessage
|
||||||
|
|
||||||
|
|
||||||
def get_all_devices(cur) -> list[Device]:
|
def get_all_devices(cur) -> list[Device]:
|
||||||
@@ -20,3 +20,14 @@ def get_sim_cards_by_device(cur, access_key: str) -> list[SimCard]:
|
|||||||
for item in sim_cards_from_db:
|
for item in sim_cards_from_db:
|
||||||
sim_cards.append(SimCard.convert(item))
|
sim_cards.append(SimCard.convert(item))
|
||||||
return sim_cards
|
return sim_cards
|
||||||
|
|
||||||
|
|
||||||
|
def get_sms_messages_by_local_phone_number(cur, local_phone_number: str) -> list[SmsMessage]:
|
||||||
|
if local_phone_number is None or not local_phone_number:
|
||||||
|
return []
|
||||||
|
|
||||||
|
msgs_from_db = cur.execute("SELECT * FROM messages WHERE local_phone_number = ?", (local_phone_number,)).fetchall()
|
||||||
|
msgs = []
|
||||||
|
for item in msgs_from_db:
|
||||||
|
msgs.append(SmsMessage.convert(item))
|
||||||
|
return msgs
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ class Device:
|
|||||||
device_type: str
|
device_type: str
|
||||||
name: str
|
name: str
|
||||||
|
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
return {
|
return {
|
||||||
'access_key': self.access_key,
|
'access_key': self.access_key,
|
||||||
@@ -13,6 +14,7 @@ class Device:
|
|||||||
'name': self.name
|
'name': self.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def convert(device_from_db) -> Device:
|
def convert(device_from_db) -> Device:
|
||||||
return Device(*device_from_db)
|
return Device(*device_from_db)
|
||||||
|
|
||||||
@@ -21,11 +23,36 @@ class SimCard:
|
|||||||
phone_number: str
|
phone_number: str
|
||||||
device_access_key: str
|
device_access_key: str
|
||||||
|
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
return {
|
return {
|
||||||
'phone_number': self.phone_number,
|
'phone_number': self.phone_number,
|
||||||
'device_access_key': self.device_access_key
|
'device_access_key': self.device_access_key
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def convert(sim_from_db) -> SimCard:
|
def convert(sim_from_db) -> SimCard:
|
||||||
return SimCard(*sim_from_db)
|
return SimCard(*sim_from_db)
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SmsMessage:
|
||||||
|
content: str
|
||||||
|
ts_received: int
|
||||||
|
ts_sent: int
|
||||||
|
msg_type: str
|
||||||
|
local_phone_number: str
|
||||||
|
remote_phone_number: str
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return {
|
||||||
|
'content': self.content,
|
||||||
|
'ts_received': self.ts_received,
|
||||||
|
'ts_sent': self.ts_sent,
|
||||||
|
'msg_type': self.msg_type,
|
||||||
|
'local_phone_number': self.local_phone_number,
|
||||||
|
'remote_phone_number': self.remote_phone_number
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def convert(sms_from_db) -> SmsMessage:
|
||||||
|
return SmsMessage(*sms_from_db)
|
||||||
|
|||||||
+11
-1
@@ -12,7 +12,11 @@ cur = con.cursor()
|
|||||||
|
|
||||||
# ID columns are not necessary - SQLite by default sets ROWID as INTEGER PRIMARY KEY which auto increments
|
# ID columns are not necessary - SQLite by default sets ROWID as INTEGER PRIMARY KEY which auto increments
|
||||||
cur.execute("CREATE TABLE devices(access_key, secret_key_hash, type, name)")
|
cur.execute("CREATE TABLE devices(access_key, secret_key_hash, type, name)")
|
||||||
cur.execute("CREATE TABLE messages(content, ts_received, ts_sent, sender, recipient)")
|
|
||||||
|
# type : INCOMING, OUTGOING
|
||||||
|
# local_phone_number : a SECONDARY device SIM's phone number
|
||||||
|
# remote_phone_number : a phone number or shortcode of the other party
|
||||||
|
cur.execute("CREATE TABLE messages(content, ts_received, ts_sent, type, local_phone_number, remote_phone_number)")
|
||||||
cur.execute("CREATE TABLE sim_events(sim_id, ts, note, cost, currency)")
|
cur.execute("CREATE TABLE sim_events(sim_id, ts, note, cost, currency)")
|
||||||
cur.execute("CREATE TABLE sim_cards(phone_number, device_access_key)")
|
cur.execute("CREATE TABLE sim_cards(phone_number, device_access_key)")
|
||||||
|
|
||||||
@@ -31,6 +35,12 @@ cur.execute("""
|
|||||||
('+422999888777', 'test_access_key2')
|
('+422999888777', 'test_access_key2')
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
cur.execute("""
|
||||||
|
INSERT INTO messages VALUES
|
||||||
|
('how are you?', 1000, 999, 'INCOMING', '+420123456789', '+10005558888'),
|
||||||
|
('i am fine', 2000, 1999, 'OUTGOING', '+420123456789', '+10005558888')
|
||||||
|
""")
|
||||||
|
|
||||||
con.commit()
|
con.commit()
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user