Skip to content
This repository has been archived by the owner on Nov 24, 2024. It is now read-only.

Commit

Permalink
analytic
Browse files Browse the repository at this point in the history
  • Loading branch information
Olegogonich committed Nov 23, 2024
1 parent ce539f0 commit e2afd46
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 28 deletions.
26 changes: 23 additions & 3 deletions apps/backend/src/lib/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from flask_cors import CORS, cross_origin

from apps.backend.src.lib.classes import Event, User
from lib.utils import get_latest_event_from_history
from lib.utils import get_latest_event_from_history, make_analytic_text_from_history
from lib.db import DB
from lib.events import events

Expand All @@ -16,32 +16,38 @@

app.secret_key = str(uuid.uuid4())


def get_db() -> DB:
db = getattr(g, '_database', None)
if db is None:
db = g._database = DB("db.db")
db.connect()
return db


def make_on_event_json_response(event: Event, user: User) -> dict:
return {"event": event.to_json(), "user": user.to_json()}


@app.after_request
def apply_caching(response: Response):
response.headers['Access-Control-Allow-Credentials'] = 'true'
return response


@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close_db()


def get_random_event():
events_list = list(events.values())
randindex = randrange(0, len(events_list))
return events_list[randindex]


@app.route('/event', methods=['POST'])
@cross_origin()
def get_data():
Expand All @@ -55,6 +61,8 @@ def get_data():
db = get_db()
user = db.get_user(user_id)

print(f"user: {user.to_json()}")

if not data:
event = get_random_event()
print(f"returned event: {event.to_json()}")
Expand All @@ -72,8 +80,6 @@ def get_data():

db.add_answer_to_user_history(_id=user_id, answer_id=answer._id)

print(f"user: {user.to_json()}")

print(f"answer: {answer.to_json()}")

event = get_random_event()
Expand Down Expand Up @@ -154,3 +160,17 @@ def session():
response = make_response('Cookie deleted successfully')
response.set_cookie('user_id', '', expires=0)
return response


@app.route("/analytic", methods=['GET'])
def get_analytic():
user_id = request.cookies.get('user_id')
if not user_id:
return "No user"

db = get_db()
user = db.get_user(user_id)

text = make_analytic_text_from_history(user.history)

return {"analytic": text}
8 changes: 5 additions & 3 deletions apps/backend/src/lib/classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,24 @@ def __init__(self, data):
self._id, self.money, self.credit, self.history = data

def to_json(self):
return {'_id': self._id, 'money': self.money, 'credit': self.credit, 'history': self.history, 'image': 'home'}
return {'_id': self._id, 'money': self.money, 'credit': self.credit, 'history': self.history}


class Event:
def __init__(self, _id, description, answers, delta_money=0):
def __init__(self, _id, description, answers, delta_money=0, image="home"):
self._id = _id
self.description = description
self.delta_money = delta_money
self.answers = answers
self.image = image

def to_json(self):
return {
"id": self._id,
"description": self.description,
"answers": {_id: answer.to_json() for _id, answer in self.answers.items()},
"delta_money": self.delta_money
"delta_money": self.delta_money,
"image": self.image
}


