From 306f7d664e08de79e5daea1ee0ba234ac9a940cb Mon Sep 17 00:00:00 2001
From: Jens Christian Aanestad <jenscaa@stud.ntnu.no>
Date: Wed, 1 May 2024 14:31:31 +0200
Subject: [PATCH] refactor/Adapted BudgetView for new OpenAPI typescript
 generating

---
 src/api/index.ts                              |  12 +-
 src/api/models/ChallengeDTO.ts                |  14 +-
 src/api/models/CreateGoalDTO.ts               |   2 +-
 src/api/models/DailyChallengeProgressDTO.ts   |  10 -
 src/api/models/GoalDTO.ts                     |   7 +-
 src/api/services/GoalService.ts               |  54 ++++-
 src/api/services/LeaderboardService.ts        |  12 ++
 src/api/services/UserService.ts               | 193 ------------------
 src/assets/icons/calculator.svg               |  25 +++
 .../Budget/Modal/ConfirmDeleteModal.vue       |   4 +-
 .../Budget/Modal/ImportBudgetModal.vue        |   2 +-
 .../ConfigurationSteps/SuitableChallenges.vue |  59 +++---
 src/views/Budget/BudgetOverview.vue           |   8 +-
 src/views/Budget/BudgetView.vue               |  23 +--
 14 files changed, 152 insertions(+), 273 deletions(-)
 delete mode 100644 src/api/models/DailyChallengeProgressDTO.ts
 create mode 100644 src/assets/icons/calculator.svg

diff --git a/src/api/index.ts b/src/api/index.ts
index 0a46cc0..56778d8 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -11,6 +11,7 @@ export type { Account } from './models/Account';
 export type { AccountRequestDTO } from './models/AccountRequestDTO';
 export type { AccountResponseDTO } from './models/AccountResponseDTO';
 export type { AuthenticationResponse } from './models/AuthenticationResponse';
+export type { BadgeDTO } from './models/BadgeDTO';
 export type { BankAccountDTO } from './models/BankAccountDTO';
 export type { BankProfile } from './models/BankProfile';
 export type { BankProfileDTO } from './models/BankProfileDTO';
@@ -18,23 +19,25 @@ export type { BankProfileResponseDTO } from './models/BankProfileResponseDTO';
 export type { BudgetRequestDTO } from './models/BudgetRequestDTO';
 export type { BudgetResponseDTO } from './models/BudgetResponseDTO';
 export type { ChallengeDTO } from './models/ChallengeDTO';
+export { ChallengeTemplateDTO } from './models/ChallengeTemplateDTO';
 export type { ConfigurationDTO } from './models/ConfigurationDTO';
 export type { CreateGoalDTO } from './models/CreateGoalDTO';
-export type { DailyChallengeProgressDTO } from './models/DailyChallengeProgressDTO';
 export type { ExceptionResponse } from './models/ExceptionResponse';
 export type { ExpenseRequestDTO } from './models/ExpenseRequestDTO';
 export type { ExpenseResponseDTO } from './models/ExpenseResponseDTO';
 export type { FeedbackRequestDTO } from './models/FeedbackRequestDTO';
 export type { FeedbackResponseDTO } from './models/FeedbackResponseDTO';
 export type { GoalDTO } from './models/GoalDTO';
+export type { InventoryDTO } from './models/InventoryDTO';
+export type { ItemDTO } from './models/ItemDTO';
 export type { LeaderboardDTO } from './models/LeaderboardDTO';
 export type { LeaderboardEntryDTO } from './models/LeaderboardEntryDTO';
 export type { LoginRequest } from './models/LoginRequest';
-export { ParticipantDTO } from './models/ParticipantDTO';
-export type { ParticipantUserDTO } from './models/ParticipantUserDTO';
+export type { MarkChallengeDTO } from './models/MarkChallengeDTO';
 export type { PasswordResetDTO } from './models/PasswordResetDTO';
 export type { PasswordUpdateDTO } from './models/PasswordUpdateDTO';
 export type { ProfileDTO } from './models/ProfileDTO';
+export type { ProgressDTO } from './models/ProgressDTO';
 export type { SignUpRequest } from './models/SignUpRequest';
 export type { TransactionDTO } from './models/TransactionDTO';
 export type { UserDTO } from './models/UserDTO';
@@ -42,10 +45,13 @@ export type { UserUpdateDTO } from './models/UserUpdateDTO';
 
 export { AccountControllerService } from './services/AccountControllerService';
 export { AuthenticationService } from './services/AuthenticationService';
