Changeset 8c01a1f
- Timestamp:
- 02/10/26 18:31:21 (5 months ago)
- Branches:
- master
- Children:
- 6fa5831
- Parents:
- ff01f66
- Files:
-
- 50 added
- 9 edited
-
backend/pom.xml (modified) (1 diff)
-
backend/src/main/java/com/trekr/backend/config/SecurityConfig.java (modified) (4 diffs)
-
backend/src/main/java/com/trekr/backend/controller/InvestingController.java (added)
-
backend/src/main/java/com/trekr/backend/controller/TrainingController.java (added)
-
backend/src/main/java/com/trekr/backend/dto/invest/AssetDto.java (added)
-
backend/src/main/java/com/trekr/backend/dto/invest/CreateAssetRequest.java (added)
-
backend/src/main/java/com/trekr/backend/dto/invest/InvestingAssetsResponse.java (added)
-
backend/src/main/java/com/trekr/backend/dto/invest/TrackingStatusResponse.java (added)
-
backend/src/main/java/com/trekr/backend/dto/training/CreateTrainingSessionRequest.java (added)
-
backend/src/main/java/com/trekr/backend/dto/training/TrackingStatusResponse.java (added)
-
backend/src/main/java/com/trekr/backend/dto/training/TrainingProfileResponse.java (added)
-
backend/src/main/java/com/trekr/backend/dto/training/TrainingSessionDto.java (added)
-
backend/src/main/java/com/trekr/backend/dto/training/TrainingSessionsResponse.java (added)
-
backend/src/main/java/com/trekr/backend/dto/training/TrainingStartRequest.java (added)
-
backend/src/main/java/com/trekr/backend/dto/training/WorkoutTypeDto.java (added)
-
backend/src/main/java/com/trekr/backend/repository/AssetRepository.java (added)
-
backend/src/main/java/com/trekr/backend/repository/InvestorUserRepository.java (added)
-
backend/src/main/java/com/trekr/backend/repository/TrainingSessionRepository.java (added)
-
backend/src/main/java/com/trekr/backend/repository/TrainingUserRepository.java (added)
-
backend/src/main/java/com/trekr/backend/security/JwtAuthenticationFilter.java (added)
-
backend/src/main/java/com/trekr/backend/security/UserPrincipal.java (modified) (3 diffs)
-
backend/src/main/java/com/trekr/backend/service/InvestingService.java (added)
-
backend/src/main/java/com/trekr/backend/service/JwtService.java (modified) (2 diffs)
-
backend/src/main/java/com/trekr/backend/service/TrainingService.java (added)
-
frontend/.gitignore (modified) (1 diff)
-
frontend/package-lock.json (modified) (82 diffs)
-
frontend/package.json (modified) (1 diff)
-
frontend/src/App.jsx (modified) (2 diffs)
-
frontend/src/api/twelveData.js (added)
-
frontend/src/api/yahooFinance.js (added)
-
frontend/src/assets/graph-placeholder.svg (added)
-
frontend/src/data/tickers.js (added)
-
frontend/src/pages/Dashboard/DashboardLayout.jsx (added)
-
frontend/src/pages/Dashboard/components/DashboardSidebar.jsx (added)
-
frontend/src/pages/Dashboard/components/DashboardTopbar.jsx (added)
-
frontend/src/pages/Dashboard/pages/ControlCenter/ControlCenter.jsx (added)
-
frontend/src/pages/Dashboard/pages/Discipline/Discipline.jsx (added)
-
frontend/src/pages/Dashboard/pages/Finance/Finance.jsx (added)
-
frontend/src/pages/Dashboard/pages/Investing/Investing.jsx (added)
-
frontend/src/pages/Dashboard/pages/Investing/InvestingTracking.jsx (added)
-
frontend/src/pages/Dashboard/pages/Investing/NewInvestment.jsx (added)
-
frontend/src/pages/Dashboard/pages/Investing/components/InvestingAssetsTable.jsx (added)
-
frontend/src/pages/Dashboard/pages/Investing/components/InvestingCenteredCard.jsx (added)
-
frontend/src/pages/Dashboard/pages/Investing/components/InvestingProgressCard.jsx (added)
-
frontend/src/pages/Dashboard/pages/Investing/components/InvestingStartCtaCard.jsx (added)
-
frontend/src/pages/Dashboard/pages/Investing/components/InvestingTrackingHeader.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/NewTrainingSession.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/Training.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/TrainingTracking.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/components/CaloriesEstimate.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/components/TrainingCenteredCard.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/components/TrainingProgressCard.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/components/TrainingSessionsTable.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/components/TrainingStartCtaCard.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/components/TrainingStartForm.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/components/TrainingTrackingHeader.jsx (added)
-
frontend/src/pages/Dashboard/pages/Training/components/WorkoutTypeSelect.jsx (added)
-
frontend/src/pages/Dashboard/pages/Weight/Weight.jsx (added)
-
frontend/vite.config.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
backend/pom.xml
rff01f66 r8c01a1f 51 51 <groupId>org.springframework.boot</groupId> 52 52 <artifactId>spring-boot-starter-webmvc</artifactId> 53 </dependency> 54 55 <dependency> 56 <groupId>com.fasterxml.jackson.core</groupId> 57 <artifactId>jackson-databind</artifactId> 53 58 </dependency> 54 59 <dependency> -
backend/src/main/java/com/trekr/backend/config/SecurityConfig.java
rff01f66 r8c01a1f 1 1 package com.trekr.backend.config; 2 2 3 import com.trekr.backend.security.JwtAuthenticationFilter; 3 4 import org.springframework.context.annotation.Bean; 4 5 import org.springframework.context.annotation.Configuration; … … 7 8 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 8 9 import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; 10 import org.springframework.security.config.http.SessionCreationPolicy; 9 11 import org.springframework.security.crypto.password.PasswordEncoder; 10 12 import org.springframework.security.web.SecurityFilterChain; 13 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; 11 14 import org.springframework.web.cors.CorsConfiguration; 12 15 import org.springframework.web.cors.CorsConfigurationSource; … … 19 22 public class SecurityConfig { 20 23 24 private final JwtAuthenticationFilter jwtAuthenticationFilter; 25 26 public SecurityConfig(JwtAuthenticationFilter jwtAuthenticationFilter) { 27 this.jwtAuthenticationFilter = jwtAuthenticationFilter; 28 } 29 21 30 @Bean 22 31 public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { … … 24 33 .csrf(AbstractHttpConfigurer::disable) 25 34 .cors(Customizer.withDefaults()) 35 .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) 36 .httpBasic(AbstractHttpConfigurer::disable) 37 .formLogin(AbstractHttpConfigurer::disable) 26 38 .authorizeHttpRequests(auth -> auth 27 39 .requestMatchers("/api/auth/**").permitAll() 28 40 .anyRequest().authenticated()); 41 42 http.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); 29 43 return http.build(); 30 44 } -
backend/src/main/java/com/trekr/backend/security/UserPrincipal.java
rff01f66 r8c01a1f 1 1 package com.trekr.backend.security; 2 3 import lombok.Getter;4 2 5 3 import java.io.Serializable; … … 9 7 * Controllers can inject this or get it from SecurityContextHolder. 10 8 */ 11 @Getter12 9 public class UserPrincipal implements Serializable { 13 10 private static final long serialVersionUID = 1L; … … 22 19 this.email = email; 23 20 } 21 22 public Long getUserId() { 23 return userId; 24 } 25 26 public String getUsername() { 27 return username; 28 } 29 30 public String getEmail() { 31 return email; 32 } 24 33 } -
backend/src/main/java/com/trekr/backend/service/JwtService.java
rff01f66 r8c01a1f 1 1 package com.trekr.backend.service; 2 2 3 import com.trekr.backend.security.UserPrincipal; 3 4 import io.jsonwebtoken.Jwts; 5 import io.jsonwebtoken.JwtException; 6 import io.jsonwebtoken.Claims; 4 7 import io.jsonwebtoken.security.Keys; 5 8 import org.springframework.beans.factory.annotation.Value; … … 34 37 .compact(); 35 38 } 39 40 public boolean isTokenValid(String token) { 41 try { 42 parseClaims(token); 43 return true; 44 } catch (JwtException | IllegalArgumentException ex) { 45 return false; 46 } 47 } 48 49 public UserPrincipal parseUserPrincipal(String token) { 50 Claims claims = parseClaims(token); 51 Long userId = Long.valueOf(claims.getSubject()); 52 String username = (String) claims.get("username"); 53 String email = (String) claims.get("email"); 54 return new UserPrincipal(userId, username, email); 55 } 56 57 private Claims parseClaims(String token) { 58 return Jwts.parser() 59 .verifyWith(signingKey) 60 .build() 61 .parseSignedClaims(token) 62 .getPayload(); 63 } 36 64 } -
frontend/.gitignore
rff01f66 r8c01a1f 12 12 dist-ssr 13 13 *.local 14 .env.local 14 15 15 16 # Editor directories and files -
frontend/package-lock.json
rff01f66 r8c01a1f 16 16 "react": "^19.2.0", 17 17 "react-dom": "^19.2.0", 18 "react-icons": "^5.5.0", 18 19 "react-router-dom": "^7.13.0" 19 20 }, … … 343 344 "ppc64" 344 345 ], 346 "dev": true, 345 347 "license": "MIT", 346 348 "optional": true, … … 359 361 "arm" 360 362 ], 363 "dev": true, 361 364 "license": "MIT", 362 365 "optional": true, … … 375 378 "arm64" 376 379 ], 380 "dev": true, 377 381 "license": "MIT", 378 382 "optional": true, … … 391 395 "x64" 392 396 ], 397 "dev": true, 393 398 "license": "MIT", 394 399 "optional": true, … … 407 412 "arm64" 408 413 ], 414 "dev": true, 409 415 "license": "MIT", 410 416 "optional": true, … … 423 429 "x64" 424 430 ], 431 "dev": true, 425 432 "license": "MIT", 426 433 "optional": true, … … 439 446 "arm64" 440 447 ], 448 "dev": true, 441 449 "license": "MIT", 442 450 "optional": true, … … 455 463 "x64" 456 464 ], 465 "dev": true, 457 466 "license": "MIT", 458 467 "optional": true, … … 471 480 "arm" 472 481 ], 482 "dev": true, 473 483 "license": "MIT", 474 484 "optional": true, … … 487 497 "arm64" 488 498 ], 499 "dev": true, 489 500 "license": "MIT", 490 501 "optional": true, … … 503 514 "ia32" 504 515 ], 516 "dev": true, 505 517 "license": "MIT", 506 518 "optional": true, … … 519 531 "loong64" 520 532 ], 533 "dev": true, 521 534 "license": "MIT", 522 535 "optional": true, … … 535 548 "mips64el" 536 549 ], 550 "dev": true, 537 551 "license": "MIT", 538 552 "optional": true, … … 551 565 "ppc64" 552 566 ], 567 "dev": true, 553 568 "license": "MIT", 554 569 "optional": true, … … 567 582 "riscv64" 568 583 ], 584 "dev": true, 569 585 "license": "MIT", 570 586 "optional": true, … … 583 599 "s390x" 584 600 ], 601 "dev": true, 585 602 "license": "MIT", 586 603 "optional": true, … … 599 616 "x64" 600 617 ], 618 "dev": true, 601 619 "license": "MIT", 602 620 "optional": true, … … 615 633 "arm64" 616 634 ], 635 "dev": true, 617 636 "license": "MIT", 618 637 "optional": true, … … 631 650 "x64" 632 651 ], 652 "dev": true, 633 653 "license": "MIT", 634 654 "optional": true, … … 647 667 "arm64" 648 668 ], 669 "dev": true, 649 670 "license": "MIT", 650 671 "optional": true, … … 663 684 "x64" 664 685 ], 686 "dev": true, 665 687 "license": "MIT", 666 688 "optional": true, … … 679 701 "arm64" 680 702 ], 703 "dev": true, 681 704 "license": "MIT", 682 705 "optional": true, … … 695 718 "x64" 696 719 ], 720 "dev": true, 697 721 "license": "MIT", 698 722 "optional": true, … … 711 735 "arm64" 712 736 ], 737 "dev": true, 713 738 "license": "MIT", 714 739 "optional": true, … … 727 752 "ia32" 728 753 ], 754 "dev": true, 729 755 "license": "MIT", 730 756 "optional": true, … … 743 769 "x64" 744 770 ], 771 "dev": true, 745 772 "license": "MIT", 746 773 "optional": true, … … 4805 4832 } 4806 4833 }, 4834 "node_modules/@relume_io/relume-ui/node_modules/react-icons": { 4835 "version": "5.4.0", 4836 "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.4.0.tgz", 4837 "integrity": "sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==", 4838 "license": "MIT", 4839 "peerDependencies": { 4840 "react": "*" 4841 } 4842 }, 4807 4843 "node_modules/@relume_io/relume-ui/node_modules/zod": { 4808 4844 "version": "3.25.76", … … 4828 4864 "arm" 4829 4865 ], 4866 "dev": true, 4830 4867 "license": "MIT", 4831 4868 "optional": true, … … 4841 4878 "arm64" 4842 4879 ], 4880 "dev": true, 4843 4881 "license": "MIT", 4844 4882 "optional": true, … … 4854 4892 "arm64" 4855 4893 ], 4894 "dev": true, 4856 4895 "license": "MIT", 4857 4896 "optional": true, … … 4867 4906 "x64" 4868 4907 ], 4908 "dev": true, 4869 4909 "license": "MIT", 4870 4910 "optional": true, … … 4880 4920 "arm64" 4881 4921 ], 4922 "dev": true, 4882 4923 "license": "MIT", 4883 4924 "optional": true, … … 4893 4934 "x64" 4894 4935 ], 4936 "dev": true, 4895 4937 "license": "MIT", 4896 4938 "optional": true, … … 4906 4948 "arm" 4907 4949 ], 4950 "dev": true, 4908 4951 "license": "MIT", 4909 4952 "optional": true, … … 4919 4962 "arm" 4920 4963 ], 4964 "dev": true, 4921 4965 "license": "MIT", 4922 4966 "optional": true, … … 4932 4976 "arm64" 4933 4977 ], 4978 "dev": true, 4934 4979 "license": "MIT", 4935 4980 "optional": true, … … 4945 4990 "arm64" 4946 4991 ], 4992 "dev": true, 4947 4993 "license": "MIT", 4948 4994 "optional": true, … … 4958 5004 "loong64" 4959 5005 ], 5006 "dev": true, 4960 5007 "license": "MIT", 4961 5008 "optional": true, … … 4971 5018 "loong64" 4972 5019 ], 5020 "dev": true, 4973 5021 "license": "MIT", 4974 5022 "optional": true, … … 4984 5032 "ppc64" 4985 5033 ], 5034 "dev": true, 4986 5035 "license": "MIT", 4987 5036 "optional": true, … … 4997 5046 "ppc64" 4998 5047 ], 5048 "dev": true, 4999 5049 "license": "MIT", 5000 5050 "optional": true, … … 5010 5060 "riscv64" 5011 5061 ], 5062 "dev": true, 5012 5063 "license": "MIT", 5013 5064 "optional": true, … … 5023 5074 "riscv64" 5024 5075 ], 5076 "dev": true, 5025 5077 "license": "MIT", 5026 5078 "optional": true, … … 5036 5088 "s390x" 5037 5089 ], 5090 "dev": true, 5038 5091 "license": "MIT", 5039 5092 "optional": true, … … 5049 5102 "x64" 5050 5103 ], 5104 "dev": true, 5051 5105 "license": "MIT", 5052 5106 "optional": true, … … 5062 5116 "x64" 5063 5117 ], 5118 "dev": true, 5064 5119 "license": "MIT", 5065 5120 "optional": true, … … 5075 5130 "x64" 5076 5131 ], 5132 "dev": true, 5077 5133 "license": "MIT", 5078 5134 "optional": true, … … 5088 5144 "arm64" 5089 5145 ], 5146 "dev": true, 5090 5147 "license": "MIT", 5091 5148 "optional": true, … … 5101 5158 "arm64" 5102 5159 ], 5160 "dev": true, 5103 5161 "license": "MIT", 5104 5162 "optional": true, … … 5114 5172 "ia32" 5115 5173 ], 5174 "dev": true, 5116 5175 "license": "MIT", 5117 5176 "optional": true, … … 5127 5186 "x64" 5128 5187 ], 5188 "dev": true, 5129 5189 "license": "MIT", 5130 5190 "optional": true, … … 5140 5200 "x64" 5141 5201 ], 5202 "dev": true, 5142 5203 "license": "MIT", 5143 5204 "optional": true, … … 5500 5561 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 5501 5562 "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 5563 "dev": true, 5502 5564 "license": "MIT" 5503 5565 }, … … 5513 5575 "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", 5514 5576 "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", 5515 "dev Optional": true,5577 "dev": true, 5516 5578 "license": "MIT", 5517 5579 "dependencies": { … … 5523 5585 "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", 5524 5586 "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", 5525 "dev Optional": true,5587 "dev": true, 5526 5588 "license": "MIT", 5527 5589 "peerDependencies": { … … 5594 5656 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 5595 5657 "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 5658 "dev": true, 5596 5659 "license": "MIT", 5597 5660 "dependencies": { … … 5682 5745 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 5683 5746 "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 5747 "dev": true, 5684 5748 "license": "MIT" 5685 5749 }, … … 5698 5762 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 5699 5763 "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 5764 "dev": true, 5700 5765 "license": "MIT", 5701 5766 "dependencies": { … … 5786 5851 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 5787 5852 "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 5853 "dev": true, 5788 5854 "license": "MIT", 5789 5855 "dependencies": { … … 5823 5889 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 5824 5890 "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 5891 "dev": true, 5825 5892 "license": "MIT", 5826 5893 "dependencies": { … … 5835 5902 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 5836 5903 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 5904 "dev": true, 5837 5905 "license": "MIT" 5838 5906 }, … … 5853 5921 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 5854 5922 "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 5923 "dev": true, 5855 5924 "license": "MIT" 5856 5925 }, … … 5906 5975 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", 5907 5976 "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", 5908 "dev Optional": true,5977 "dev": true, 5909 5978 "license": "MIT" 5910 5979 }, … … 6094 6163 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", 6095 6164 "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", 6165 "dev": true, 6096 6166 "hasInstallScript": true, 6097 6167 "license": "MIT", … … 6363 6433 "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 6364 6434 "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 6435 "dev": true, 6365 6436 "license": "MIT", 6366 6437 "engines": { … … 6508 6579 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 6509 6580 "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 6581 "dev": true, 6510 6582 "hasInstallScript": true, 6511 6583 "license": "MIT", … … 6631 6703 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 6632 6704 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 6705 "dev": true, 6633 6706 "license": "MIT", 6634 6707 "engines": { … … 6765 6838 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 6766 6839 "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 6840 "dev": true, 6767 6841 "license": "ISC" 6768 6842 }, … … 7212 7286 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 7213 7287 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 7288 "dev": true, 7214 7289 "license": "ISC", 7215 7290 "dependencies": { … … 7249 7324 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 7250 7325 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 7326 "dev": true, 7251 7327 "license": "MIT" 7252 7328 }, … … 7255 7331 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 7256 7332 "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 7333 "dev": true, 7257 7334 "funding": [ 7258 7335 { … … 9306 9383 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 9307 9384 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 9385 "dev": true, 9308 9386 "license": "ISC" 9309 9387 }, … … 9312 9390 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 9313 9391 "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 9392 "dev": true, 9314 9393 "license": "MIT", 9315 9394 "engines": { … … 9324 9403 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 9325 9404 "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 9405 "dev": true, 9326 9406 "funding": [ 9327 9407 { … … 9453 9533 }, 9454 9534 "node_modules/react-icons": { 9455 "version": "5. 4.0",9456 "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5. 4.0.tgz",9457 "integrity": "sha512- 7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==",9535 "version": "5.5.0", 9536 "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", 9537 "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", 9458 9538 "license": "MIT", 9459 9539 "peerDependencies": { … … 9602 9682 "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", 9603 9683 "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", 9684 "dev": true, 9604 9685 "license": "MIT", 9605 9686 "dependencies": { … … 9652 9733 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 9653 9734 "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 9735 "dev": true, 9654 9736 "license": "ISC", 9655 9737 "bin": { … … 9712 9794 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 9713 9795 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 9796 "dev": true, 9714 9797 "license": "MIT", 9715 9798 "dependencies": { … … 9762 9845 "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 9763 9846 "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 9847 "dev": true, 9764 9848 "license": "MIT", 9765 9849 "dependencies": { … … 9887 9971 "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", 9888 9972 "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", 9973 "dev": true, 9889 9974 "license": "MIT", 9890 9975 "dependencies": { … … 9961 10046 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 9962 10047 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 10048 "dev": true, 9963 10049 "license": "ISC", 9964 10050 "dependencies": { -
frontend/package.json
rff01f66 r8c01a1f 18 18 "react": "^19.2.0", 19 19 "react-dom": "^19.2.0", 20 "react-icons": "^5.5.0", 20 21 "react-router-dom": "^7.13.0" 21 22 }, -
frontend/src/App.jsx
rff01f66 r8c01a1f 4 4 import Login from "./pages/Login/Login.jsx"; 5 5 import Register from "./pages/Register/Register.jsx"; 6 import Dashboard from "./pages/Dashboard.jsx"; 6 import DashboardLayout from "./pages/Dashboard/DashboardLayout.jsx"; 7 import ControlCenter from "./pages/Dashboard/pages/ControlCenter/ControlCenter.jsx"; 8 import Training from "./pages/Dashboard/pages/Training/Training.jsx"; 9 import TrainingTracking from "./pages/Dashboard/pages/Training/TrainingTracking.jsx"; 10 import NewTrainingSession from "./pages/Dashboard/pages/Training/NewTrainingSession.jsx"; 11 import Weight from "./pages/Dashboard/pages/Weight/Weight.jsx"; 12 import Finance from "./pages/Dashboard/pages/Finance/Finance.jsx"; 13 import Investing from "./pages/Dashboard/pages/Investing/Investing.jsx"; 14 import InvestingTracking from "./pages/Dashboard/pages/Investing/InvestingTracking.jsx"; 15 import NewInvestment from "./pages/Dashboard/pages/Investing/NewInvestment.jsx"; 16 import Discipline from "./pages/Dashboard/pages/Discipline/Discipline.jsx"; 7 17 8 18 function RequireAuth({ children }) { … … 23 33 element={ 24 34 <RequireAuth> 25 <Dashboard />35 <DashboardLayout /> 26 36 </RequireAuth> 27 37 } 28 /> 38 > 39 <Route index element={<Navigate to="control-center" replace />} /> 40 <Route path="control-center" element={<ControlCenter />} /> 41 <Route path="training" element={<Training />} /> 42 <Route path="training/tracking" element={<TrainingTracking />} /> 43 <Route 44 path="training/sessions/new" 45 element={<NewTrainingSession />} 46 /> 47 <Route path="weight" element={<Weight />} /> 48 <Route path="finance" element={<Finance />} /> 49 <Route path="investing" element={<Investing />} /> 50 <Route path="investing/tracking" element={<InvestingTracking />} /> 51 <Route path="investing/assets/new" element={<NewInvestment />} /> 52 <Route path="discipline" element={<Discipline />} /> 53 </Route> 29 54 <Route path="*" element={<Navigate to="/" replace />} /> 30 55 </Routes> -
frontend/vite.config.js
rff01f66 r8c01a1f 6 6 export default defineConfig({ 7 7 plugins: [react(), tailwindcss()], 8 server: { 9 proxy: { 10 // Dev-only Yahoo Finance proxy to avoid browser CORS. 11 // Frontend can call `/yahoo/...` and `/yahoo2/...` as same-origin. 12 '/yahoo': { 13 target: 'https://query1.finance.yahoo.com', 14 changeOrigin: true, 15 secure: true, 16 rewrite: (path) => path.replace(/^\/yahoo/, ''), 17 }, 18 '/yahoo2': { 19 target: 'https://query2.finance.yahoo.com', 20 changeOrigin: true, 21 secure: true, 22 rewrite: (path) => path.replace(/^\/yahoo2/, ''), 23 }, 24 }, 25 }, 8 26 })
Note:
See TracChangeset
for help on using the changeset viewer.