Expand Down
44 changes: 22 additions & 22 deletions apps/backend/src/lib/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,73 +6,73 @@
description="У вас есть немного лишних денег, что Вы предпримете для улучшения своего бизнеса?",
delta_money=0,
answers={
"1": Answer(_id="1", text="Заплатить профессиональному повару, чтобы он разработал новые вариации шаурмы", chance_bad=20, delta_money=-5000),
"2": Answer(_id="2", text="Потратить их на скины в DOTA 2", chance_bad=80),
"3": Answer(_id="3", text="Начать использовать более дорогие и качественные продукты", chance_bad=0, delta_money=-7000)
"1": Answer(_id="1", text="Заплатить профессиональному повару, чтобы он разработал новые вариации шаурмы", chance_bad=20, delta_money=-5000, analytic_text="analytic"),
"2": Answer(_id="2", text="Потратить их на скины в DOTA 2", chance_bad=80, analytic_text="analytic"),
"3": Answer(_id="3", text="Начать использовать более дорогие и качественные продукты", chance_bad=0, delta_money=-7000, analytic_text="analytic")
}
),
"2": Event(
_id="2",
description="Появился новый поставщик шаурмы с более низкой ценой на мясо (ходят слухи что это собачатина). Согласны ли Вы перейти на нового поставщика?",
delta_money=0,
answers={
"1": Answer(_id="1", text="Перейти на нового поставщика", chance_bad=80, delta_money=2000),
"2": Answer(_id="2", text="Остаться с текущим поставщиком", chance_bad=0)
"1": Answer(_id="1", text="Перейти на нового поставщика", chance_bad=80, delta_money=2000, analytic_text="analytic"),
"2": Answer(_id="2", text="Остаться с текущим поставщиком", chance_bad=0, analytic_text="analytic")
}
),
"3": Event(
_id="3",
description="К сожалению, ваше арендное помещение нуждается в ремонте, Вам нужно решить как справиться с непредвиденными расходами:",
delta_money=0,
answers={
"1": Answer(_id="1", text="Взять кредит", chance_bad=20),
"2": Answer(_id="2", text="Сэкономить на зарплате работников", chance_bad=70)
"1": Answer(_id="1", text="Взять кредит", chance_bad=20, analytic_text="analytic"),
"2": Answer(_id="2", text="Сэкономить на зарплате работников", chance_bad=70, analytic_text="analytic")
}
),
"4": Event(
_id="4",
description="О вашей шаурмечной никто не знает, ваше предприятие нужнается в рекламе: ",
delta_money=0,
answers={
"1": Answer(_id="1", text="Заказать рекламу у популярного блогера", chance_bad=0, delta_money=-5000),
"2": Answer(_id="2", text="Принять участие в городской ярмарке", chance_bad=20)
"1": Answer(_id="1", text="Заказать рекламу у популярного блогера", chance_bad=0, delta_money=-5000, analytic_text="analytic"),
"2": Answer(_id="2", text="Принять участие в городской ярмарке", chance_bad=20, analytic_text="analytic")
}
),
"5": Event(
_id="5",
description="О вашей шаурмечной никто не знает, ваше предприятие нужнается в рекламе: ",
delta_money=0,
answers={
"1": Answer(_id="1", text="Заказать рекламу у популярного блогера", chance_bad=0, delta_money=-5000),
"2": Answer(_id="2", text="Принять участие в городской ярмарке", chance_bad=20)
"1": Answer(_id="1", text="Заказать рекламу у популярного блогера", chance_bad=0, delta_money=-5000, analytic_text="analytic"),
"2": Answer(_id="2", text="Принять участие в городской ярмарке", chance_bad=20, analytic_text="analytic")
}
),
"6": Event(
_id="6",
description="Был разработан новый соус, все ваши конкуренты уже используют его, но у вас недостаточно денег, что Вы будете делать? ",
delta_money=0,
answers={
"1": Answer(_id="1", text="Взять микрозайм для покупки соуса", chance_bad=20, delta_money=5000),
"2": Answer(_id="2", text="Ничего не делать", chance_bad=70)
"1": Answer(_id="1", text="Взять микрозайм для покупки соуса", chance_bad=20, delta_money=5000, analytic_text="analytic"),
"2": Answer(_id="2", text="Ничего не делать", chance_bad=70, analytic_text="analytic")
}
),
"7": Event(
_id="7",
description="Вы заметили, что ваш персонал слишком часто отлынивает от работы, что Вы предпримете?",
delta_money=0,
answers={
"1": Answer(_id="1", text="Платить им больше зп", chance_bad=0, delta_money=-5000),
"2": Answer(_id="2", text="Нанять польностью новый персонал", chance_bad=30)
"1": Answer(_id="1", text="Платить им больше зп", chance_bad=0, delta_money=-5000, analytic_text="analytic"),
"2": Answer(_id="2", text="Нанять польностью новый персонал", chance_bad=30, analytic_text="analytic")
}
),
"8": Event(
_id="8",
description="Вы обнаружили, что у вас есть немного лишних своих денег. Что Вы с ними сделаете?",
delta_money=0,
answers={
"1": Answer(_id="1", text="Инвестируете их в акции компании Z", chance_bad=10),
"2": Answer(_id="2", text="Купить аркану в DOTA 2", chance_bad=80),
"3": Answer(_id="3", text="Положить их на сберегательный счёт",chance_bad=0)
"1": Answer(_id="1", text="Инвестируете их в акции компании Z", chance_bad=10, analytic_text="analytic"),
"2": Answer(_id="2", text="Купить аркану в DOTA 2", chance_bad=80, analytic_text="analytic"),
"3": Answer(_id="3", text="Положить их на сберегательный счёт", chance_bad=0, analytic_text="analytic")
}
),
"9": Event(
Expand All @@ -81,17 +81,17 @@
delta_money=0,
answers={
"1": Answer(_id="1", text="Взять кредит", chance_bad=20),
"2": Answer(_id="2", text="Ограничить ненужные расходы", chance_bad=0),
"3": Answer(_id="3", text="Сэкономить на производстве", chance_bad=80)
"2": Answer(_id="2", text="Ограничить ненужные расходы", chance_bad=0, analytic_text="analytic"),
"3": Answer(_id="3", text="Сэкономить на производстве", chance_bad=80, analytic_text="analytic")
}
),
"10": Event(
_id="10",
description="Открылась новая шаурмечная неподалеку, предлагающая более низкие цены. Ваши действия:",
delta_money=0,
answers={
"1": Answer(_id="1", text="Тоже понизить цену на шаурму", chance_bad=40),
"2": Answer(_id="2", text="Провести маркетинговую кампанию", chance_bad=0, delta_money=-5000),
"1": Answer(_id="1", text="Тоже понизить цену на шаурму", chance_bad=40, analytic_text="analytic"),
"2": Answer(_id="2", text="Провести маркетинговую кампанию", chance_bad=0, delta_money=-5000, analytic_text="analytic"),
}
),
}
Expand Down
12 changes: 12 additions & 0 deletions apps/backend/src/lib/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,15 @@
def get_latest_event_from_history(history: str) -> Event:
_id = history.split(HISTORY_EVENT_SEP)[-1].split(HISTORY_ANSWER_SEP)[0]
return events.get(_id)

def make_analytic_text_from_history(history: str):
result = []
history = history.split(HISTORY_EVENT_SEP)

for pair in history:
ids = pair.split(HISTORY_ANSWER_SEP)
if len(ids) == 2:
event_id, answer_id = ids
result.append(events.get(event_id).answers.get(answer_id).analytic_text)

return result

0 comments on commit e2afd46

Please sign in to comment.