+export { BadgeService } from './services/BadgeService';
 export { BankProfileControllerService } from './services/BankProfileControllerService';
+export { BudgetService } from './services/BudgetService';
 export { FriendService } from './services/FriendService';
 export { GoalService } from './services/GoalService';
 export { ImageService } from './services/ImageService';
+export { ItemService } from './services/ItemService';
 export { LeaderboardService } from './services/LeaderboardService';
 export { TransactionControllerService } from './services/TransactionControllerService';
 export { UserService } from './services/UserService';
diff --git a/src/api/models/ChallengeDTO.ts b/src/api/models/ChallengeDTO.ts
index f5bd38d..3ccf0f0 100644
--- a/src/api/models/ChallengeDTO.ts
+++ b/src/api/models/ChallengeDTO.ts
@@ -2,13 +2,17 @@
 /* istanbul ignore file */
 /* tslint:disable */
 /* eslint-disable */
-import type { DailyChallengeProgressDTO } from './DailyChallengeProgressDTO';
+import type { ChallengeTemplateDTO } from './ChallengeTemplateDTO';
+import type { ProgressDTO } from './ProgressDTO';
 export type ChallengeDTO = {
     id?: number;
-    potentialSavingAmount?: number;
+    amount?: number;
     points?: number;
-    days?: number;
-    createdAt?: string;
-    dailyChallengeProgressList?: Array<DailyChallengeProgressDTO>;
+    checkDays?: number;
+    totalDays?: number;
+    startDate?: string;
+    endDate?: string;
+    challengeTemplate?: ChallengeTemplateDTO;
+    progressList?: Array<ProgressDTO>;
 };
 
