From 3b3d14e454d1e7af1a241bfc49bdae1d4febee81 Mon Sep 17 00:00:00 2001 From: Ryan Kegel Date: Mon, 15 Dec 2025 15:08:27 -0500 Subject: [PATCH] added defaults for now. reworked tasks and pending rewards --- api/child_api.py | 2 +- db/default.py | 37 +++++++++++ main.py | 4 +- resources/images/candy.png | Bin 0 -> 49319 bytes .../src/components/child/ChildView.vue | 1 - .../src/components/child/ParentView.vue | 59 ++++++++++++++++++ .../src/components/reward/ChildRewardList.vue | 6 +- 7 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 resources/images/candy.png diff --git a/api/child_api.py b/api/child_api.py index 8bc4041..85b283f 100644 --- a/api/child_api.py +++ b/api/child_api.py @@ -512,7 +512,7 @@ def reward_status(id): #check to see if this reward id and child id is in the pending rewards db if so set its redeeming flag to true pending_query = Query() pending = pending_reward_db.get((pending_query.child_id == child.id) & (pending_query.reward_id == reward.id)) - status = RewardStatus(reward.id, reward.name, points_needed, reward.cost, pending, reward.image_id) + status = RewardStatus(reward.id, reward.name, points_needed, reward.cost, pending is not None, reward.image_id) statuses.append(status.to_dict()) statuses.sort(key=lambda s: s['cost']) diff --git a/db/default.py b/db/default.py index 4f17d38..ae6cda4 100644 --- a/db/default.py +++ b/db/default.py @@ -82,6 +82,42 @@ def populate_default_data(): "rewards": rewards } +def createDefaultTasks(): + """Create default tasks if none exist.""" + if len(task_db.all()) == 0: + default_tasks = [ + Task(name="Take out trash", points=2, is_good=True, image_id="trash-can"), + Task(name="Make your bed", points=2, is_good=True, image_id="make-the-bed"), + Task(name="Sweep and clean kitchen", points=2, is_good=True, image_id="vacuum"), + Task(name="Do homework early", points=2, is_good=True, image_id="homework"), + Task(name="Be good for the day", points=2, is_good=True, image_id="good"), + Task(name="Clean your mess", points=2, is_good=True, image_id="broom"), + + Task(name="Fighting", points=2, is_good=False, image_id="fighting"), + Task(name="Yelling at parents", points=2, is_good=False, image_id="yelling"), + Task(name="Lying", points=2, is_good=False, image_id="lying"), + Task(name="Not doing what told", points=2, is_good=False, image_id="ignore"), + Task(name="Not flushing toilet", points=2, is_good=False, image_id="toilet"), + ] + for task in default_tasks: + task_db.insert(task.to_dict()) + +def createDefaultRewards(): + """Create default rewards if none exist.""" + if len(reward_db.all()) == 0: + default_rewards = [ + Reward(name="Choose meal", description="Choose dinner or lunch", cost=3, image_id="meal"), + Reward(name="$1", description="Money is always nice", cost=8, image_id='money'), + Reward(name="$5", description="Even more money", cost=12, image_id='money'), + Reward(name="Tablet 1 hour", description="Play your games", cost=5, image_id='tablet'), + Reward(name="Computer with dad", description="Let's play a game together", cost=5, image_id='games-with-dad'), + Reward(name="Computer 1 hour", description="Minecraft or Terraria?", cost=5, image_id='computer-game'), + Reward(name="TV 1 hour", description="Too much is bad for you.", cost=5, image_id='tv'), + Reward(name="Candy from store", description="Yum!", cost=5, image_id='candy'), + ] + for reward in default_rewards: + reward_db.insert(reward.to_dict()) + def initializeImages(): """Initialize the image database with default images if empty.""" if len(image_db.all()) == 0: @@ -91,6 +127,7 @@ def initializeImages(): ('boy03', IMAGE_TYPE_PROFILE, '.png', True), ('boy04', IMAGE_TYPE_PROFILE, '.png', True), ('broom', IMAGE_TYPE_ICON, '.png', True), + ('candy', IMAGE_TYPE_ICON, '.png', True), ('computer-game', IMAGE_TYPE_ICON, '.png', True), ('fighting', IMAGE_TYPE_ICON, '.png', True), ('games-with-dad', IMAGE_TYPE_ICON, '.png', True), diff --git a/main.py b/main.py index 67cc52b..250b0aa 100644 --- a/main.py +++ b/main.py @@ -10,7 +10,7 @@ from api.task_api import task_api from config.version import get_full_version from events.broadcaster import Broadcaster from events.sse import sse_response_for_user, send_to_user -from db.default import initializeImages +from db.default import initializeImages, createDefaultTasks, createDefaultRewards # Configure logging once at application startup logging.basicConfig( @@ -63,6 +63,8 @@ def start_background_threads(): # TODO: implement users os.makedirs(get_user_image_dir("user123"), exist_ok=True) initializeImages() +createDefaultTasks() +createDefaultRewards() start_background_threads() diff --git a/resources/images/candy.png b/resources/images/candy.png new file mode 100644 index 0000000000000000000000000000000000000000..6851141b84ab730a9ec90803c959397ede4855c5 GIT binary patch literal 49319 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 literal 0 HcmV?d00001 diff --git a/web/vue-app/src/components/child/ChildView.vue b/web/vue-app/src/components/child/ChildView.vue index e1e79d6..ba4adfb 100644 --- a/web/vue-app/src/components/child/ChildView.vue +++ b/web/vue-app/src/components/child/ChildView.vue @@ -67,7 +67,6 @@ function handleChildRewardSet(event: Event) { function handleRewardRequest(event: Event) { const payload = event.payload as ChildRewardRequestEventPayload - console.log('Received child_reward_request event:', payload) const childId = payload.child_id const rewardId = payload.reward_id if (child.value && childId == child.value.id) { diff --git a/web/vue-app/src/components/child/ParentView.vue b/web/vue-app/src/components/child/ParentView.vue index c6c7c1e..1743af5 100644 --- a/web/vue-app/src/components/child/ParentView.vue +++ b/web/vue-app/src/components/child/ParentView.vue @@ -11,6 +11,7 @@ import type { Child, Event, Reward, + RewardStatus, ChildTaskTriggeredEventPayload, ChildRewardTriggeredEventPayload, ChildRewardRequestEventPayload, @@ -36,6 +37,7 @@ const selectedReward = ref(null) const childRewardListRef = ref() const childChoreListRef = ref() const childHabitListRef = ref() +const showPendingRewardDialog = ref(false) function handleTaskTriggered(event: Event) { const payload = event.payload as ChildTaskTriggeredEventPayload @@ -221,9 +223,50 @@ onUnmounted(() => { const triggerTask = (task: Task) => { selectedTask.value = task + const pendingRewardIds = childRewardListRef.value?.getPendingRewards() + if (pendingRewardIds && pendingRewardIds.length > 0) { + showPendingRewardDialog.value = true + return + } showConfirm.value = true } +async function cancelRewardById(rewardId: string) { + if (!child.value?.id) { + return + } + try { + await fetch(`/api/child/${child.value.id}/cancel-request-reward`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ reward_id: rewardId }), + }) + } catch (err) { + console.error(`Failed to cancel reward ID ${rewardId}:`, err) + } +} + +async function cancelPendingReward() { + if (!child.value?.id) { + showPendingRewardDialog.value = false + return + } + try { + const pendingRewardIds = childRewardListRef.value?.getPendingRewards() + await Promise.all(pendingRewardIds?.map((id: string) => cancelRewardById(id)) || []) + childRewardListRef.value?.refresh() + } catch (err) { + console.error('Failed to cancel pending reward:', err) + } finally { + showPendingRewardDialog.value = false + // After cancelling, proceed to trigger the task if one was selected + console.log('Proceeding to trigger task after cancelling pending rewards.', selectedTask.value) + if (selectedTask.value) { + showConfirm.value = true + } + } +} + const confirmTriggerTask = async () => { if (!child.value?.id || !selectedTask.value) return try { @@ -333,6 +376,22 @@ const childId = computed(() => child.value?.id ?? null) Assign Rewards + + + +