diff --git a/finance-frontend/src/api/api.d.ts b/finance-frontend/src/api/api.d.ts index 7028e54..b57633c 100644 --- a/finance-frontend/src/api/api.d.ts +++ b/finance-frontend/src/api/api.d.ts @@ -1313,7 +1313,7 @@ export interface PathsDictionary { config?: AxiosRequestConfig ): OperationResponse } - ['/api/transactions/{transactionId}/schedule/create']: { + ['/api/transactions/{transactionId}/schedules/create']: { /** * createSchedule */ diff --git a/finance-frontend/src/api/openapi.json b/finance-frontend/src/api/openapi.json index c05b46b..d9375cf 100644 --- a/finance-frontend/src/api/openapi.json +++ b/finance-frontend/src/api/openapi.json @@ -1 +1 @@ -{"openapi":"3.0.1","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"http://localhost:8080","description":"Generated server url"}],"paths":{"/api/users/avatar":{"put":{"tags":["user-controller"],"operationId":"updateUserAvatar","requestBody":{"content":{"application/json":{"schema":{"required":["avatar"],"type":"object","properties":{"avatar":{"type":"string","format":"binary"}}}},"multipart/form-data":{"schema":{"required":["avatar"],"type":"object","properties":{"avatar":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK"}}}},"/api/vaults/{vaultId}/invitations":{"get":{"tags":["vault-controller"],"operationId":"getVaultInvitations","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultInvitationListResponse"}}}}}},"post":{"tags":["vault-controller"],"operationId":"createVaultInvitation","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultInvitationCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultInvitationResponse"}}}}}}},"/api/vaults/invitations/{invitationId}/accept":{"post":{"tags":["vault-controller"],"operationId":"acceptVaultInvitation","parameters":[{"name":"invitationId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}}},"/api/vaults/create":{"post":{"tags":["vault-controller"],"operationId":"createVault","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultResponse"}}}}}}},"/api/users/2fa/setup":{"post":{"tags":["user-controller"],"operationId":"requestUserTwoFactorSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupResponse"}}}}}}},"/api/users/2fa/setup/verify":{"post":{"tags":["user-controller"],"operationId":"verifyUserTwoFactorSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerifyRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/transactions/{vaultId}/import/csv":{"post":{"tags":["transaction-controller"],"operationId":"importTransactionsFromCsv","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"mappings","in":"query","required":true,"schema":{"type":"string"}},{"name":"separator","in":"query","required":true,"schema":{"type":"string"}},{"name":"applyTransactionMethod","in":"query","required":false,"schema":{"type":"string","enum":["CARD","BLIK","CASH"]}}],"requestBody":{"content":{"application/json":{"schema":{"required":["file"],"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK"}}}},"/api/transactions/{transactionId}/schedule/create":{"post":{"tags":["transaction-controller"],"operationId":"createSchedule","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleResponse"}}}}}}},"/api/transactions/{transactionId}/products/create":{"post":{"tags":["transaction-controller"],"operationId":"createTransactionProduct","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionProductCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionProductResponse"}}}}}}},"/api/transactions/image-analysis":{"post":{"tags":["transaction-controller"],"operationId":"analyzeImage","requestBody":{"content":{"application/json":{"schema":{"required":["file"],"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysedTransactionResponse"}}}}}}},"/api/transactions/create":{"post":{"tags":["transaction-controller"],"operationId":"createTransaction","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/api/products/create":{"post":{"tags":["product-controller"],"operationId":"createProduct","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}}}}},"/api/categories/create":{"post":{"tags":["category-controller"],"operationId":"createCategory","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryResponse"}}}}}}},"/api/authentication/register":{"post":{"tags":["authentication-controller"],"operationId":"register","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}}}},"/api/authentication/logout":{"post":{"tags":["authentication-controller"],"operationId":"logout","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}}}}},"/api/authentication/login":{"post":{"tags":["authentication-controller"],"operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthenticationLoginRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenResponse"}}}}}}},"/api/vaults/{vaultId}":{"delete":{"tags":["vault-controller"],"operationId":"removeVault","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}},"patch":{"tags":["vault-controller"],"operationId":"updateVault","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/vaults/{vaultId}/members/{userId}":{"delete":{"tags":["vault-controller"],"operationId":"removeVaultMember","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}},"patch":{"tags":["vault-controller"],"operationId":"updateVaultMember","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultMemberUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/users/update/password":{"patch":{"tags":["user-controller"],"operationId":"updateUserPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPasswordUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/users/update/email":{"patch":{"tags":["user-controller"],"operationId":"updateUserEmail","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserEmailUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/users/profile":{"patch":{"tags":["user-controller"],"operationId":"updateUserProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/transactions/{transactionId}":{"delete":{"tags":["transaction-controller"],"operationId":"deleteTransaction","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}},"patch":{"tags":["transaction-controller"],"operationId":"updateTransaction","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/products/{productId}":{"delete":{"tags":["product-controller"],"operationId":"deleteProduct","parameters":[{"name":"productId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}},"patch":{"tags":["product-controller"],"operationId":"updateProduct","parameters":[{"name":"productId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/vaults":{"get":{"tags":["vault-controller"],"operationId":"getVaults","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultListResponse"}}}}}}},"/api/vaults/{vaultPublicId}":{"get":{"tags":["vault-controller"],"operationId":"getVaultByPublicId","parameters":[{"name":"vaultPublicId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultResponse"}}}}}}},"/api/vaults/{vaultId}/role":{"get":{"tags":["vault-controller"],"operationId":"getVaultRole","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultRoleResponse"}}}}}}},"/api/vaults/{vaultId}/members":{"get":{"tags":["vault-controller"],"operationId":"getVaultMembers","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultMemberListResponse"}}}}}}},"/api/vaults/invitations/{userEmail}":{"get":{"tags":["vault-controller"],"operationId":"getVaultInvitationsByUserEmail","parameters":[{"name":"userEmail","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultInvitationListResponse"}}}}}}},"/api/users/{userId}/username":{"get":{"tags":["user-controller"],"operationId":"getUsernameByUserId","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsernameResponse"}}}}}}},"/api/users/verify":{"get":{"tags":["user-controller"],"operationId":"verifyUser","parameters":[{"name":"securityCode","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}}}}},"/api/users/verify/request":{"get":{"tags":["user-controller"],"operationId":"requestUserVerification","responses":{"200":{"description":"OK"}}}},"/api/users/update/request":{"get":{"tags":["user-controller"],"operationId":"requestUserUpdate","responses":{"200":{"description":"OK"}}}},"/api/users/avatar/{username}":{"get":{"tags":["user-controller"],"operationId":"getUserAvatar","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/transactions/{vaultId}":{"get":{"tags":["transaction-controller"],"operationId":"getTransactionsByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}}}}},"/api/transactions/{vaultId}/flows":{"get":{"tags":["transaction-controller"],"operationId":"getFlowsByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"transactionType","in":"query","required":false,"schema":{"type":"string","enum":["INCOMING","OUTGOING"]}},{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionFlowsResponse"}}}}}}},"/api/transactions/{vaultId}/flows/chart":{"get":{"tags":["transaction-controller"],"operationId":"getFlowsChart","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"transactionType","in":"query","required":false,"schema":{"type":"string","enum":["INCOMING","OUTGOING"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowsChartResponse"}}}}}}},"/api/transactions/{vaultId}/export":{"get":{"tags":["transaction-controller"],"operationId":"exportTransactions","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/api/transactions/{vaultId}/amount":{"get":{"tags":["transaction-controller"],"operationId":"getTransactionsAmountByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionAmountResponse"}}}}}}},"/api/transactions/schedules/{vaultId}":{"get":{"tags":["transaction-controller"],"operationId":"getSchedulesByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleListResponse"}}}}}}},"/api/products/{vaultId}":{"get":{"tags":["product-controller"],"operationId":"getProductsByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductListResponse"}}}}}}},"/api/config":{"get":{"tags":["configuration-controller"],"operationId":"getConfiguration","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationResponse"}}}}}}},"/api/categories/{categoryId}":{"get":{"tags":["category-controller"],"operationId":"getCategoryById","parameters":[{"name":"categoryId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryResponse"}}}}}},"delete":{"tags":["category-controller"],"operationId":"deleteCategory","parameters":[{"name":"categoryId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}}},"/api/categories/vault/{vaultId}":{"get":{"tags":["category-controller"],"operationId":"getCategoriesByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryListResponse"}}}}}}},"/api/authentication/details":{"get":{"tags":["authentication-controller"],"operationId":"getAuthenticationDetails","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}}}},"/api/audits/{vaultId}":{"get":{"tags":["audit-controller"],"operationId":"getAudits","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditListResponse"}}}}}}},"/api/vaults/{vaultId}/invitations/{userEmail}":{"delete":{"tags":["vault-controller"],"operationId":"removeVaultInvitation","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"userEmail","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/api/transactions/schedules/{scheduleId}":{"delete":{"tags":["transaction-controller"],"operationId":"deleteScheduleById","parameters":[{"name":"scheduleId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}}}},"components":{"schemas":{"VaultInvitationCreateRequest":{"required":["userEmail","vaultId"],"type":"object","properties":{"vaultId":{"type":"integer","format":"int32"},"userEmail":{"type":"string"}}},"VaultInvitationResponse":{"required":["expiresAt","id","userEmail","vault"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"vault":{"$ref":"#/components/schemas/VaultResponse"},"userEmail":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}}},"VaultResponse":{"required":["createdAt","currency","id","name","ownerId","publicId","transactionMethod"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"publicId":{"type":"string"},"ownerId":{"type":"integer","format":"int32"},"name":{"type":"string"},"currency":{"type":"string"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]}}},"VaultCreateRequest":{"required":["currency","name","transactionMethod"],"type":"object","properties":{"name":{"type":"string"},"currency":{"type":"string"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]}}},"TwoFactorSetupRequest":{"required":["securityCode"],"type":"object","properties":{"securityCode":{"type":"string"}}},"TwoFactorSetupResponse":{"required":["qrCodeImage","secret"],"type":"object","properties":{"qrCodeImage":{"type":"string"},"secret":{"type":"string"}}},"TwoFactorVerifyRequest":{"required":["oneTimePassword","secret"],"type":"object","properties":{"secret":{"type":"string"},"oneTimePassword":{"type":"string"}}},"ScheduleCreateRequest":{"required":["amount","description","interval"],"type":"object","properties":{"description":{"type":"string"},"interval":{"type":"string","enum":["HOUR","DAY","WEEK","MONTH","YEAR"]},"amount":{"type":"integer","format":"int32"}}},"ScheduleResponse":{"required":["amount","description","id","interval","nextExecution","transactionId"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"transactionId":{"type":"integer","format":"int32"},"description":{"type":"string"},"nextExecution":{"type":"string","format":"date-time"},"interval":{"type":"string","enum":["HOUR","DAY","WEEK","MONTH","YEAR"]},"amount":{"type":"integer","format":"int32"}}},"TransactionProductCreateRequest":{"required":["name","quantity","unitAmount"],"type":"object","properties":{"name":{"type":"string"},"categoryId":{"type":"integer","format":"int32"},"unitAmount":{"type":"number"},"quantity":{"type":"integer","format":"int32"}}},"TransactionProductResponse":{"required":["id","name","quantity","transactionId","unitAmount"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"transactionId":{"type":"integer","format":"int32"},"name":{"type":"string"},"categoryName":{"type":"string"},"unitAmount":{"type":"number"},"quantity":{"type":"integer","format":"int32"}}},"AnalysedTransactionProductResponse":{"required":["name","quantity","unitAmount"],"type":"object","properties":{"name":{"type":"string"},"unitAmount":{"type":"number"},"quantity":{"type":"integer","format":"int32"}}},"AnalysedTransactionResponse":{"required":["currency","description","products","total","transactionMethod"],"type":"object","properties":{"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]},"products":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/AnalysedTransactionProductResponse"}},"description":{"type":"string"},"total":{"type":"number"},"currency":{"type":"string"}}},"TransactionCreateRequest":{"required":["currency","description","price","products","transactionMethod","transactionType","vaultId"],"type":"object","properties":{"vaultId":{"type":"integer","format":"int32"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]},"transactionType":{"type":"string","enum":["INCOMING","OUTGOING"]},"description":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"products":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/TransactionProductCreateRequest"}}}},"TransactionProductListResponse":{"required":["products"],"type":"object","properties":{"products":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/TransactionProductResponse"}}}},"TransactionResponse":{"required":["createdAt","currency","id","products","total","totalInVaultCurrency","transactionMethod","transactionType","user","vaultId"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"user":{"$ref":"#/components/schemas/UserResponse"},"vaultId":{"type":"integer","format":"int32"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]},"transactionType":{"type":"string","enum":["INCOMING","OUTGOING"]},"products":{"$ref":"#/components/schemas/TransactionProductListResponse"},"description":{"type":"string"},"totalInVaultCurrency":{"type":"number"},"total":{"type":"number"},"currency":{"type":"string"}}},"UserResponse":{"required":["decimalSeparator","email","groupSeparator","id","isTwoFactorEnabled","username","verified"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"email":{"type":"string"},"username":{"type":"string"},"verified":{"type":"boolean"},"isTwoFactorEnabled":{"type":"boolean"},"decimalSeparator":{"type":"string"},"groupSeparator":{"type":"string"}}},"ProductCreateRequest":{"required":["name","vaultId"],"type":"object","properties":{"name":{"type":"string"},"vaultId":{"type":"integer","format":"int32"},"categoryId":{"type":"integer","format":"int32"}}},"ProductResponse":{"required":["id","name","vaultId"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"vaultId":{"type":"integer","format":"int32"},"categoryId":{"type":"integer","format":"int32"},"categoryName":{"type":"string"}}},"CategoryCreateRequest":{"required":["name","vaultId"],"type":"object","properties":{"name":{"type":"string"},"vaultId":{"type":"integer","format":"int32"}}},"CategoryResponse":{"required":["id","name","vaultId"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"vaultId":{"type":"integer","format":"int32"}}},"UserCreateRequest":{"required":["email","password","username"],"type":"object","properties":{"email":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}}},"Unit":{"type":"object"},"AuthenticationLoginRequest":{"required":["email","password"],"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"oneTimePassword":{"type":"string"}}},"AccessTokenResponse":{"required":["email","expiresAt","refreshTokenId","userId","value"],"type":"object","properties":{"value":{"type":"string"},"userId":{"type":"integer","format":"int32"},"refreshTokenId":{"type":"string"},"email":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}}},"VaultUpdateRequest":{"required":["currency","name","transactionMethod"],"type":"object","properties":{"name":{"type":"string"},"currency":{"type":"string"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]}}},"VaultMemberUpdateRequest":{"required":["vaultRole"],"type":"object","properties":{"vaultRole":{"type":"string","enum":["OWNER","MANAGER","MEMBER"]}}},"UserPasswordUpdateRequest":{"required":["newPassword","oldPassword","securityCode"],"type":"object","properties":{"securityCode":{"type":"string"},"oldPassword":{"type":"string"},"newPassword":{"type":"string"}}},"UserEmailUpdateRequest":{"required":["email","securityCode"],"type":"object","properties":{"securityCode":{"type":"string"},"email":{"type":"string"}}},"UserProfileUpdateRequest":{"required":["decimalSeparator","groupSeparator","username"],"type":"object","properties":{"username":{"type":"string"},"decimalSeparator":{"type":"string"},"groupSeparator":{"type":"string"}}},"TransactionUpdateRequest":{"required":["currency","total","transactionMethod","transactionType"],"type":"object","properties":{"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]},"transactionType":{"type":"string","enum":["INCOMING","OUTGOING"]},"description":{"type":"string"},"total":{"type":"number"},"currency":{"type":"string"}}},"ProductUpdateRequest":{"type":"object","properties":{"categoryId":{"type":"integer","format":"int32"}}},"VaultListResponse":{"required":["vaults"],"type":"object","properties":{"vaults":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/VaultResponse"}}}},"VaultRoleResponse":{"required":["name","permissions","weight"],"type":"object","properties":{"name":{"type":"string"},"weight":{"type":"integer","format":"int32"},"permissions":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["DETAILS_READ","DELETE","AUDIT_READ","SETTINGS_READ","SETTINGS_UPDATE","TRANSACTION_CREATE","TRANSACTION_READ","TRANSACTION_UPDATE","TRANSACTION_DELETE","SCHEDULE_CREATE","SCHEDULE_READ","SCHEDULE_DELETE","PRODUCT_CREATE","PRODUCT_READ","PRODUCT_UPDATE","PRODUCT_DELETE","CATEGORY_CREATE","CATEGORY_READ","CATEGORY_UPDATE","CATEGORY_DELETE","MEMBER_READ","MEMBER_UPDATE","MEMBER_REMOVE","MEMBER_INVITE_CREATE","MEMBER_INVITE_READ","MEMBER_INVITE_DELETE"]}}}},"VaultMemberListResponse":{"required":["vaultMembers"],"type":"object","properties":{"vaultMembers":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/VaultMemberResponse"}}}},"VaultMemberResponse":{"required":["id","user","vaultId","vaultRole"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"vaultId":{"type":"integer","format":"int32"},"user":{"$ref":"#/components/schemas/UserResponse"},"vaultRole":{"type":"string","enum":["OWNER","MANAGER","MEMBER"]}}},"VaultInvitationListResponse":{"required":["vaultInvitations"],"type":"object","properties":{"vaultInvitations":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/VaultInvitationResponse"}}}},"UsernameResponse":{"required":["username"],"type":"object","properties":{"username":{"type":"string"}}},"TransactionListResponse":{"required":["transactions"],"type":"object","properties":{"transactions":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/TransactionResponse"}}}},"Price":{"required":["amount","currency"],"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"}}},"TransactionAmountResponse":{"required":["amount"],"type":"object","properties":{"amount":{"type":"integer","format":"int32"}}},"TransactionFlowsResponse":{"required":["count","total"],"type":"object","properties":{"total":{"$ref":"#/components/schemas/Price"},"count":{"$ref":"#/components/schemas/TransactionAmountResponse"}}},"FlowsChartResponse":{"required":["categories","series"],"type":"object","properties":{"categories":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/components/schemas/FlowsChartSeries"}}}},"FlowsChartSeries":{"required":["data","name"],"type":"object","properties":{"name":{"type":"string"},"data":{"type":"array","items":{"type":"number"}}}},"ScheduleListResponse":{"required":["schedules"],"type":"object","properties":{"schedules":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/ScheduleResponse"}}}},"ProductListResponse":{"required":["products"],"type":"object","properties":{"products":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/ProductResponse"}}}},"ConfigurationResponse":{"required":["aiEnabled"],"type":"object","properties":{"aiEnabled":{"type":"boolean"}}},"CategoryListResponse":{"required":["categories"],"type":"object","properties":{"categories":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/CategoryResponse"}}}},"AuditListResponse":{"required":["audits"],"type":"object","properties":{"audits":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/AuditResponse"}}}},"AuditResponse":{"required":["auditAction","createdAt","description","id","user","vault"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"vault":{"$ref":"#/components/schemas/VaultResponse"},"user":{"$ref":"#/components/schemas/UserResponse"},"auditAction":{"type":"string","enum":["TRANSACTION_CREATED","TRANSACTION_UPDATED","TRANSACTION_DELETED","TRANSACTION_IMPORTED","TRANSACTION_EXPORTED","TRANSACTION_PRODUCT_CREATED","SCHEDULE_CREATED","SCHEDULE_DELETED","CATEGORY_CREATED","CATEGORY_DELETED","PRODUCT_CREATED","PRODUCT_UPDATED","PRODUCT_DELETED"]},"description":{"type":"string"}}}}}} \ No newline at end of file +{"openapi":"3.0.1","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"http://localhost:8080","description":"Generated server url"}],"paths":{"/api/users/avatar":{"put":{"tags":["user-controller"],"operationId":"updateUserAvatar","requestBody":{"content":{"application/json":{"schema":{"required":["avatar"],"type":"object","properties":{"avatar":{"type":"string","format":"binary"}}}},"multipart/form-data":{"schema":{"required":["avatar"],"type":"object","properties":{"avatar":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK"}}}},"/api/vaults/{vaultId}/invitations":{"get":{"tags":["vault-controller"],"operationId":"getVaultInvitations","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultInvitationListResponse"}}}}}},"post":{"tags":["vault-controller"],"operationId":"createVaultInvitation","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultInvitationCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultInvitationResponse"}}}}}}},"/api/vaults/invitations/{invitationId}/accept":{"post":{"tags":["vault-controller"],"operationId":"acceptVaultInvitation","parameters":[{"name":"invitationId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}}},"/api/vaults/create":{"post":{"tags":["vault-controller"],"operationId":"createVault","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultResponse"}}}}}}},"/api/users/2fa/setup":{"post":{"tags":["user-controller"],"operationId":"requestUserTwoFactorSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupResponse"}}}}}}},"/api/users/2fa/setup/verify":{"post":{"tags":["user-controller"],"operationId":"verifyUserTwoFactorSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerifyRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/transactions/{vaultId}/import/csv":{"post":{"tags":["transaction-controller"],"operationId":"importTransactionsFromCsv","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"mappings","in":"query","required":true,"schema":{"type":"string"}},{"name":"separator","in":"query","required":true,"schema":{"type":"string"}},{"name":"applyTransactionMethod","in":"query","required":false,"schema":{"type":"string","enum":["CARD","BLIK","CASH"]}}],"requestBody":{"content":{"application/json":{"schema":{"required":["file"],"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK"}}}},"/api/transactions/{transactionId}/schedules/create":{"post":{"tags":["transaction-controller"],"operationId":"createSchedule","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleResponse"}}}}}}},"/api/transactions/{transactionId}/products/create":{"post":{"tags":["transaction-controller"],"operationId":"createTransactionProduct","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionProductCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionProductResponse"}}}}}}},"/api/transactions/image-analysis":{"post":{"tags":["transaction-controller"],"operationId":"analyzeImage","requestBody":{"content":{"application/json":{"schema":{"required":["file"],"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysedTransactionResponse"}}}}}}},"/api/transactions/create":{"post":{"tags":["transaction-controller"],"operationId":"createTransaction","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}}}}},"/api/products/create":{"post":{"tags":["product-controller"],"operationId":"createProduct","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}}}}},"/api/categories/create":{"post":{"tags":["category-controller"],"operationId":"createCategory","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryResponse"}}}}}}},"/api/authentication/register":{"post":{"tags":["authentication-controller"],"operationId":"register","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}}}},"/api/authentication/logout":{"post":{"tags":["authentication-controller"],"operationId":"logout","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}}}}},"/api/authentication/login":{"post":{"tags":["authentication-controller"],"operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthenticationLoginRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenResponse"}}}}}}},"/api/vaults/{vaultId}":{"delete":{"tags":["vault-controller"],"operationId":"removeVault","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}},"patch":{"tags":["vault-controller"],"operationId":"updateVault","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/vaults/{vaultId}/members/{userId}":{"delete":{"tags":["vault-controller"],"operationId":"removeVaultMember","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}},"patch":{"tags":["vault-controller"],"operationId":"updateVaultMember","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultMemberUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/users/update/password":{"patch":{"tags":["user-controller"],"operationId":"updateUserPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPasswordUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/users/update/email":{"patch":{"tags":["user-controller"],"operationId":"updateUserEmail","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserEmailUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/users/profile":{"patch":{"tags":["user-controller"],"operationId":"updateUserProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/transactions/{transactionId}":{"delete":{"tags":["transaction-controller"],"operationId":"deleteTransaction","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}},"patch":{"tags":["transaction-controller"],"operationId":"updateTransaction","parameters":[{"name":"transactionId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/products/{productId}":{"delete":{"tags":["product-controller"],"operationId":"deleteProduct","parameters":[{"name":"productId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}},"patch":{"tags":["product-controller"],"operationId":"updateProduct","parameters":[{"name":"productId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/vaults":{"get":{"tags":["vault-controller"],"operationId":"getVaults","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultListResponse"}}}}}}},"/api/vaults/{vaultPublicId}":{"get":{"tags":["vault-controller"],"operationId":"getVaultByPublicId","parameters":[{"name":"vaultPublicId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultResponse"}}}}}}},"/api/vaults/{vaultId}/role":{"get":{"tags":["vault-controller"],"operationId":"getVaultRole","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultRoleResponse"}}}}}}},"/api/vaults/{vaultId}/members":{"get":{"tags":["vault-controller"],"operationId":"getVaultMembers","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultMemberListResponse"}}}}}}},"/api/vaults/invitations/{userEmail}":{"get":{"tags":["vault-controller"],"operationId":"getVaultInvitationsByUserEmail","parameters":[{"name":"userEmail","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultInvitationListResponse"}}}}}}},"/api/users/{userId}/username":{"get":{"tags":["user-controller"],"operationId":"getUsernameByUserId","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsernameResponse"}}}}}}},"/api/users/verify":{"get":{"tags":["user-controller"],"operationId":"verifyUser","parameters":[{"name":"securityCode","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}}}}},"/api/users/verify/request":{"get":{"tags":["user-controller"],"operationId":"requestUserVerification","responses":{"200":{"description":"OK"}}}},"/api/users/update/request":{"get":{"tags":["user-controller"],"operationId":"requestUserUpdate","responses":{"200":{"description":"OK"}}}},"/api/users/avatar/{username}":{"get":{"tags":["user-controller"],"operationId":"getUserAvatar","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/transactions/{vaultId}":{"get":{"tags":["transaction-controller"],"operationId":"getTransactionsByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}}}}},"/api/transactions/{vaultId}/flows":{"get":{"tags":["transaction-controller"],"operationId":"getFlowsByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"transactionType","in":"query","required":false,"schema":{"type":"string","enum":["INCOMING","OUTGOING"]}},{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionFlowsResponse"}}}}}}},"/api/transactions/{vaultId}/flows/chart":{"get":{"tags":["transaction-controller"],"operationId":"getFlowsChart","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"transactionType","in":"query","required":false,"schema":{"type":"string","enum":["INCOMING","OUTGOING"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowsChartResponse"}}}}}}},"/api/transactions/{vaultId}/export":{"get":{"tags":["transaction-controller"],"operationId":"exportTransactions","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/api/transactions/{vaultId}/amount":{"get":{"tags":["transaction-controller"],"operationId":"getTransactionsAmountByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionAmountResponse"}}}}}}},"/api/transactions/schedules/{vaultId}":{"get":{"tags":["transaction-controller"],"operationId":"getSchedulesByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleListResponse"}}}}}}},"/api/products/{vaultId}":{"get":{"tags":["product-controller"],"operationId":"getProductsByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductListResponse"}}}}}}},"/api/config":{"get":{"tags":["configuration-controller"],"operationId":"getConfiguration","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationResponse"}}}}}}},"/api/categories/{categoryId}":{"get":{"tags":["category-controller"],"operationId":"getCategoryById","parameters":[{"name":"categoryId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryResponse"}}}}}},"delete":{"tags":["category-controller"],"operationId":"deleteCategory","parameters":[{"name":"categoryId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}}},"/api/categories/vault/{vaultId}":{"get":{"tags":["category-controller"],"operationId":"getCategoriesByVaultId","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryListResponse"}}}}}}},"/api/authentication/details":{"get":{"tags":["authentication-controller"],"operationId":"getAuthenticationDetails","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}}}},"/api/audits/{vaultId}":{"get":{"tags":["audit-controller"],"operationId":"getAudits","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditListResponse"}}}}}}},"/api/vaults/{vaultId}/invitations/{userEmail}":{"delete":{"tags":["vault-controller"],"operationId":"removeVaultInvitation","parameters":[{"name":"vaultId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"userEmail","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/api/transactions/schedules/{scheduleId}":{"delete":{"tags":["transaction-controller"],"operationId":"deleteScheduleById","parameters":[{"name":"scheduleId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}}}},"components":{"schemas":{"VaultInvitationCreateRequest":{"required":["userEmail","vaultId"],"type":"object","properties":{"vaultId":{"type":"integer","format":"int32"},"userEmail":{"type":"string"}}},"VaultInvitationResponse":{"required":["expiresAt","id","userEmail","vault"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"vault":{"$ref":"#/components/schemas/VaultResponse"},"userEmail":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}}},"VaultResponse":{"required":["createdAt","currency","id","name","ownerId","publicId","transactionMethod"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"publicId":{"type":"string"},"ownerId":{"type":"integer","format":"int32"},"name":{"type":"string"},"currency":{"type":"string"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]}}},"VaultCreateRequest":{"required":["currency","name","transactionMethod"],"type":"object","properties":{"name":{"type":"string"},"currency":{"type":"string"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]}}},"TwoFactorSetupRequest":{"required":["securityCode"],"type":"object","properties":{"securityCode":{"type":"string"}}},"TwoFactorSetupResponse":{"required":["qrCodeImage","secret"],"type":"object","properties":{"qrCodeImage":{"type":"string"},"secret":{"type":"string"}}},"TwoFactorVerifyRequest":{"required":["oneTimePassword","secret"],"type":"object","properties":{"secret":{"type":"string"},"oneTimePassword":{"type":"string"}}},"ScheduleCreateRequest":{"required":["amount","description","interval"],"type":"object","properties":{"description":{"type":"string"},"interval":{"type":"string","enum":["HOUR","DAY","WEEK","MONTH","YEAR"]},"amount":{"type":"integer","format":"int32"}}},"ScheduleResponse":{"required":["amount","description","id","interval","nextExecution","transactionId"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"transactionId":{"type":"integer","format":"int32"},"description":{"type":"string"},"nextExecution":{"type":"string","format":"date-time"},"interval":{"type":"string","enum":["HOUR","DAY","WEEK","MONTH","YEAR"]},"amount":{"type":"integer","format":"int32"}}},"TransactionProductCreateRequest":{"required":["name","quantity","unitAmount"],"type":"object","properties":{"name":{"type":"string"},"categoryId":{"type":"integer","format":"int32"},"unitAmount":{"type":"number"},"quantity":{"type":"integer","format":"int32"}}},"TransactionProductResponse":{"required":["id","name","quantity","transactionId","unitAmount"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"transactionId":{"type":"integer","format":"int32"},"name":{"type":"string"},"categoryName":{"type":"string"},"unitAmount":{"type":"number"},"quantity":{"type":"integer","format":"int32"}}},"AnalysedTransactionProductResponse":{"required":["name","quantity","unitAmount"],"type":"object","properties":{"name":{"type":"string"},"unitAmount":{"type":"number"},"quantity":{"type":"integer","format":"int32"}}},"AnalysedTransactionResponse":{"required":["currency","description","products","total","transactionMethod"],"type":"object","properties":{"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]},"products":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/AnalysedTransactionProductResponse"}},"description":{"type":"string"},"total":{"type":"number"},"currency":{"type":"string"}}},"TransactionCreateRequest":{"required":["currency","description","price","products","transactionMethod","transactionType","vaultId"],"type":"object","properties":{"vaultId":{"type":"integer","format":"int32"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]},"transactionType":{"type":"string","enum":["INCOMING","OUTGOING"]},"description":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"products":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/TransactionProductCreateRequest"}}}},"TransactionProductListResponse":{"required":["products"],"type":"object","properties":{"products":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/TransactionProductResponse"}}}},"TransactionResponse":{"required":["createdAt","currency","id","products","total","totalInVaultCurrency","transactionMethod","transactionType","user","vaultId"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"user":{"$ref":"#/components/schemas/UserResponse"},"vaultId":{"type":"integer","format":"int32"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]},"transactionType":{"type":"string","enum":["INCOMING","OUTGOING"]},"products":{"$ref":"#/components/schemas/TransactionProductListResponse"},"description":{"type":"string"},"totalInVaultCurrency":{"type":"number"},"total":{"type":"number"},"currency":{"type":"string"}}},"UserResponse":{"required":["decimalSeparator","email","groupSeparator","id","isTwoFactorEnabled","username","verified"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"email":{"type":"string"},"username":{"type":"string"},"verified":{"type":"boolean"},"isTwoFactorEnabled":{"type":"boolean"},"decimalSeparator":{"type":"string"},"groupSeparator":{"type":"string"}}},"ProductCreateRequest":{"required":["name","vaultId"],"type":"object","properties":{"name":{"type":"string"},"vaultId":{"type":"integer","format":"int32"},"categoryId":{"type":"integer","format":"int32"}}},"ProductResponse":{"required":["id","name","vaultId"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"vaultId":{"type":"integer","format":"int32"},"categoryId":{"type":"integer","format":"int32"},"categoryName":{"type":"string"}}},"CategoryCreateRequest":{"required":["name","vaultId"],"type":"object","properties":{"name":{"type":"string"},"vaultId":{"type":"integer","format":"int32"}}},"CategoryResponse":{"required":["id","name","vaultId"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"vaultId":{"type":"integer","format":"int32"}}},"UserCreateRequest":{"required":["email","password","username"],"type":"object","properties":{"email":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}}},"Unit":{"type":"object"},"AuthenticationLoginRequest":{"required":["email","password"],"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"oneTimePassword":{"type":"string"}}},"AccessTokenResponse":{"required":["email","expiresAt","refreshTokenId","userId","value"],"type":"object","properties":{"value":{"type":"string"},"userId":{"type":"integer","format":"int32"},"refreshTokenId":{"type":"string"},"email":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}}},"VaultUpdateRequest":{"required":["currency","name","transactionMethod"],"type":"object","properties":{"name":{"type":"string"},"currency":{"type":"string"},"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]}}},"VaultMemberUpdateRequest":{"required":["vaultRole"],"type":"object","properties":{"vaultRole":{"type":"string","enum":["OWNER","MANAGER","MEMBER"]}}},"UserPasswordUpdateRequest":{"required":["newPassword","oldPassword","securityCode"],"type":"object","properties":{"securityCode":{"type":"string"},"oldPassword":{"type":"string"},"newPassword":{"type":"string"}}},"UserEmailUpdateRequest":{"required":["email","securityCode"],"type":"object","properties":{"securityCode":{"type":"string"},"email":{"type":"string"}}},"UserProfileUpdateRequest":{"required":["decimalSeparator","groupSeparator","username"],"type":"object","properties":{"username":{"type":"string"},"decimalSeparator":{"type":"string"},"groupSeparator":{"type":"string"}}},"TransactionUpdateRequest":{"required":["currency","total","transactionMethod","transactionType"],"type":"object","properties":{"transactionMethod":{"type":"string","enum":["CARD","BLIK","CASH"]},"transactionType":{"type":"string","enum":["INCOMING","OUTGOING"]},"description":{"type":"string"},"total":{"type":"number"},"currency":{"type":"string"}}},"ProductUpdateRequest":{"type":"object","properties":{"categoryId":{"type":"integer","format":"int32"}}},"VaultListResponse":{"required":["vaults"],"type":"object","properties":{"vaults":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/VaultResponse"}}}},"VaultRoleResponse":{"required":["name","permissions","weight"],"type":"object","properties":{"name":{"type":"string"},"weight":{"type":"integer","format":"int32"},"permissions":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["DETAILS_READ","DELETE","AUDIT_READ","SETTINGS_READ","SETTINGS_UPDATE","TRANSACTION_CREATE","TRANSACTION_READ","TRANSACTION_UPDATE","TRANSACTION_DELETE","SCHEDULE_CREATE","SCHEDULE_READ","SCHEDULE_DELETE","PRODUCT_CREATE","PRODUCT_READ","PRODUCT_UPDATE","PRODUCT_DELETE","CATEGORY_CREATE","CATEGORY_READ","CATEGORY_UPDATE","CATEGORY_DELETE","MEMBER_READ","MEMBER_UPDATE","MEMBER_REMOVE","MEMBER_INVITE_CREATE","MEMBER_INVITE_READ","MEMBER_INVITE_DELETE"]}}}},"VaultMemberListResponse":{"required":["vaultMembers"],"type":"object","properties":{"vaultMembers":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/VaultMemberResponse"}}}},"VaultMemberResponse":{"required":["id","user","vaultId","vaultRole"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"vaultId":{"type":"integer","format":"int32"},"user":{"$ref":"#/components/schemas/UserResponse"},"vaultRole":{"type":"string","enum":["OWNER","MANAGER","MEMBER"]}}},"VaultInvitationListResponse":{"required":["vaultInvitations"],"type":"object","properties":{"vaultInvitations":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/VaultInvitationResponse"}}}},"UsernameResponse":{"required":["username"],"type":"object","properties":{"username":{"type":"string"}}},"TransactionListResponse":{"required":["transactions"],"type":"object","properties":{"transactions":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/TransactionResponse"}}}},"Price":{"required":["amount","currency"],"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"}}},"TransactionAmountResponse":{"required":["amount"],"type":"object","properties":{"amount":{"type":"integer","format":"int32"}}},"TransactionFlowsResponse":{"required":["count","total"],"type":"object","properties":{"total":{"$ref":"#/components/schemas/Price"},"count":{"$ref":"#/components/schemas/TransactionAmountResponse"}}},"FlowsChartResponse":{"required":["categories","series"],"type":"object","properties":{"categories":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/components/schemas/FlowsChartSeries"}}}},"FlowsChartSeries":{"required":["data","name"],"type":"object","properties":{"name":{"type":"string"},"data":{"type":"array","items":{"type":"number"}}}},"ScheduleListResponse":{"required":["schedules"],"type":"object","properties":{"schedules":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/ScheduleResponse"}}}},"ProductListResponse":{"required":["products"],"type":"object","properties":{"products":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/ProductResponse"}}}},"ConfigurationResponse":{"required":["aiEnabled"],"type":"object","properties":{"aiEnabled":{"type":"boolean"}}},"CategoryListResponse":{"required":["categories"],"type":"object","properties":{"categories":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/CategoryResponse"}}}},"AuditListResponse":{"required":["audits"],"type":"object","properties":{"audits":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/AuditResponse"}}}},"AuditResponse":{"required":["auditAction","createdAt","description","id","user","vault"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"vault":{"$ref":"#/components/schemas/VaultResponse"},"user":{"$ref":"#/components/schemas/UserResponse"},"auditAction":{"type":"string","enum":["TRANSACTION_CREATED","TRANSACTION_UPDATED","TRANSACTION_DELETED","TRANSACTION_IMPORTED","TRANSACTION_EXPORTED","TRANSACTION_PRODUCT_CREATED","SCHEDULE_CREATED","SCHEDULE_DELETED","CATEGORY_CREATED","CATEGORY_DELETED","PRODUCT_CREATED","PRODUCT_UPDATED","PRODUCT_DELETED"]},"description":{"type":"string"}}}}}} \ No newline at end of file diff --git a/finance-frontend/src/components/vault/ProtectedVault.tsx b/finance-frontend/src/components/vault/ProtectedVault.tsx index d4bcd40..137382d 100644 --- a/finance-frontend/src/components/vault/ProtectedVault.tsx +++ b/finance-frontend/src/components/vault/ProtectedVault.tsx @@ -5,7 +5,7 @@ import {useAuthentication} from "@/hooks/useAuthentication" import {useRouter} from "next/router" import {useVault} from "@/hooks/useVault" import {useApi} from "@/hooks/useApi" -import {Box} from "@chakra-ui/react" +import {Box, Breadcrumb, BreadcrumbItem, BreadcrumbLink, Card, Flex} from "@chakra-ui/react" import {useTranslations} from "next-intl"; import {Components} from "@/api/api"; @@ -23,6 +23,7 @@ export const ProtectedVault = ({ children, publicId }: ProtectedVaultProperties) const { details } = useAuthentication(); const vault = useVault({ publicId }); const t = useTranslations("Overview") + const tBreadcrumb = useTranslations("Breadcrumb") const [vaultRole, setVaultRole] = useState(); const [isCollapsed, setIsCollapsed] = useState(undefined); @@ -70,6 +71,35 @@ export const ProtectedVault = ({ children, publicId }: ProtectedVaultProperties) return <>{t('not-authenticated')}; } + const breadcrumbMapping: Record = { + "/vault": { label: tBreadcrumb("home"), href: `/vault/${vault.publicId}` }, + "/vault/[publicId]/transactions": { label: tBreadcrumb("transactions") }, + "/vault/[publicId]/members": { label: tBreadcrumb("members") }, + "/vault/[publicId]/products": { label: tBreadcrumb("products") }, + "/vault/[publicId]/audits": { label: tBreadcrumb("audits") }, + "/vault/[publicId]/settings": { label: tBreadcrumb("settings") }, + } + + const pathSegments = router.pathname + .split("/") + .filter(part => part !== "") + + const breadcrumbs = ( + + {pathSegments.map((_, index) => { + const path = `/${pathSegments.slice(0, index + 1).join("/")}`; + console.log(path) + const breadcrumb = breadcrumbMapping[path]; + + return breadcrumb ? ( + + {breadcrumb.label} + + ) : null; + })} + + ); + return ( <> setIsCollapsed(!isCollapsed)} /> @@ -78,6 +108,24 @@ export const ProtectedVault = ({ children, publicId }: ProtectedVaultProperties) transition="margin-left 0.3s" > + { + breadcrumbs && ( + + + {breadcrumbs} + + + ) + } {children(vault, vaultRole)} diff --git a/finance-frontend/src/locales/en.json b/finance-frontend/src/locales/en.json index 45d5ce1..9d8c6dc 100644 --- a/finance-frontend/src/locales/en.json +++ b/finance-frontend/src/locales/en.json @@ -26,6 +26,14 @@ } } }, + "Breadcrumb": { + "home": "Home", + "settings": "Settings", + "transactions": "Transactions", + "products": "Products", + "members": "Members", + "audits": "Audit Logs" + }, "Homepage": { "title": "Finance - Manage Vaults", "your-vaults": "Your vaults",