diff --git a/src/api/models/CreateGoalDTO.ts b/src/api/models/CreateGoalDTO.ts
index 61eb045..2e6e535 100644
--- a/src/api/models/CreateGoalDTO.ts
+++ b/src/api/models/CreateGoalDTO.ts
@@ -3,7 +3,7 @@
 /* tslint:disable */
 /* eslint-disable */
 export type CreateGoalDTO = {
-    goalName?: string;
+    name?: string;
     description?: string;
     targetAmount?: number;
     targetDate?: string;
diff --git a/src/api/models/DailyChallengeProgressDTO.ts b/src/api/models/DailyChallengeProgressDTO.ts
deleted file mode 100644
index c7bda73..0000000
--- a/src/api/models/DailyChallengeProgressDTO.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type DailyChallengeProgressDTO = {
-    id?: number;
-    challengeDay?: number;
-    completedAt?: string;
-};
-
diff --git a/src/api/models/GoalDTO.ts b/src/api/models/GoalDTO.ts
index 004eb49..c24e9ab 100644
--- a/src/api/models/GoalDTO.ts
+++ b/src/api/models/GoalDTO.ts
@@ -3,16 +3,15 @@
 /* tslint:disable */
 /* eslint-disable */
 import type { ChallengeDTO } from './ChallengeDTO';
-import type { ParticipantDTO } from './ParticipantDTO';
+import type { UserDTO } from './UserDTO';
 export type GoalDTO = {
     id?: number;
-    goalName?: string;
+    name?: string;
     description?: string;
     targetAmount?: number;
     targetDate?: string;
-    completedAt?: string;
     createdAt?: string;
     challenges?: Array<ChallengeDTO>;
-    participants?: Array<ParticipantDTO>;
+    user?: UserDTO;
 };
 
diff --git a/src/api/services/GoalService.ts b/src/api/services/GoalService.ts
index 28ae857..0f0781e 100644
--- a/src/api/services/GoalService.ts
+++ b/src/api/services/GoalService.ts
@@ -4,12 +4,27 @@
 /* eslint-disable */
 import type { CreateGoalDTO } from '../models/CreateGoalDTO';
 import type { GoalDTO } from '../models/GoalDTO';
+import type { MarkChallengeDTO } from '../models/MarkChallengeDTO';
 import type { CancelablePromise } from '../core/CancelablePromise';
 import { OpenAPI } from '../core/OpenAPI';
 import { request as __request } from '../core/request';
 export class GoalService {
     /**
-     * @returns GoalDTO OK
+     * Get goals
+     * Get the goals of the authenticated user
+     * @returns GoalDTO Successfully retrieved the goals
+     * @throws ApiError
+     */
+    public static getGoals(): CancelablePromise<Array<GoalDTO>> {
+        return __request(OpenAPI, {
+            method: 'GET',
+            url: '/api/goals',
+        });
+    }
+    /**
+     * Create a goal
+     * Create a new goal
+     * @returns GoalDTO Successfully created a goal
      * @throws ApiError
      */
     public static createGoal({
@@ -19,29 +34,48 @@ export class GoalService {
     }): CancelablePromise<GoalDTO> {
         return __request(OpenAPI, {
             method: 'POST',
-            url: '/api/goal/createGoal',
+            url: '/api/goals',
             body: requestBody,
             mediaType: 'application/json',
         });
     }
     /**
-     * @returns GoalDTO OK
+     * Update a challenge
+     * Update a challenge day as completed
+     * @returns any Successfully updated the challenge
      * @throws ApiError
      */
-    public static getGoals(): CancelablePromise<Array<GoalDTO>> {
+    public static updateChallenge({
+        requestBody,
+    }: {
+        requestBody: MarkChallengeDTO,
+    }): CancelablePromise<any> {
         return __request(OpenAPI, {
-            method: 'GET',
-            url: '/api/goal/getGoals',
+            method: 'POST',
+            url: '/api/goals/update-challenge',
+            body: requestBody,
+            mediaType: 'application/json',
+            errors: {
+                401: `Day is already completed or day outside of range`,
+            },
         });
     }
     /**
-     * @returns GoalDTO OK
+     * Update challenge saving amount
+     * Update the challenge saving amount
+     * @returns any Successfully updated the challenge
      * @throws ApiError
      */
-    public static getGoal(): CancelablePromise<GoalDTO> {
+    public static updateChallengeAmount({
+        requestBody,
+    }: {
+        requestBody: MarkChallengeDTO,
+    }): CancelablePromise<any> {
         return __request(OpenAPI, {
-            method: 'GET',
-            url: '/api/goal/getGoal',
+            method: 'POST',
+            url: '/api/goals/update-challenge-amount',
+            body: requestBody,
+            mediaType: 'application/json',
         });
     }
 }
diff --git a/src/api/services/LeaderboardService.ts b/src/api/services/LeaderboardService.ts
index f77a3cc..8a38209 100644
--- a/src/api/services/LeaderboardService.ts
+++ b/src/api/services/LeaderboardService.ts
@@ -30,6 +30,18 @@ export class LeaderboardService {
             },
         });
     }
+    /**
+     * Get sum of total points globally
+     * Get the sum of the total points of all users globally
+     * @returns number Successfully retrieved total points
+     * @throws ApiError
+     */
+    public static getTotalPoints(): CancelablePromise<number> {
+        return __request(OpenAPI, {
+            method: 'GET',
+            url: '/api/leaderboard/total-points',
+        });
+    }
     /**
      * @returns LeaderboardDTO OK
      * @throws ApiError
diff --git a/src/api/services/UserService.ts b/src/api/services/UserService.ts
index 593418a..51df6e4 100644
--- a/src/api/services/UserService.ts
+++ b/src/api/services/UserService.ts
@@ -4,10 +4,6 @@
 /* eslint-disable */
 import type { Account } from '../models/Account';
 import type { BankAccountDTO } from '../models/BankAccountDTO';
-import type { BudgetRequestDTO } from '../models/BudgetRequestDTO';
-import type { BudgetResponseDTO } from '../models/BudgetResponseDTO';
-import type { ExpenseRequestDTO } from '../models/ExpenseRequestDTO';
-import type { ExpenseResponseDTO } from '../models/ExpenseResponseDTO';
 import type { FeedbackRequestDTO } from '../models/FeedbackRequestDTO';
 import type { FeedbackResponseDTO } from '../models/FeedbackResponseDTO';
 import type { PasswordResetDTO } from '../models/PasswordResetDTO';
@@ -95,76 +91,6 @@ export class UserService {
             },
         });
     }
