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