-    /**
-     * Updates a budget
-     * Updates a budget based on the budget request
-     * @returns any Successfully updated budget
-     * @throws ApiError
-     */
-    public static updateBudget({
-        budgetId,
-        requestBody,
-    }: {
-        budgetId: number,
-        requestBody: BudgetRequestDTO,
-    }): CancelablePromise<Record<string, any>> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/api/budget/update/{budgetId}',
-            path: {
-                'budgetId': budgetId,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                500: `Budget is not found`,
-            },
-        });
-    }
-    /**
-     * Created/Updates an expense
-     * Creates/Updates a budget based on the budget request
-     * @returns any Successfully updated budget
-     * @throws ApiError
-     */
-    public static updateExpense({
-        budgetId,
-        requestBody,
-    }: {
-        budgetId: number,
-        requestBody: ExpenseRequestDTO,
-    }): CancelablePromise<Record<string, any>> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/api/budget/update/expense/{budgetId}',
-            path: {
-                'budgetId': budgetId,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                500: `Error updating expense`,
-            },
-        });
-    }
-    /**
-     * Create a new budget
-     * Create a new budget with based on the budget request
-     * @returns any Successfully created new budget
-     * @throws ApiError
-     */
-    public static createBudget({
-        requestBody,
-    }: {
-        requestBody: BudgetRequestDTO,
-    }): CancelablePromise<Record<string, any>> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/api/budget/create',
-            body: requestBody,
-            mediaType: 'application/json',
-        });
-    }
     /**
      * Update a profile
      * Update the profile of the authenticated user
@@ -306,123 +232,4 @@ export class UserService {
             url: '/api/users/get-feedback',
         });
     }
-    /**
-     * Get the list of budgets
-     * Get all budgets related to the authenticated user
-     * @returns BudgetResponseDTO Successfully got budgets
-     * @throws ApiError
-     */
-    public static getBudgetsByUser(): CancelablePromise<Array<BudgetResponseDTO>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/api/budget',
-        });
-    }
-    /**
-     * Get the budget
-     * Get budget by its id
-     * @returns BudgetResponseDTO Successfully got budget
-     * @throws ApiError
-     */
-    public static getBudget({
-        budgetId,
-    }: {
-        budgetId: number,
-    }): CancelablePromise<BudgetResponseDTO> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/api/budget/{budgetId}',
-            path: {
-                'budgetId': budgetId,
-            },
-            errors: {
-                500: `Budget is not found`,
-            },
-        });
-    }
-    /**
-     * Get the list of budgets
-     * Get all budgets related to the authenticated user
-     * @returns ExpenseResponseDTO Successfully got expenses
-     * @throws ApiError
-     */
-    public static getExpenses({
-        budgetId,
-    }: {
-        budgetId: number,
-    }): CancelablePromise<Array<ExpenseResponseDTO>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/api/budget/expenses/{budgetId}',
-            path: {
-                'budgetId': budgetId,
-            },
-        });
-    }
-    /**
-     * Get the expense
-     * Get expense by its id
-     * @returns ExpenseResponseDTO Successfully got expense
-     * @throws ApiError
-     */
-    public static getExpense({
-        expenseId,
-    }: {
-        expenseId: number,
-    }): CancelablePromise<ExpenseResponseDTO> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/api/budget/expense/{expenseId}',
-            path: {
-                'expenseId': expenseId,
-            },
-            errors: {
-                500: `Expense is not found`,
-            },
-        });
-    }
-    /**
-     * Deletes a budget
-     * Deletes a budget based on provided budget id
-     * @returns any Successfully deleted budget
-     * @throws ApiError
-     */
-    public static deleteBudget({
-        budgetId,
-    }: {
-        budgetId: number,
-    }): CancelablePromise<Record<string, any>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/api/budget/delete/{budgetId}',
-            path: {
-                'budgetId': budgetId,
-            },
-            errors: {
-                500: `Budget is not found`,
-            },
-        });
-    }
-    /**
-     * Deletes an expense
-     * Deletes an expense based on provided expense id
-     * @returns any Successfully deleted expense
-     * @throws ApiError
-     */
-    public static deleteExpense({
-        expenseId,
-    }: {
-        expenseId: number,
-    }): CancelablePromise<Record<string, any>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/api/budget/delete/expense/{expenseId}',
-            path: {
-                'expenseId': expenseId,
-            },
-            errors: {
-                500: `Expense is not found`,
-            },
-        });
-    }
 }
diff --git a/src/assets/icons/calculator.svg b/src/assets/icons/calculator.svg
new file mode 100644
index 0000000..6a7aa06
--- /dev/null
+++ b/src/assets/icons/calculator.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg fill="#FFF" height="40px" width="40px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+	 viewBox="0 0 460 460" xml:space="preserve">
+<g id="XMLID_241_">
+	<g>
+		<path d="M369.635,0H90.365C73.595,0,60,13.595,60,30.365v399.27C60,446.405,73.595,460,90.365,460h279.27
+			c16.77,0,30.365-13.595,30.365-30.365V30.365C400,13.595,386.405,0,369.635,0z M108.204,343.61v-43.196
+			c0-3.451,2.797-6.248,6.248-6.248h43.196c3.451,0,6.248,2.797,6.248,6.248v43.196c0,3.451-2.797,6.248-6.248,6.248h-43.196
+			C111.001,349.858,108.204,347.06,108.204,343.61z M108.204,256.61v-43.196c0-3.451,2.797-6.248,6.248-6.248h43.196
+			c3.451,0,6.248,2.797,6.248,6.248v43.196c0,3.451-2.797,6.248-6.248,6.248h-43.196C111.001,262.858,108.204,260.06,108.204,256.61
+			z M308.891,421H151.109c-11.046,0-20-8.954-20-20c0-11.046,8.954-20,20-20h157.782c11.046,0,20,8.954,20,20
+			C328.891,412.046,319.937,421,308.891,421z M208.402,294.165h43.196c3.451,0,6.248,2.797,6.248,6.248v43.196
+			c0,3.451-2.797,6.248-6.248,6.248h-43.196c-3.451,0-6.248-2.797-6.248-6.248v-43.196
+			C202.154,296.963,204.951,294.165,208.402,294.165z M202.154,256.61v-43.196c0-3.451,2.797-6.248,6.248-6.248h43.196
+			c3.451,0,6.248,2.797,6.248,6.248v43.196c0,3.451-2.797,6.248-6.248,6.248h-43.196C204.951,262.858,202.154,260.06,202.154,256.61
+			z M345.548,349.858h-43.196c-3.451,0-6.248-2.797-6.248-6.248v-43.196c0-3.451,2.797-6.248,6.248-6.248h43.196
+			c3.451,0,6.248,2.797,6.248,6.248v43.196h0C351.796,347.061,348.999,349.858,345.548,349.858z M345.548,262.858h-43.196
+			c-3.451,0-6.248-2.797-6.248-6.248v-43.196c0-3.451,2.797-6.248,6.248-6.248h43.196c3.451,0,6.248,2.797,6.248,6.248v43.196h0
+			C351.796,260.061,348.999,262.858,345.548,262.858z M354,149.637c0,11.799-9.565,21.363-21.363,21.363H127.364
+			C115.565,171,106,161.435,106,149.637V62.363C106,50.565,115.565,41,127.364,41h205.273C344.435,41,354,50.565,354,62.363V149.637
+			z"/>
+	</g>
+</g>
+</svg>
\ No newline at end of file
diff --git a/src/components/Budget/Modal/ConfirmDeleteModal.vue b/src/components/Budget/Modal/ConfirmDeleteModal.vue
index a0966b9..fe23e7f 100644
--- a/src/components/Budget/Modal/ConfirmDeleteModal.vue
+++ b/src/components/Budget/Modal/ConfirmDeleteModal.vue
@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { UserService } from '@/api'
+import { BudgetService } from '@/api'
 
 const emit = defineEmits(['errorEvent', 'deletedEvent'])
 const props = defineProps({
@@ -22,7 +22,7 @@ const props = defineProps({
  */
 const deleteBudget = async () => {
   try {
-    await UserService.deleteBudget({budgetId: props.budgetId})
+    await BudgetService.deleteBudget({budgetId: props.budgetId})
     emit('deletedEvent')
   } catch (error) {
     emit('errorEvent', error)
diff --git a/src/components/Budget/Modal/ImportBudgetModal.vue b/src/components/Budget/Modal/ImportBudgetModal.vue
index 47ab56b..dbd62af 100644
--- a/src/components/Budget/Modal/ImportBudgetModal.vue
+++ b/src/components/Budget/Modal/ImportBudgetModal.vue
@@ -41,7 +41,7 @@ const emitImportBudgetEvent = (budgetId: number) => {
                          :budget-amount="Number(item.budgetAmount)"
                          :expense-amount="Number(item.expenseAmount)"
                          @importBudgetEvent="emitImportBudgetEvent"
-          >
+                         data-bs-dismiss="modal">
           </MiniBudgetBox>
         </div>
       </div>
diff --git a/src/components/Configuration/ConfigurationSteps/SuitableChallenges.vue b/src/components/Configuration/ConfigurationSteps/SuitableChallenges.vue
index fdd4004..d37cf09 100644
--- a/src/components/Configuration/ConfigurationSteps/SuitableChallenges.vue
+++ b/src/components/Configuration/ConfigurationSteps/SuitableChallenges.vue
@@ -5,7 +5,7 @@ import Button1 from '@/components/Buttons/Button1.vue'
 import { ref } from 'vue'
 import { useConfigurationStore } from '@/stores/ConfigurationStore'
 import { useUserInfoStore } from '@/stores/UserStore'
-import { AuthenticationService, OpenAPI} from '@/api'
+import { AuthenticationService, Configuration, OpenAPI, type SignUpRequest } from '@/api'
 import handleUnknownError from '@/components/Exceptions/unkownErrorHandler'
 
 const router = useRouter();
@@ -15,12 +15,11 @@ const emit = defineEmits(['changeRouterEvent'])
 emit('changeRouterEvent', '/suitable-challenges')
 
 // Reactive variables for chosen challenges and error message.
-let chosenChallenges = ref([])
+let chosenChallenges = ref<string[]>([])
 let errorMsg = ref('')
 
 // Represents a list of available challenges.
-const challenges = ['Make packed lunch', 'Stop shopping', 'Drop coffee',
-  'Quit subscription', 'Drop car', 'Short showers', 'Exercise outside', 'Make budget']
+const challenges: string[] = ['NO_COFFEE' , 'NO_CAR' , 'SHORTER_SHOWER' , 'SPEND_LESS_ON_FOOD' , 'BUY_USED_CLOTHES' , 'LESS_SHOPPING' , 'DROP_SUBSCRIPTION' , 'SELL_SOMETHING' , 'BUY_USED' , 'EAT_PACKED_LUNCH' , 'STOP_SHOPPING' , 'ZERO_SPENDING' , 'RENT_YOUR_STUFF' , 'MEATLESS' , 'SCREEN_TIME_LIMIT' , 'UNPLUGGED_ENTERTAINMENT']
 
 /**
  * Handles the event when a challenge is selected or deselected.
@@ -40,38 +39,29 @@ const onChangedChallengeEvent = (value: never) => {
   console.log(chosenChallenges.value)
 }
 
+const convertEnumToText = (enumValue: String) => {
+  return enumValue.charAt(0).toUpperCase() + enumValue.slice(1).replace(/_/g, ' ').toLowerCase();
+}
+
 /**
  * Retrieves user configuration and signup information, sends a signup request to the backend.
  *
  * @throws {Error} Throws an error if signup fails.
  */
-const onClick = async () => {
+const signUpUser = async () => {
   try {
     // Saves the chosen challenges to the configuration store
     useConfigurationStore().setChallenges(chosenChallenges.value)
 
-    /*
-    TODO: 'changeWilling' are updated to 'commitment' in backend, must update it in frontend
-    const signUpPayLoad: SignUpRequest = {
-      changeWilling: useConfigurationStore().getCommitment,
-      experience: useConfigurationStore().getExperience,
-      challenges: useConfigurationStore().getChallenges,
+    const signUpPayLoad: SignUpRequest  = {
       firstName: useUserInfoStore().getFirstName,
       lastName: useUserInfoStore().getLastname,
       email: useUserInfoStore().getEmail,
       password: useUserInfoStore().getPassword,
-    };
-     */
-
-    const signUpPayLoad = {
-      "firstName": useUserInfoStore().getFirstName,
-      "lastName": useUserInfoStore().getLastname,
-      "email": useUserInfoStore().getEmail,
-      "password": useUserInfoStore().getPassword,
-      "configuration": {
-        "commitment": useConfigurationStore().getCommitment,
-        "experience": useConfigurationStore().getExperience,
-        "challenges": useConfigurationStore().getChallenges
+      configuration: {
+        commitment: useConfigurationStore().getCommitment,
+        experience: useConfigurationStore().getExperience,
+        challengeTypes: useConfigurationStore().getChallenges
       }
     };
 
@@ -93,6 +83,15 @@ const onClick = async () => {
   }
 }
 
+const handleSubmit = () => {
+  if (chosenChallenges.value.length === 0) {
+    chosenChallenges.value = challenges
+  }
+  useConfigurationStore().setChallenges(chosenChallenges.value)
+  console.log(useConfigurationStore().getChallenges)
+  router.push("/first-saving-goal")
+}
+
 </script>
 
 <template>
@@ -103,16 +102,18 @@ const onClick = async () => {
       </h3>
     </div>
 
-    <div class="challenge-container">
-      <ChallangeCheckBox v-for="(item, index) in challenges" :id="String(index)" :text="item"
-                         @challengeChangedEvent="onChangedChallengeEvent"
-      />
+    <div class="challenge-container row justify-content-center">
+      <ChallangeCheckBox v-for="(item, index) in challenges"
+                         :id="String(index)"
+                         :text="convertEnumToText(item)"
+                         :enum-value="item"
+                         @challengeChangedEvent="onChangedChallengeEvent"/>
     </div>
 
     <p class="text-danger">{{ errorMsg }}</p>
 
     <div class="confirm-button-container">
-      <button1 id="confirmButton" @click="onClick" button-text="Finish configuration"></button1>
+      <button1 id="confirmButton" @click="handleSubmit" button-text="Continue"/>
     </div>
   </div>
 </template>
@@ -126,10 +127,12 @@ const onClick = async () => {
 #confirmButton {
   margin-bottom: 2rem;
   width: 300px;
+  height: 38px;
 }
 
 .confirm-button-container {
   display: flex;
   justify-content: center;
 }
+
 </style>
\ No newline at end of file
diff --git a/src/views/Budget/BudgetOverview.vue b/src/views/Budget/BudgetOverview.vue
index 3219b78..cb8ebc1 100644
--- a/src/views/Budget/BudgetOverview.vue
+++ b/src/views/Budget/BudgetOverview.vue
@@ -4,7 +4,7 @@ import BudgetBox from '@/components/Budget/BudgetBox.vue'
 import { onMounted, ref } from 'vue'
 import handleUnknownError from '@/components/Exceptions/unkownErrorHandler'
 import { useBudgetStore } from '@/stores/BudgetStore'
-import { type BudgetRequestDTO, type BudgetResponseDTO, UserService } from '@/api'
+import { type BudgetRequestDTO, type BudgetResponseDTO, BudgetService } from '@/api'
 import { useRouter } from 'vue-router'
 
 const router = useRouter();
@@ -23,7 +23,7 @@ let budgetListKey = ref(0);
  */
 onMounted(async () => {
   try {
-    budgetList.value = await UserService.getBudgetsByUser()
+    budgetList.value = await BudgetService.getBudgetsByUser()
     console.log(budgetList.value)
   } catch (error) {
     errorMsg.value = handleUnknownError(error);
@@ -42,7 +42,7 @@ const createNewBudget = async() => {
       expenseAmount: 0
     }
     // Creates new budget with the budget request body
-    await UserService.createBudget({requestBody: request})
+    await BudgetService.createBudget({requestBody: request})
     // Updates displayed budget list after creation
     await updateBudgetList()
   } catch (error) {
@@ -54,7 +54,7 @@ const createNewBudget = async() => {
  * Updates the displayed budget list.
  */
 const updateBudgetList = async () => {
-  budgetList.value = await UserService.getBudgetsByUser()
+  budgetList.value = await BudgetService.getBudgetsByUser()
   budgetListKey.value++
 }
 
diff --git a/src/views/Budget/BudgetView.vue b/src/views/Budget/BudgetView.vue
index 7e4f8c4..555ad3d 100644
--- a/src/views/Budget/BudgetView.vue
+++ b/src/views/Budget/BudgetView.vue
@@ -4,8 +4,7 @@ import Button1 from '@/components/Buttons/Button1.vue'
 import ExpenseBox from '@/components/Budget/ExpenseBox.vue'
 import { useRouter } from 'vue-router'
 import { useBudgetStore } from '@/stores/BudgetStore'
-import type { BudgetResponseDTO, ExpenseRequestDTO, ExpenseResponseDTO } from '@/api'
-import { UserService } from '@/api'
+import { type BudgetResponseDTO, BudgetService, type ExpenseRequestDTO, type ExpenseResponseDTO } from '@/api'
 import handleUnknownError from '@/components/Exceptions/unkownErrorHandler'
 import ConfirmDeleteModal from '@/components/Budget/Modal/ConfirmDeleteModal.vue'
 import ImportBudgetModal from '@/components/Budget/Modal/ImportBudgetModal.vue'
@@ -43,7 +42,7 @@ onMounted(async () => {
     await updateExpenses();
     await updateBalance();
     // Gets budgets which can be imported
-    budgetDTOList.value = await UserService.getBudgetsByUser();
+    budgetDTOList.value = await BudgetService.getBudgetsByUser();
     budgetDTOList.value = budgetDTOList.value.filter(item => item.id !== useBudgetStore().getActiveBudgetId);
   } catch (error) {
     errorMsg.value = handleUnknownError(error);
@@ -56,7 +55,7 @@ onMounted(async () => {
  * budget amount, and expense amount accordingly.
  */
 const updateHeader = async () => {
-  const budgetResponse: BudgetResponseDTO = await UserService.getBudget({budgetId: useBudgetStore().getActiveBudgetId});
+  const budgetResponse: BudgetResponseDTO = await BudgetService.getBudget({budgetId: useBudgetStore().getActiveBudgetId});
   if (budgetResponse.budgetName != null) {
     title.value = budgetResponse.budgetName;
   }
@@ -73,7 +72,7 @@ const updateHeader = async () => {
  * Fetches the expenses associated with the active budget using the UserService.
  */
 const updateExpenses = async () => {
-  expenseDTOList.value = await UserService.getExpenses({budgetId: useBudgetStore().getActiveBudgetId});
+  expenseDTOList.value = await BudgetService.getExpenses({budgetId: useBudgetStore().getActiveBudgetId});
   // Resets expenses and then re-calculates it
   expenses.value = 0;
   for (let expenseDTO of expenseDTOList.value) {
@@ -113,7 +112,7 @@ const updateBudget = async (newBudget: number, newBudgetName: string) => {
       expenseAmount: expenses.value
     }
     // Send request to update budget information
-    await UserService.updateBudget({budgetId: useBudgetStore().getActiveBudgetId, requestBody: request})
+    await BudgetService.updateBudget({budgetId: useBudgetStore().getActiveBudgetId, requestBody: request})
   } catch (error) {
     errorMsg.value = handleUnknownError(error)
   }
@@ -135,7 +134,7 @@ const addNewExpense = async (expenseDescription: string, expenseValue: number) =
       amount: expenseValue
     }
     // Send request to update expense information
-    await UserService.updateExpense({budgetId: useBudgetStore().getActiveBudgetId, requestBody: request});
+    await BudgetService.updateExpense({budgetId: useBudgetStore().getActiveBudgetId, requestBody: request});
     // Trigger updates of expenses and balance and budget
     await updateExpenses();
     await updateBudget(budget.value, title.value)
@@ -154,7 +153,7 @@ const addNewExpense = async (expenseDescription: string, expenseValue: number) =
  */
 const deleteExpense = async (id: number) => {
   try {
-    await UserService.deleteExpense({expenseId: id});
+    await BudgetService.deleteExpense({expenseId: id});
     await updateExpenses();
     await updateBudget(budget.value, title.value)
     await updateBalance();
@@ -181,7 +180,7 @@ const editExpense = async (id: number, newDescription: string, newAmount: number
       amount: newAmount
     }
     // Send request to update the expense using the UserService
-    await UserService.updateExpense({budgetId: useBudgetStore().getActiveBudgetId, requestBody: request});
+    await BudgetService.updateExpense({budgetId: useBudgetStore().getActiveBudgetId, requestBody: request});
     await updateExpenses();
     await updateBudget(budget.value, title.value)
     await updateBalance();
@@ -198,18 +197,18 @@ const editExpense = async (id: number, newDescription: string, newAmount: number
 const importBudget = async (budgetId: number) => {
   try {
     // Update current budget value from the imported budget
-    const budgetResponse: BudgetResponseDTO = await UserService.getBudget({budgetId: budgetId});
+    const budgetResponse: BudgetResponseDTO = await BudgetService.getBudget({budgetId: budgetId});
     if (budgetResponse.budgetAmount != null) {
       budget.value += budgetResponse.budgetAmount;
     }
     // Get all the expenses from imported budget, and copy them to current budget
-    const expenses: ExpenseResponseDTO[] = await UserService.getExpenses({budgetId: budgetId})
+    const expenses: ExpenseResponseDTO[] = await BudgetService.getExpenses({budgetId: budgetId})
     for (let expense of expenses) {
       const expenseRequest: ExpenseRequestDTO = {
         description: expense.description,
         amount: Number(expense.amount) || 0
       }
-      await UserService.updateExpense({budgetId: useBudgetStore().getActiveBudgetId, requestBody: expenseRequest});
+      await BudgetService.updateExpense({budgetId: useBudgetStore().getActiveBudgetId, requestBody: expenseRequest});
     }
     // Update display and budget
     await updateExpenses();
-- 
GitLab