Index: backend/.gitignore
===================================================================
--- backend/.gitignore	(revision 72053b5fc3ff291757af1cdd64e8fdfcb9e9b17d)
+++ backend/.gitignore	(revision 72053b5fc3ff291757af1cdd64e8fdfcb9e9b17d)
@@ -0,0 +1,33 @@
+HELP.md
+target/
+.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
Index: backend/Dockerfile
===================================================================
--- backend/Dockerfile	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,11 +1,0 @@
-FROM maven:3.9-eclipse-temurin-21 AS build
-WORKDIR /app
-COPY pom.xml .
-RUN mvn dependency:go-offline -q
-COPY src ./src
-RUN mvn package -DskipTests -q
-
-FROM eclipse-temurin:21-jre
-WORKDIR /app
-COPY --from=build /app/target/backend-0.0.1-SNAPSHOT.jar app.jar
-ENTRYPOINT ["java", "-jar", "app.jar"]
Index: backend/HELP.md
===================================================================
--- backend/HELP.md	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,39 +1,0 @@
-# Getting Started
-
-### Project Documentation
-
-* [Normalization (Phase P5)](docs/Normalization.txt)
-
-### Reference Documentation
-
-For further reference, please consider the following sections:
-
-* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
-* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/4.0.2/maven-plugin)
-* [Create an OCI image](https://docs.spring.io/spring-boot/4.0.2/maven-plugin/build-image.html)
-* [Spring Data JPA](https://docs.spring.io/spring-boot/4.0.2/reference/data/sql.html#data.sql.jpa-and-spring-data)
-* [Spring Security](https://docs.spring.io/spring-boot/4.0.2/reference/web/spring-security.html)
-* [Validation](https://docs.spring.io/spring-boot/4.0.2/reference/io/validation.html)
-* [Spring Web](https://docs.spring.io/spring-boot/4.0.2/reference/web/servlet.html)
-
-### Guides
-
-The following guides illustrate how to use some features concretely:
-
-* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/)
-* [Securing a Web Application](https://spring.io/guides/gs/securing-web/)
-* [Spring Boot and OAuth2](https://spring.io/guides/tutorials/spring-boot-oauth2/)
-* [Authenticating a User with LDAP](https://spring.io/guides/gs/authenticating-ldap/)
-* [Validation](https://spring.io/guides/gs/validating-form-input/)
-* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/)
-* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/)
-* [Building REST services with Spring](https://spring.io/guides/tutorials/rest/)
-
-### Maven Parent overrides
-
-Due to Maven's design, elements are inherited from the parent POM to the project POM.
-While most of the inheritance is fine, it also inherits unwanted elements like `<license>` and `<developers>` from the
-parent.
-To prevent this, the project POM contains empty overrides for these elements.
-If you manually switch to a different parent and actually want the inheritance, you need to remove those overrides.
-
Index: backend/docs/SQL_Injection_Prevention.txt
===================================================================
--- backend/docs/SQL_Injection_Prevention.txt	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,350 +1,0 @@
-= SQL Injection Prevention Strategy =
-
-==概述 ==
-
-SQL Injection е критична безбедносна ранливост каде нападачот внесува злонамерен SQL код преку корисничкиот влез за манипулирање со базата на податоци. Овој документ опишува како е имплементирана заштитата во Trekr backend за спречување на овој вид напади.
-
-== 1. Безбедни пракси имплементирани во проектот ==
-
-=== 1.1 Параметризирани пропити преку JPA ===
-
-Целиот backend користи Spring Data JPA која автоматски генерира параметризирани пропити што спречуваат SQL injection.
-
-==== Безбедно: Derived Query Methods ====
-
-Кога користиме method names на Spring Data, те се автоматски преведуваат во параметризирани SQL пропити:
-
-{{{
-// UserRepository.java
-public interface UserRepository extends JpaRepository<User, Long> {
-    Optional<User> findByEmail(String email);
-    Optional<User> findByUsername(String username);
-}
-
-// Сэчно користи параметриран пропит во подложина (EQUIVALENT TO):
-// SELECT * FROM users WHERE email = ?
-// параметарот se праќа одвоено од SQL командата
-}}}
-
-==== Безбедно: @Query со @Param ====
-
-За комплексни пропити, користториве @Query со именувани параметри:
-
-{{{
-// TaskRepository.java
-@Modifying
-@Query("update Task t set t.finished = false where t.disciplineUser.userId = :userId")
-int resetFinishedForUser(@Param("userId") Long userId);
-
-// Параметарот :userId се врзува безбедно преку JDBC, не преку string concatenation
-}}}
-
-==== Безбедно: Collection параметри ====
-
-За множество вредности (IN клаузули), користи параметризиран пропит:
-
-{{{
-// TrainingSessionRepository.java
-@java.util.List<TrainingSession> findByTrainingUser_UserIdAndDateIn(
-    Long userId,
-    Collection<LocalDate> dates
-);
-
-// Сэчно: SELECT * FROM training_sessions WHERE training_user_id = ? AND date IN (?, ?, ?)
-// Сите параметри се врзени безбедно, не преку строг конкатенација
-}}}
-
-=== 1.2 Строга типизација на параметри ===
-
-Кога параметарите се типизирани (Long, BigDecimal, LocalDate), т.е. не strings, SQL injection е веќе невозможна:
-
-{{{
-// FinanceService.java - пример од createIncome
-BigDecimal amount = request.getAmount();  // BigDecimal, не String
-if (amount.compareTo(BigDecimal.ZERO) <= 0) {
-    throw new RuntimeException("Amount must be greater than 0");
-}
-
-Income income = new Income();
-income.setAmount(amount);  // Num values can't inject SQL
-incomeRepository.save(income);
-
-// Генерирана SQL: INSERT INTO incomes (amount) VALUES (?)
-// Параметарот amount се врзува како број, не како строк
-}}}
-
-=== 1.3 Основна валидација на влезот ===
-
-Така поради внесување и валидација на нивото на апликација пред db операции:
-
-{{{
-// CustomTrackingService.java
-public CustomTrackingCategoryDto createCustomTrackingCategory(
-        Long userId,
-        CreateCustomTrackingCategoryRequest request) {
-
-    String name = request.getName();
-
-    // Валидација: не null/empty
-    if (name == null || name.isBlank()) {
-        throw new RuntimeException("Name is required");
-    }
-
-    String trimmed = name.trim();
-
-    // Валидација: должина
-    if (trimmed.length() > 100) {
-        throw new RuntimeException("Name is too long");
-    }
-
-    // На крај, trimmed value се зачувува преку ORM
-    // Никогаш не се користи raw SQL string concatenation
-    CustomTrackingCategory category = new CustomTrackingCategory();
-    category.setName(trimmed);
-    customTrackingCategoryRepository.save(category);
-}
-}}}
-
-=== 1.4 Authorization checks за ownership ===
-
-Дополнително заштита: провера дека конкретен корисник има право да приступи на специфичната информација:
-
-{{{
-// CustomTrackingService.java
-@Transactional
-public void deleteCustomCategoryTask(Long userId, Long customTrackingId, Long taskId) {
-    Task task = taskRepository.findById(taskId)
-            .orElseThrow(() -> new RuntimeException("Task not found"));
-
-    // Провера: дали задачата припаѓа на корисникот
-    if (task.getCustomTrackingCategory() == null
-            || !customTrackingId.equals(task.getCustomTrackingCategory().getCustomTrackingId())
-            || task.getCustomTrackingCategory().getUser() == null
-            || !userId.equals(task.getCustomTrackingCategory().getUser().getUserId())) {
-        throw new RuntimeException("Task not found");  // Скриена информација
-    }
-
-    int deleted = taskRepository.deleteByTaskIdAndCustomTrackingCategory_CustomTrackingIdAndCustomTrackingCategory_User_UserId(
-            taskId, customTrackingId, userId);
-    if (deleted == 0) {
-        throw new RuntimeException("Task not found");
-    }
-}
-}}}
-
-== 2. НЕБЕЗБЕДНИ ПРАКСИ која НИКОГАШ не смеаат да бидат користени ==
-
-=== 2.1 String Concatenation со SQL ===
-
-❌ НЕБЕЗБЕДНО - НЕ КВАЧИ НИКОГАШ:
-
-{{{
-// ОПАСНО: SQL injection уязвимост
-String email = userInput;  // од форма или параметар
-String query = "SELECT * FROM users WHERE email = '" + email + "'";
-// Ако userInput = "admin' OR '1'='1", резултира:
-// SELECT * FROM users WHERE email = 'admin' OR '1'='1'
-// Сие врати сите корисници!
-}}}
-
-=== 2.2 Директни SQL пропити со методи како createNativeQuery без параметри ===
-
-❌ НЕБЕЗБЕДНО:
-
-{{{
-// ОПАСНО
-String userProvidedFilter = request.getFilter();
-TypedQuery<User> query = entityManager.createNativeQuery(
-    "SELECT * FROM users WHERE name = '" + userProvidedFilter + "'",
-    User.class
-);
-// Позволува SQL injection
-}}}
-
-✅ БЕЗБЕДНО:
-
-{{{
-// ПРАВИЛНО
-TypedQuery<User> query = entityManager.createNativeQuery(
-    "SELECT * FROM users WHERE name = ?1",
-    User.class
-);
-query.setParameter(1, userProvidedFilter);
-// Параметарот se врзува безбедно
-}}}
-
-=== 2.3 Динамички конструирање на JPQL пропити преку string concatenation ===
-
-❌ НЕБЕЗБЕДНО:
-
-{{{
-// ОПАСНО
-String sortBy = request.getSortBy();  // "name' OR 'x'='x"
-String jpql = "SELECT u FROM User u ORDER BY u." + sortBy;
-TypedQuery<User> query = entityManager.createQuery(jpql, User.class);
-// Позволува SQL injection преку ORDER BY clause
-}}}
-
-✅ БЕЗБЕДНО:
-
-{{{
-// ПРАВИЛНО: користи Specification или CriteriaBuilder за динамички пропити
-CriteriaBuilder cb = entityManager.getCriteriaBuilder();
-CriteriaQuery<User> cq = cb.createQuery(User.class);
-Root<User> root = cq.from(User.class);
-
-// Динамички sort параметар е безбедно обработен
-Order order = Sort.Direction.ASC.equals(direction)
-    ? cb.asc(root.get(sortField))
-    : cb.desc(root.get(sortField));
-
-cq.orderBy(order);
-TypedQuery<User> query = entityManager.createQuery(cq);
-}}}
-
-== 3. Best Practices за имплементација ==
-
-=== 3.1 Правило: Никогаш не користи user input директно во SQL ===
-
-* Сите user inputs мора да бидат параметри
-* Користи Spring Data JPA методи deriva или @Query со @Param
-* За комплексни пропити, користи CriteriaBuilder или Specification
-
-=== 3.2 Правило: Типизирај параметри секогаш ===
-
-❌ ЛОШО:
-{{{
-Long userId = Long.parseLong(request.getUserId());  // String -> Long конверзија
-String query = "SELECT * FROM users WHERE id = " + userId;  // Неопходно SQL injection ризик
-}}}
-
-✅ ДОБРО:
-{{{
-Long userId = Long.parseLong(request.getUserId());  // String -> Long конверзија
-userRepository.findById(userId);  // Параметар е Long, не String
-// Типизирани параметри не можат да содржат SQL код
-}}}
-
-=== 3.3 Правило: Валидирай влез пред користење ===
-
-* Должина на strings
-* Формат на emails (regex или validator)
-* Диапаз��н на числа
-* Null/empty проверки
-
-{{{
-// FinanceService.java - пример
-public void startOrUpdateTracking(Long userId, FinanceStartRequest request) {
-    BigDecimal spending = normalizePercent(request.getSpendingBudget());
-    // ... остали валидации ...
-
-    // Валидирај сума = 100
-    validateSumTo100(spending, saving, investing, donation, credit);
-
-    // Сека валидација е успешна пред зачување во DB
-    financeUserRepository.save(financeUser);
-}
-}}}
-
-=== 3.4 Правило: Користи ОРМ библиотеки (JPA/Hibernate) ===
-
-* ОРМ автоматски параметризира пропити
-* Избегнувај raw JDBC комнди без параметри
-* За специјални случаи, користи JPA Criteria API
-
-=== 3.5 Правило: Логирај и мониторирај пропокусни пропити ===
-
-{{{
-// application.properties
-spring.jpa.show-sql=true
-logging.level.org.hibernate.SQL=DEBUG
-logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
-
-// TRACE анализира пропити и видија каков параметри се врзуваат
-}}}
-
-== 4. Минимални правила за нови допринесувачи ==
-
-При собачување нов feature, следи:
-
-1. ✅ Користи Spring Data JPA методи (findBy*, save*, etc.)
-2. ✅ За custom пропити, користи @Query("#jpql") со @Param параметри
-3. ✅ Никогаш не користи string concatenation со SQL
-4. ✅ Валидирај user inputs пред DB операции
-5. ✅ Провери ownership/authorization пред delete/update операции
-6. ✅ Типизирај сите параметри (Long, BigDecimal, LocalDate, не String)
-
-== 5. Пример: Правилна имплементација новог endpoint-а ==
-
-Сценарио: Нов endpoint за ажурирање на трошок по категорија.
-
-{{{
-// FinanceController.java
-@PutMapping("/allocations/{categoryId}")
-public ResponseEntity<AllocationDto> updateAllocation(
-        @PathVariable Long categoryId,
-        @Valid @RequestBody UpdateAllocationRequest request) {
-
-    AllocationDto result = financeService.updateAllocation(userId, categoryId, request);
-    return ResponseEntity.ok(result);
-}
-
-// FinanceService.java
-@Transactional
-public AllocationDto updateAllocation(Long userId, Long categoryId, UpdateAllocationRequest request) {
-
-    // 1. Валидирај input
-    BigDecimal amount = request.getAmount();
-    if (amount == null || amount.compareTo(BigDecimal.ZERO) <= 0) {
-        throw new RuntimeException("Amount must be greater than 0");
-    }
-
-    // 2. Преземи објект од DB (JPA - безбедно)
-    Allocation allocation = allocationRepository.findById(categoryId)
-            .orElseThrow(() -> new RuntimeException("Allocation not found"));
-
-    // 3. Провери ownership
-    if (!userId.equals(allocation.getUser().getUserId())) {
-        throw new RuntimeException("Allocation not found");
-    }
-
-    // 4. Ажурирај и зачувај (JPA - безбедно)
-    allocation.setAmount(amount);
-    Allocation saved = allocationRepository.save(allocation);
-
-    // 5. Врати DTO
-    return new AllocationDto(saved.getId(), saved.getAmount());
-}
-}}}
-
-== 6. Заднила и прилична функција ==
-
-Оваа заштита е имплементирана во:
-
-* UserRepository.java - findByEmail/Username
-* TaskRepository.java - findByDisciplineUser_UserId, resetFinishedForUser (@Query)
-* TrainingSessionRepository.java - findByTrainingUser_UserIdAndDateIn
-* CustomTrackingService.java - ownership checking + validation
-* FinanceService.java - input validation + JPA save
-* DisciplineService.java - ownership checks + validation
-
-== 7. Потребни алатки за QA ==
-
-При тестирање на нови endpoints, следи:
-
-1. SQL logging: вклучи DEBUG на Hibernate SQL во тест environment
-2. Penetration testing: алати како OWASP ZAP или SQLmap (за белите хакери)
-3. Code review: проверка дека нема string concatenation со SQL
-4. Static analysis: SonarQube или Checkmarx може да детектери потенцијални SQL injection ризици
-
-== Закончување ==
-
-Trekr backend е заштитен од SQL Injection напади преку:
-* Spring Data JPA параметризирани пропити
-* Типизирани параметри
-* Приоритетна валидација
-* Ownership & authorization checks
-* Никогаш нема string concatenation со SQL
-
-За сите нови features, следи ги best practices навултени во овој документ.
-
Index: backend/gitignore
===================================================================
--- backend/gitignore	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,38 +1,0 @@
-HELP.md
-target/
-.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**/target/
-!**/src/test/**/target/
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### VS Code ###
-.vscode/
-
-### Environment Variables ###
-.env
-.env.local
-.env.*.local
Index: backend/pom.xml
===================================================================
--- backend/pom.xml	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ backend/pom.xml	(revision 72053b5fc3ff291757af1cdd64e8fdfcb9e9b17d)
@@ -32,9 +32,4 @@
     <dependencies>
         <dependency>
-            <groupId>io.github.cdimascio</groupId>
-            <artifactId>dotenv-java</artifactId>
-            <version>3.0.0</version>
-        </dependency>
-        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
@@ -53,25 +48,4 @@
         </dependency>
 
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-api</artifactId>
-            <version>0.12.6</version>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-impl</artifactId>
-            <version>0.12.6</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-jackson</artifactId>
-            <version>0.12.6</version>
-            <scope>runtime</scope>
-        </dependency>
         <dependency>
             <groupId>org.postgresql</groupId>
@@ -102,10 +76,4 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-webmvc-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
             <scope>test</scope>
         </dependency>
Index: backend/src/main/java/com/trekr/backend/BackendApplication.java
===================================================================
--- backend/src/main/java/com/trekr/backend/BackendApplication.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ backend/src/main/java/com/trekr/backend/BackendApplication.java	(revision 72053b5fc3ff291757af1cdd64e8fdfcb9e9b17d)
@@ -1,11 +1,6 @@
 package com.trekr.backend;
 
-import io.github.cdimascio.dotenv.Dotenv;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 
 @SpringBootApplication
@@ -13,75 +8,5 @@
 
     public static void main(String[] args) {
-        // Load .env file BEFORE Spring Boot starts
-        // This ensures system properties are available for ${} placeholder resolution
-        Dotenv dotenv = loadEnvironmentVariables();
-
-        // Create SpringApplication instance
-        SpringApplication app = new SpringApplication(BackendApplication.class);
-
-        // Set system properties and default properties from .env file
-        if (dotenv != null) {
-            java.util.Map<String, Object> defaultProps = new java.util.HashMap<>();
-
-            dotenv.entries().forEach(entry -> {
-                String key = entry.getKey();
-                String value = entry.getValue();
-                if (value != null && !value.trim().isEmpty()) {
-                    // Set as system property (for ${} placeholders in application.properties)
-                    System.setProperty(key, value);
-                    // Collect for default properties
-                    defaultProps.put(key, value);
-                }
-            });
-
-            // Set all default properties at once
-            if (!defaultProps.isEmpty()) {
-                app.setDefaultProperties(defaultProps);
-            }
-        }
-
-        app.run(args);
-    }
-
-    private static Dotenv loadEnvironmentVariables() {
-        Dotenv dotenv = null;
-
-        // Prefer a standard ".env" file, but also support the existing "env" file.
-        // We search multiple locations so it works whether the app is launched from:
-        // - backend/ (common in IDE)
-        // - repo root (common when running a built JAR)
-        String[][] candidates = new String[][] {
-                { "./", ".env" },
-                { "./", "env" },
-                { "./backend", ".env" },
-                { "./backend", "env" },
-                { "../", ".env" },
-                { "../", "env" },
-                { "../backend", ".env" },
-                { "../backend", "env" },
-        };
-
-        for (String[] candidate : candidates) {
-            try {
-                Path envPath = Paths.get(candidate[0], candidate[1]).normalize();
-                if (!Files.isRegularFile(envPath)) {
-                    continue;
-                }
-
-                Dotenv loaded = Dotenv.configure()
-                        .directory(envPath.getParent().toString())
-                        .filename(envPath.getFileName().toString())
-                        .ignoreIfMissing()
-                        .load();
-                if (loaded != null) {
-                    dotenv = loaded;
-                    break;
-                }
-            } catch (Exception ignored) {
-                // keep searching
-            }
-        }
-
-        return dotenv;
+        SpringApplication.run(BackendApplication.class, args);
     }
 
Index: backend/src/main/java/com/trekr/backend/config/AuthProperties.java
===================================================================
--- backend/src/main/java/com/trekr/backend/config/AuthProperties.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,15 +1,0 @@
-package com.trekr.backend.config;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-@Getter @Setter
-@ConfigurationProperties(prefix = "auth")
-public class AuthProperties {
-    private String secret;
-    private int accessTokenMaxAge;
-    private int refreshTokenMaxAge;
-}
Index: backend/src/main/java/com/trekr/backend/config/JacksonConfig.java
===================================================================
--- backend/src/main/java/com/trekr/backend/config/JacksonConfig.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,18 +1,0 @@
-package com.trekr.backend.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import tools.jackson.databind.ObjectMapper;
-import tools.jackson.databind.cfg.DateTimeFeature;
-import tools.jackson.databind.json.JsonMapper;
-
-@Configuration
-public class JacksonConfig {
-
-    @Bean
-    public ObjectMapper objectMapper() {
-        return JsonMapper.builder()
-                .disable(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS)
-                .build();
-    }
-}
Index: backend/src/main/java/com/trekr/backend/config/LegacyPasswordEncoder.java
===================================================================
--- backend/src/main/java/com/trekr/backend/config/LegacyPasswordEncoder.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,29 +1,0 @@
-package com.trekr.backend.config;
-
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-/**
- * Supports both BCrypt (for new users) and plain text (for legacy seed data).
- * Use BCrypt for encoding; for matching, tries BCrypt first, then plain.
- */
-public class LegacyPasswordEncoder implements PasswordEncoder {
-
-    private final BCryptPasswordEncoder bcrypt = new BCryptPasswordEncoder();
-
-    @Override
-    public String encode(CharSequence rawPassword) {
-        return bcrypt.encode(rawPassword);
-    }
-
-    @Override
-    public boolean matches(CharSequence rawPassword, String encodedPassword) {
-        if (encodedPassword == null || encodedPassword.isEmpty()) {
-            return false;
-        }
-        if (encodedPassword.startsWith("$2a$") || encodedPassword.startsWith("$2b$")) {
-            return bcrypt.matches(rawPassword, encodedPassword);
-        }
-        return rawPassword.toString().equals(encodedPassword);
-    }
-}
Index: backend/src/main/java/com/trekr/backend/config/SecurityConfig.java
===================================================================
--- backend/src/main/java/com/trekr/backend/config/SecurityConfig.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,67 +1,0 @@
-package com.trekr.backend.config;
-
-import com.trekr.backend.security.JwtAuthenticationFilter;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.Customizer;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.web.SecurityFilterChain;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-import org.springframework.web.cors.CorsConfiguration;
-import org.springframework.web.cors.CorsConfigurationSource;
-import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
-
-import java.util.List;
-
-@Configuration
-@EnableWebSecurity
-public class SecurityConfig {
-
-    private final JwtAuthenticationFilter jwtAuthenticationFilter;
-
-    public SecurityConfig(JwtAuthenticationFilter jwtAuthenticationFilter) {
-        this.jwtAuthenticationFilter = jwtAuthenticationFilter;
-    }
-
-    @Bean
-    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
-        http
-                .csrf(AbstractHttpConfigurer::disable)
-                .cors(Customizer.withDefaults())
-                .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
-                .httpBasic(AbstractHttpConfigurer::disable)
-                .formLogin(AbstractHttpConfigurer::disable)
-                .authorizeHttpRequests(auth -> auth
-                        .requestMatchers("/api/auth/**").permitAll()
-                        .anyRequest().authenticated());
-
-        http.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
-        return http.build();
-    }
-
-    @Bean
-    public CorsConfigurationSource corsConfigurationSource() {
-        CorsConfiguration config = new CorsConfiguration();
-        config.setAllowedOrigins(List.of(
-                "http://localhost:5173",
-                "http://127.0.0.1:5173",
-                "http://localhost:3000",
-                "http://127.0.0.1:3000"));
-        config.setAllowedMethods(List.of("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
-        config.setAllowedHeaders(List.of("Authorization", "Content-Type", "Accept", "Origin", "X-Requested-With"));
-        config.setAllowCredentials(true);
-
-        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
-        source.registerCorsConfiguration("/**", config);
-        return source;
-    }
-
-    @Bean
-    public PasswordEncoder passwordEncoder() {
-        return new LegacyPasswordEncoder();
-    }
-}
Index: backend/src/main/java/com/trekr/backend/controller/AuthController.java
===================================================================
--- backend/src/main/java/com/trekr/backend/controller/AuthController.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,38 +1,0 @@
-package com.trekr.backend.controller;
-
-import com.trekr.backend.dto.auth.AuthResponse;
-import com.trekr.backend.dto.auth.LoginRequest;
-import com.trekr.backend.dto.auth.RegisterRequest;
-import com.trekr.backend.service.AuthService;
-import jakarta.validation.Valid;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@RequestMapping("/api/auth")
-public class AuthController {
-
-    private final AuthService authService;
-
-    public AuthController(AuthService authService) {
-        this.authService = authService;
-    }
-
-    @PostMapping("/register")
-    public ResponseEntity<AuthResponse> register(@Valid @RequestBody RegisterRequest request) {
-        AuthResponse response = authService.register(request);
-        return ResponseEntity.status(HttpStatus.CREATED).body(response);
-    }
-
-    @PostMapping("/login")
-    public ResponseEntity<AuthResponse> login(@Valid @RequestBody LoginRequest request) {
-        AuthResponse response = authService.login(request);
-        return ResponseEntity.ok(response);
-    }
-
-    @GetMapping("/ping")
-    public ResponseEntity<Void> ping() {
-        return ResponseEntity.ok().build();
-    }
-}
Index: backend/src/main/java/com/trekr/backend/controller/CustomTrackingController.java
===================================================================
--- backend/src/main/java/com/trekr/backend/controller/CustomTrackingController.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,102 +1,0 @@
-package com.trekr.backend.controller;
-
-import com.trekr.backend.dto.discipline.CreateCustomTrackingCategoryRequest;
-import com.trekr.backend.dto.discipline.CreateTaskRequest;
-import com.trekr.backend.dto.discipline.CustomTrackingCategoriesResponse;
-import com.trekr.backend.dto.discipline.CustomTrackingCategoryDto;
-import com.trekr.backend.dto.discipline.TaskDto;
-import com.trekr.backend.dto.discipline.TasksResponse;
-import com.trekr.backend.dto.discipline.UpdateTaskFinishedRequest;
-import com.trekr.backend.dto.discipline.UpdateTaskRequest;
-import com.trekr.backend.dto.discipline.UpdateTaskStatusRequest;
-import com.trekr.backend.security.UserPrincipal;
-import com.trekr.backend.service.CustomTrackingService;
-import jakarta.validation.Valid;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.core.Authentication;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@RequestMapping("/api/discipline/custom-tracking-categories")
-public class CustomTrackingController {
-
-    private final CustomTrackingService customTrackingService;
-
-    public CustomTrackingController(CustomTrackingService customTrackingService) {
-        this.customTrackingService = customTrackingService;
-    }
-
-    @GetMapping
-    public CustomTrackingCategoriesResponse customTrackingCategories(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return customTrackingService.getCustomTrackingCategories(principal.getUserId());
-    }
-
-    @PostMapping
-    @ResponseStatus(HttpStatus.CREATED)
-    public CustomTrackingCategoryDto createCustomTrackingCategory(
-            @Valid @RequestBody CreateCustomTrackingCategoryRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return customTrackingService.createCustomTrackingCategory(principal.getUserId(), request);
-    }
-
-    @GetMapping("/{customTrackingId}/tasks")
-    public TasksResponse tasks(
-            @PathVariable Long customTrackingId,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return customTrackingService.getCustomCategoryTasks(principal.getUserId(), customTrackingId);
-    }
-
-    @PostMapping("/{customTrackingId}/tasks")
-    @ResponseStatus(HttpStatus.CREATED)
-    public TaskDto createTask(
-            @PathVariable Long customTrackingId,
-            @Valid @RequestBody CreateTaskRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return customTrackingService.createCustomCategoryTask(principal.getUserId(), customTrackingId, request);
-    }
-
-    @PutMapping("/{customTrackingId}/tasks/{taskId}")
-    public TaskDto updateTask(
-            @PathVariable Long customTrackingId,
-            @PathVariable Long taskId,
-            @Valid @RequestBody UpdateTaskRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return customTrackingService.updateCustomCategoryTask(principal.getUserId(), customTrackingId, taskId, request);
-    }
-
-    @PatchMapping("/{customTrackingId}/tasks/{taskId}/finished")
-    public TaskDto updateTaskFinished(
-            @PathVariable Long customTrackingId,
-            @PathVariable Long taskId,
-            @Valid @RequestBody UpdateTaskFinishedRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return customTrackingService.updateCustomCategoryTaskFinished(principal.getUserId(), customTrackingId, taskId, request);
-    }
-
-    @PatchMapping("/{customTrackingId}/tasks/{taskId}/status")
-    public TaskDto updateTaskStatus(
-            @PathVariable Long customTrackingId,
-            @PathVariable Long taskId,
-            @RequestBody UpdateTaskStatusRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return customTrackingService.updateCustomCategoryTaskStatus(principal.getUserId(), customTrackingId, taskId, request);
-    }
-
-    @DeleteMapping("/{customTrackingId}/tasks/{taskId}")
-    @ResponseStatus(HttpStatus.NO_CONTENT)
-    public void deleteTask(
-            @PathVariable Long customTrackingId,
-            @PathVariable Long taskId,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        customTrackingService.deleteCustomCategoryTask(principal.getUserId(), customTrackingId, taskId);
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/controller/DisciplineController.java
===================================================================
--- backend/src/main/java/com/trekr/backend/controller/DisciplineController.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,122 +1,0 @@
-package com.trekr.backend.controller;
-
-import com.trekr.backend.dto.discipline.CreateTaskRequest;
-import com.trekr.backend.dto.discipline.ComputeDailyCompletionResponse;
-import com.trekr.backend.dto.discipline.DailyCompletionsResponse;
-import com.trekr.backend.dto.discipline.TaskDto;
-import com.trekr.backend.dto.discipline.TasksResponse;
-import com.trekr.backend.dto.discipline.TrackingStatusResponse;
-import com.trekr.backend.dto.discipline.UpdateTaskFinishedRequest;
-import com.trekr.backend.dto.discipline.UpdateTaskRequest;
-import com.trekr.backend.security.UserPrincipal;
-import com.trekr.backend.service.DisciplineService;
-import jakarta.validation.Valid;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.core.Authentication;
-import org.springframework.web.bind.annotation.*;
-
-import java.time.LocalDate;
-
-@RestController
-@RequestMapping("/api/discipline")
-public class DisciplineController {
-
-    private final DisciplineService disciplineService;
-
-    public DisciplineController(DisciplineService disciplineService) {
-        this.disciplineService = disciplineService;
-    }
-
-    @GetMapping("/status")
-    public TrackingStatusResponse status(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        boolean tracking = disciplineService.isTracking(principal.getUserId());
-        return new TrackingStatusResponse(tracking);
-    }
-
-    @PostMapping("/start")
-    @ResponseStatus(HttpStatus.CREATED)
-    public TrackingStatusResponse start(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        disciplineService.startTracking(principal.getUserId());
-        return new TrackingStatusResponse(true);
-    }
-
-    @GetMapping("/tasks")
-    public TasksResponse tasks(
-            @RequestParam(defaultValue = "0") int page,
-            @RequestParam(defaultValue = "20") int size,
-            Authentication authentication) {
-        if (size < 1)
-            size = 20;
-        if (size > 200)
-            size = 200;
-        if (page < 0)
-            page = 0;
-
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return disciplineService.getTasks(principal.getUserId(), page, size);
-    }
-
-    @PostMapping("/tasks")
-    @ResponseStatus(HttpStatus.CREATED)
-    public TaskDto createTask(
-            @Valid @RequestBody CreateTaskRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return disciplineService.createTask(principal.getUserId(), request);
-    }
-
-    @PutMapping("/tasks/{taskId}")
-    public TaskDto updateTask(
-            @PathVariable Long taskId,
-            @Valid @RequestBody UpdateTaskRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return disciplineService.updateTask(principal.getUserId(), taskId, request);
-    }
-
-    @PatchMapping("/tasks/{taskId}/finished")
-    public TaskDto updateTaskFinished(
-            @PathVariable Long taskId,
-            @Valid @RequestBody UpdateTaskFinishedRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return disciplineService.updateTaskFinished(principal.getUserId(), taskId, request);
-    }
-
-    @DeleteMapping("/tasks/{taskId}")
-    @ResponseStatus(HttpStatus.NO_CONTENT)
-    public void deleteTask(
-            @PathVariable Long taskId,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        disciplineService.deleteTask(principal.getUserId(), taskId);
-    }
-
-    @PostMapping("/daily-completions/compute")
-    public ComputeDailyCompletionResponse computeDailyCompletion(
-            @RequestParam(required = false) LocalDate date,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        LocalDate target = (date != null) ? date : LocalDate.now();
-        return disciplineService.computeDailyCompletion(principal.getUserId(), target);
-    }
-
-    @GetMapping("/daily-completions")
-    public DailyCompletionsResponse dailyCompletions(
-            @RequestParam(defaultValue = "0") int page,
-            @RequestParam(defaultValue = "14") int size,
-            Authentication authentication) {
-        if (size < 1)
-            size = 14;
-        if (size > 365)
-            size = 365;
-        if (page < 0)
-            page = 0;
-
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return disciplineService.getDailyCompletions(principal.getUserId(), page, size);
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/controller/FinanceController.java
===================================================================
--- backend/src/main/java/com/trekr/backend/controller/FinanceController.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,72 +1,0 @@
-package com.trekr.backend.controller;
-
-import com.trekr.backend.dto.finance.CreateIncomeRequest;
-import com.trekr.backend.dto.finance.FinanceProfileResponse;
-import com.trekr.backend.dto.finance.FinanceStartRequest;
-import com.trekr.backend.dto.finance.IncomeDto;
-import com.trekr.backend.dto.finance.IncomesResponse;
-import com.trekr.backend.dto.finance.TrackingStatusResponse;
-import com.trekr.backend.security.UserPrincipal;
-import com.trekr.backend.service.FinanceService;
-import jakarta.validation.Valid;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.core.Authentication;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@RequestMapping("/api/finance")
-public class FinanceController {
-
-    private final FinanceService financeService;
-
-    public FinanceController(FinanceService financeService) {
-        this.financeService = financeService;
-    }
-
-    @GetMapping("/status")
-    public TrackingStatusResponse status(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        boolean tracking = financeService.isTracking(principal.getUserId());
-        return new TrackingStatusResponse(tracking);
-    }
-
-    @PostMapping("/start")
-    @ResponseStatus(HttpStatus.CREATED)
-    public TrackingStatusResponse start(@Valid @RequestBody FinanceStartRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        financeService.startOrUpdateTracking(principal.getUserId(), request);
-        return new TrackingStatusResponse(true);
-    }
-
-    @GetMapping("/profile")
-    public FinanceProfileResponse profile(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return financeService.getProfile(principal.getUserId());
-    }
-
-    @GetMapping("/incomes")
-    public IncomesResponse incomes(
-            @RequestParam(defaultValue = "0") int page,
-            @RequestParam(defaultValue = "5") int size,
-            Authentication authentication) {
-        if (size < 1)
-            size = 5;
-        if (size > 50)
-            size = 50;
-        if (page < 0)
-            page = 0;
-
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return financeService.getIncomes(principal.getUserId(), page, size);
-    }
-
-    @PostMapping("/incomes")
-    @ResponseStatus(HttpStatus.CREATED)
-    public IncomeDto createIncome(@Valid @RequestBody CreateIncomeRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return financeService.createIncome(principal.getUserId(), request);
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/controller/InvestingController.java
===================================================================
--- backend/src/main/java/com/trekr/backend/controller/InvestingController.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,74 +1,0 @@
-package com.trekr.backend.controller;
-
-import com.trekr.backend.dto.invest.AssetDto;
-import com.trekr.backend.dto.invest.CreateAssetRequest;
-import com.trekr.backend.dto.invest.InvestingAssetsResponse;
-import com.trekr.backend.dto.invest.TrackingStatusResponse;
-import com.trekr.backend.security.UserPrincipal;
-import com.trekr.backend.service.InvestingService;
-import jakarta.validation.Valid;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.core.Authentication;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/investing")
-public class InvestingController {
-
-    private final InvestingService investingService;
-
-    public InvestingController(InvestingService investingService) {
-        this.investingService = investingService;
-    }
-
-    @GetMapping("/status")
-    public TrackingStatusResponse status(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        boolean tracking = investingService.isTracking(principal.getUserId());
-        return new TrackingStatusResponse(tracking);
-    }
-
-    @PostMapping("/start")
-    @ResponseStatus(HttpStatus.CREATED)
-    public TrackingStatusResponse start(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        investingService.startTracking(principal.getUserId());
-        return new TrackingStatusResponse(true);
-    }
-
-    @GetMapping("/assets")
-    public InvestingAssetsResponse assets(
-            @RequestParam(defaultValue = "0") int page,
-            @RequestParam(defaultValue = "5") int size,
-            Authentication authentication) {
-        if (size < 1)
-            size = 5;
-        if (size > 50)
-            size = 50;
-        if (page < 0)
-            page = 0;
-
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return investingService.getAssets(principal.getUserId(), page, size);
-    }
-
-    @PostMapping("/assets")
-    @ResponseStatus(HttpStatus.CREATED)
-    public AssetDto createAsset(
-            @Valid @RequestBody CreateAssetRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return investingService.createAsset(principal.getUserId(), request);
-    }
-
-    @DeleteMapping("/assets/{assetId}")
-    @ResponseStatus(HttpStatus.NO_CONTENT)
-    public void deleteAsset(
-            @PathVariable Long assetId,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        investingService.deleteAsset(principal.getUserId(), assetId);
-    }
-}
Index: backend/src/main/java/com/trekr/backend/controller/TrainingController.java
===================================================================
--- backend/src/main/java/com/trekr/backend/controller/TrainingController.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,80 +1,0 @@
-package com.trekr.backend.controller;
-
-import com.trekr.backend.dto.training.CreateTrainingSessionRequest;
-import com.trekr.backend.dto.training.TrainingSessionDto;
-import com.trekr.backend.dto.training.TrainingStartRequest;
-import com.trekr.backend.dto.training.TrainingSessionsResponse;
-import com.trekr.backend.dto.training.TrainingProfileResponse;
-import com.trekr.backend.dto.training.TrackingStatusResponse;
-import com.trekr.backend.dto.training.WorkoutTypeDto;
-import com.trekr.backend.security.UserPrincipal;
-import com.trekr.backend.service.TrainingService;
-import jakarta.validation.Valid;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.core.Authentication;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/training")
-public class TrainingController {
-
-    private final TrainingService trainingService;
-
-    public TrainingController(TrainingService trainingService) {
-        this.trainingService = trainingService;
-    }
-
-    @GetMapping("/status")
-    public TrackingStatusResponse status(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        boolean tracking = trainingService.isTracking(principal.getUserId());
-        return new TrackingStatusResponse(tracking);
-    }
-
-    @PostMapping("/start")
-    @ResponseStatus(HttpStatus.CREATED)
-    public TrackingStatusResponse start(@Valid @RequestBody TrainingStartRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        trainingService.startTracking(principal.getUserId(), request);
-        return new TrackingStatusResponse(true);
-    }
-
-    @GetMapping("/sessions")
-    public TrainingSessionsResponse sessions(
-            @RequestParam(defaultValue = "0") int page,
-            @RequestParam(defaultValue = "5") int size,
-            Authentication authentication) {
-        if (size < 1)
-            size = 5;
-        if (size > 50)
-            size = 50;
-        if (page < 0)
-            page = 0;
-
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return trainingService.getSessions(principal.getUserId(), page, size);
-    }
-
-    @GetMapping("/workout-types")
-    public List<WorkoutTypeDto> workoutTypes() {
-        return trainingService.getWorkoutTypes();
-    }
-
-    @GetMapping("/profile")
-    public TrainingProfileResponse profile(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return trainingService.getProfile(principal.getUserId());
-    }
-
-    @PostMapping("/sessions")
-    @ResponseStatus(HttpStatus.CREATED)
-    public TrainingSessionDto createSession(
-            @Valid @RequestBody CreateTrainingSessionRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return trainingService.createSession(principal.getUserId(), request);
-    }
-}
Index: backend/src/main/java/com/trekr/backend/controller/WeightController.java
===================================================================
--- backend/src/main/java/com/trekr/backend/controller/WeightController.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,97 +1,0 @@
-package com.trekr.backend.controller;
-
-import com.trekr.backend.dto.weight.CreateDailyIntakeRequest;
-import com.trekr.backend.dto.weight.TrackingStatusResponse;
-import com.trekr.backend.dto.weight.WeightDailyIntakeDto;
-import com.trekr.backend.dto.weight.WeightDailyIntakesResponse;
-import com.trekr.backend.dto.weight.WeightProfileResponse;
-import com.trekr.backend.dto.weight.WeightStartRequest;
-import com.trekr.backend.dto.weight.TodayTrainingInfoDto;
-import com.trekr.backend.security.UserPrincipal;
-import com.trekr.backend.service.WeightService;
-import jakarta.validation.Valid;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.core.Authentication;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseStatus;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/api/weight")
-public class WeightController {
-
-    private final WeightService weightService;
-
-    public WeightController(WeightService weightService) {
-        this.weightService = weightService;
-    }
-
-    @GetMapping("/status")
-    public TrackingStatusResponse status(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return new TrackingStatusResponse(weightService.isTracking(principal.getUserId()));
-    }
-
-    @PostMapping("/start")
-    @ResponseStatus(HttpStatus.CREATED)
-    public TrackingStatusResponse start(
-            @Valid @RequestBody WeightStartRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        weightService.startTracking(principal.getUserId(), request);
-        return new TrackingStatusResponse(true);
-    }
-
-    @GetMapping("/profile")
-    public WeightProfileResponse profile(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return weightService.getProfile(principal.getUserId());
-    }
-
-    @GetMapping("/intakes")
-    public WeightDailyIntakesResponse intakes(
-            @RequestParam(defaultValue = "0") int page,
-            @RequestParam(defaultValue = "5") int size,
-            Authentication authentication) {
-        if (size < 1) {
-            size = 5;
-        }
-        if (size > 50) {
-            size = 50;
-        }
-        if (page < 0) {
-            page = 0;
-        }
-
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return weightService.getDailyIntakes(principal.getUserId(), page, size);
-    }
-
-    @PostMapping("/intakes")
-    @ResponseStatus(HttpStatus.CREATED)
-    public WeightDailyIntakeDto createDailyIntake(
-            @Valid @RequestBody CreateDailyIntakeRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return weightService.createDailyIntake(principal.getUserId(), request);
-    }
-
-    @PutMapping("/profile")
-    public WeightProfileResponse updateProfile(
-            @Valid @RequestBody WeightStartRequest request,
-            Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return weightService.updateProfile(principal.getUserId(), request);
-    }
-
-    @GetMapping("/today-training")
-    public TodayTrainingInfoDto getTodayTrainingInfo(Authentication authentication) {
-        UserPrincipal principal = (UserPrincipal) authentication.getPrincipal();
-        return weightService.getTodayTrainingInfo(principal.getUserId());
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/auth/AuthResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/auth/AuthResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,60 +1,0 @@
-package com.trekr.backend.dto.auth;
-
-public class AuthResponse {
-    private String token;
-    private String type = "Bearer";
-    private Long userId;
-    private String username;
-    private String email;
-
-    public AuthResponse() {
-    }
-
-    public AuthResponse(String token, String type, Long userId, String username, String email) {
-        this.token = token;
-        this.type = type;
-        this.userId = userId;
-        this.username = username;
-        this.email = email;
-    }
-
-    public String getToken() {
-        return token;
-    }
-
-    public void setToken(String token) {
-        this.token = token;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/auth/LoginRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/auth/LoginRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,31 +1,0 @@
-package com.trekr.backend.dto.auth;
-
-import jakarta.validation.constraints.NotBlank;
-
-public class LoginRequest {
-
-    @NotBlank(message = "Username or email is required")
-    private String usernameOrEmail;
-
-    @NotBlank(message = "Password is required")
-    private String password;
-
-    public LoginRequest() {
-    }
-
-    public String getUsernameOrEmail() {
-        return usernameOrEmail;
-    }
-
-    public void setUsernameOrEmail(String usernameOrEmail) {
-        this.usernameOrEmail = usernameOrEmail;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/auth/RegisterRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/auth/RegisterRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,47 +1,0 @@
-package com.trekr.backend.dto.auth;
-
-import jakarta.validation.constraints.Email;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-
-public class RegisterRequest {
-
-    @NotBlank(message = "Email is required")
-    @Email(message = "Email must be valid")
-    private String email;
-
-    @NotBlank(message = "Username is required")
-    @Size(min = 3, max = 50, message = "Username must be between 3 and 50 characters")
-    private String username;
-
-    @NotBlank(message = "Password is required")
-    @Size(min = 6, message = "Password must be at least 6 characters")
-    private String password;
-
-    public RegisterRequest() {
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/discipline/ComputeDailyCompletionResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/ComputeDailyCompletionResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,5 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-public record ComputeDailyCompletionResponse(boolean created, DailyCompletionDto completion) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/CreateCustomTrackingCategoryRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/CreateCustomTrackingCategoryRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,29 +1,0 @@
-
-package com.trekr.backend.dto.discipline;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-
-public class CreateCustomTrackingCategoryRequest {
-
-	@NotBlank(message = "Name is required")
-	@Size(max = 100, message = "Name must be at most 100 characters")
-	private String name;
-
-	public CreateCustomTrackingCategoryRequest() {
-	}
-
-	public CreateCustomTrackingCategoryRequest(String name) {
-		this.name = name;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}
-
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/CreateTaskRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/CreateTaskRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,30 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-import jakarta.validation.constraints.NotBlank;
-
-import java.time.LocalDate;
-
-public class CreateTaskRequest {
-
-    @NotBlank
-    private String name;
-
-    private String description;
-    private LocalDate dueDate;
-    private String priority;
-
-    public CreateTaskRequest() {
-    }
-
-    public String getName() { return name; }
-    public void setName(String name) { this.name = name; }
-
-    public String getDescription() { return description; }
-    public void setDescription(String description) { this.description = description; }
-
-    public LocalDate getDueDate() { return dueDate; }
-    public void setDueDate(LocalDate dueDate) { this.dueDate = dueDate; }
-
-    public String getPriority() { return priority; }
-    public void setPriority(String priority) { this.priority = priority; }
-}
Index: backend/src/main/java/com/trekr/backend/dto/discipline/CustomTrackingCategoriesResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/CustomTrackingCategoriesResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,26 +1,0 @@
-
-package com.trekr.backend.dto.discipline;
-
-import java.util.List;
-
-public class CustomTrackingCategoriesResponse {
-
-	private List<CustomTrackingCategoryDto> items;
-
-	public CustomTrackingCategoriesResponse() {
-	}
-
-	public CustomTrackingCategoriesResponse(List<CustomTrackingCategoryDto> items) {
-		this.items = items;
-	}
-
-	public List<CustomTrackingCategoryDto> getItems() {
-		return items;
-	}
-
-	public void setItems(List<CustomTrackingCategoryDto> items) {
-		this.items = items;
-	}
-}
-
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/CustomTrackingCategoryDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/CustomTrackingCategoryDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,34 +1,0 @@
-
-package com.trekr.backend.dto.discipline;
-
-public class CustomTrackingCategoryDto {
-
-	private Long customTrackingId;
-	private String name;
-
-	public CustomTrackingCategoryDto() {
-	}
-
-	public CustomTrackingCategoryDto(Long customTrackingId, String name) {
-		this.customTrackingId = customTrackingId;
-		this.name = name;
-	}
-
-	public Long getCustomTrackingId() {
-		return customTrackingId;
-	}
-
-	public void setCustomTrackingId(Long customTrackingId) {
-		this.customTrackingId = customTrackingId;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}
-
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/DailyCompletionDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/DailyCompletionDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,8 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-public record DailyCompletionDto(Long dailyCompletionId, LocalDate date, BigDecimal procent) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/DailyCompletionsResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/DailyCompletionsResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,7 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-import java.util.List;
-
-public record DailyCompletionsResponse(List<DailyCompletionDto> completions, boolean hasMore) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/TaskDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/TaskDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,16 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-import com.trekr.backend.entity.discipline.TaskStatus;
-
-import java.time.LocalDate;
-
-public record TaskDto(
-        Long taskId,
-        String name,
-        boolean isFinished,
-        TaskStatus status,
-        String description,
-        LocalDate dueDate,
-        String priority
-) {
-}
Index: backend/src/main/java/com/trekr/backend/dto/discipline/TasksResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/TasksResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,7 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-import java.util.List;
-
-public record TasksResponse(List<TaskDto> tasks, boolean hasMore) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/TrackingStatusResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/TrackingStatusResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,5 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-public record TrackingStatusResponse(boolean tracking) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/UpdateTaskFinishedRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/UpdateTaskFinishedRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,21 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-import jakarta.validation.constraints.NotNull;
-
-public class UpdateTaskFinishedRequest {
-
-    @NotNull
-    private Boolean isFinished;
-
-    public UpdateTaskFinishedRequest() {
-    }
-
-    public Boolean getIsFinished() {
-        return isFinished;
-    }
-
-    public void setIsFinished(Boolean isFinished) {
-        this.isFinished = isFinished;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/discipline/UpdateTaskRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/UpdateTaskRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,35 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-import com.trekr.backend.entity.discipline.TaskStatus;
-import jakarta.validation.constraints.NotBlank;
-
-import java.time.LocalDate;
-
-public class UpdateTaskRequest {
-
-    @NotBlank
-    private String name;
-
-    private String description;
-    private LocalDate dueDate;
-    private String priority;
-    private TaskStatus status;
-
-    public UpdateTaskRequest() {
-    }
-
-    public String getName() { return name; }
-    public void setName(String name) { this.name = name; }
-
-    public String getDescription() { return description; }
-    public void setDescription(String description) { this.description = description; }
-
-    public LocalDate getDueDate() { return dueDate; }
-    public void setDueDate(LocalDate dueDate) { this.dueDate = dueDate; }
-
-    public String getPriority() { return priority; }
-    public void setPriority(String priority) { this.priority = priority; }
-
-    public TaskStatus getStatus() { return status; }
-    public void setStatus(TaskStatus status) { this.status = status; }
-}
Index: backend/src/main/java/com/trekr/backend/dto/discipline/UpdateTaskStatusRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/discipline/UpdateTaskStatusRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,19 +1,0 @@
-package com.trekr.backend.dto.discipline;
-
-import com.trekr.backend.entity.discipline.TaskStatus;
-
-public class UpdateTaskStatusRequest {
-    private TaskStatus status;
-
-    public UpdateTaskStatusRequest() {
-    }
-
-    public TaskStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(TaskStatus status) {
-        this.status = status;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/finance/CreateIncomeRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/finance/CreateIncomeRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,35 +1,0 @@
-package com.trekr.backend.dto.finance;
-
-import jakarta.validation.constraints.NotNull;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-public class CreateIncomeRequest {
-
-    @NotNull
-    private LocalDate date;
-
-    @NotNull
-    private BigDecimal amount;
-
-    public CreateIncomeRequest() {
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
-
-    public BigDecimal getAmount() {
-        return amount;
-    }
-
-    public void setAmount(BigDecimal amount) {
-        this.amount = amount;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/finance/FinanceProfileResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/finance/FinanceProfileResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,12 +1,0 @@
-package com.trekr.backend.dto.finance;
-
-import java.math.BigDecimal;
-
-public record FinanceProfileResponse(
-        BigDecimal spendingBudget,
-        BigDecimal savingBudget,
-        BigDecimal investingBudget,
-        BigDecimal donationBudget,
-        BigDecimal credit) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/finance/FinanceStartRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/finance/FinanceStartRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,67 +1,0 @@
-package com.trekr.backend.dto.finance;
-
-import jakarta.validation.constraints.NotNull;
-
-import java.math.BigDecimal;
-
-public class FinanceStartRequest {
-
-    @NotNull
-    private BigDecimal spendingBudget;
-
-    @NotNull
-    private BigDecimal savingBudget;
-
-    @NotNull
-    private BigDecimal investingBudget;
-
-    @NotNull
-    private BigDecimal donationBudget;
-
-    @NotNull
-    private BigDecimal credit;
-
-    public FinanceStartRequest() {
-    }
-
-    public BigDecimal getSpendingBudget() {
-        return spendingBudget;
-    }
-
-    public void setSpendingBudget(BigDecimal spendingBudget) {
-        this.spendingBudget = spendingBudget;
-    }
-
-    public BigDecimal getSavingBudget() {
-        return savingBudget;
-    }
-
-    public void setSavingBudget(BigDecimal savingBudget) {
-        this.savingBudget = savingBudget;
-    }
-
-    public BigDecimal getInvestingBudget() {
-        return investingBudget;
-    }
-
-    public void setInvestingBudget(BigDecimal investingBudget) {
-        this.investingBudget = investingBudget;
-    }
-
-    public BigDecimal getDonationBudget() {
-        return donationBudget;
-    }
-
-    public void setDonationBudget(BigDecimal donationBudget) {
-        this.donationBudget = donationBudget;
-    }
-
-    public BigDecimal getCredit() {
-        return credit;
-    }
-
-    public void setCredit(BigDecimal credit) {
-        this.credit = credit;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/finance/IncomeDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/finance/IncomeDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,11 +1,0 @@
-package com.trekr.backend.dto.finance;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-public record IncomeDto(
-        Long incomeId,
-        LocalDate date,
-        BigDecimal amount) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/finance/IncomesResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/finance/IncomesResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,7 +1,0 @@
-package com.trekr.backend.dto.finance;
-
-import java.util.List;
-
-public record IncomesResponse(List<IncomeDto> incomes, boolean hasMore) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/finance/TrackingStatusResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/finance/TrackingStatusResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,5 +1,0 @@
-package com.trekr.backend.dto.finance;
-
-public record TrackingStatusResponse(boolean tracking) {
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/invest/AssetDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/invest/AssetDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,64 +1,0 @@
-package com.trekr.backend.dto.invest;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-public class AssetDto {
-
-    private Long assetId;
-    private String tickerSymbol;
-    private BigDecimal buyPrice;
-    private LocalDate buyDate;
-    private BigDecimal quantity;
-
-    public AssetDto() {
-    }
-
-    public AssetDto(Long assetId, String tickerSymbol, BigDecimal buyPrice, LocalDate buyDate, BigDecimal quantity) {
-        this.assetId = assetId;
-        this.tickerSymbol = tickerSymbol;
-        this.buyPrice = buyPrice;
-        this.buyDate = buyDate;
-        this.quantity = quantity;
-    }
-
-    public Long getAssetId() {
-        return assetId;
-    }
-
-    public void setAssetId(Long assetId) {
-        this.assetId = assetId;
-    }
-
-    public String getTickerSymbol() {
-        return tickerSymbol;
-    }
-
-    public void setTickerSymbol(String tickerSymbol) {
-        this.tickerSymbol = tickerSymbol;
-    }
-
-    public BigDecimal getBuyPrice() {
-        return buyPrice;
-    }
-
-    public void setBuyPrice(BigDecimal buyPrice) {
-        this.buyPrice = buyPrice;
-    }
-
-    public LocalDate getBuyDate() {
-        return buyDate;
-    }
-
-    public void setBuyDate(LocalDate buyDate) {
-        this.buyDate = buyDate;
-    }
-
-    public BigDecimal getQuantity() {
-        return quantity;
-    }
-
-    public void setQuantity(BigDecimal quantity) {
-        this.quantity = quantity;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/invest/CreateAssetRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/invest/CreateAssetRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,60 +1,0 @@
-package com.trekr.backend.dto.invest;
-
-import jakarta.validation.constraints.DecimalMin;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.PastOrPresent;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-public class CreateAssetRequest {
-
-    @NotBlank
-    private String tickerSymbol;
-
-    @NotNull
-    @DecimalMin(value = "0", inclusive = false)
-    private BigDecimal quantity;
-
-    @DecimalMin(value = "0", inclusive = true)
-    private BigDecimal buyPrice;
-
-    @PastOrPresent
-    private LocalDate buyDate;
-
-    public CreateAssetRequest() {
-    }
-
-    public String getTickerSymbol() {
-        return tickerSymbol;
-    }
-
-    public void setTickerSymbol(String tickerSymbol) {
-        this.tickerSymbol = tickerSymbol;
-    }
-
-    public BigDecimal getQuantity() {
-        return quantity;
-    }
-
-    public void setQuantity(BigDecimal quantity) {
-        this.quantity = quantity;
-    }
-
-    public BigDecimal getBuyPrice() {
-        return buyPrice;
-    }
-
-    public void setBuyPrice(BigDecimal buyPrice) {
-        this.buyPrice = buyPrice;
-    }
-
-    public LocalDate getBuyDate() {
-        return buyDate;
-    }
-
-    public void setBuyDate(LocalDate buyDate) {
-        this.buyDate = buyDate;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/invest/InvestingAssetsResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/invest/InvestingAssetsResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,33 +1,0 @@
-package com.trekr.backend.dto.invest;
-
-import java.util.List;
-
-public class InvestingAssetsResponse {
-
-    private List<AssetDto> assets;
-    private boolean hasMore;
-
-    public InvestingAssetsResponse() {
-    }
-
-    public InvestingAssetsResponse(List<AssetDto> assets, boolean hasMore) {
-        this.assets = assets;
-        this.hasMore = hasMore;
-    }
-
-    public List<AssetDto> getAssets() {
-        return assets;
-    }
-
-    public void setAssets(List<AssetDto> assets) {
-        this.assets = assets;
-    }
-
-    public boolean isHasMore() {
-        return hasMore;
-    }
-
-    public void setHasMore(boolean hasMore) {
-        this.hasMore = hasMore;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/invest/TrackingStatusResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/invest/TrackingStatusResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,21 +1,0 @@
-package com.trekr.backend.dto.invest;
-
-public class TrackingStatusResponse {
-
-    private boolean tracking;
-
-    public TrackingStatusResponse() {
-    }
-
-    public TrackingStatusResponse(boolean tracking) {
-        this.tracking = tracking;
-    }
-
-    public boolean isTracking() {
-        return tracking;
-    }
-
-    public void setTracking(boolean tracking) {
-        this.tracking = tracking;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/training/CreateTrainingSessionRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/training/CreateTrainingSessionRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,71 +1,0 @@
-package com.trekr.backend.dto.training;
-
-import jakarta.validation.constraints.DecimalMin;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.PastOrPresent;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-public class CreateTrainingSessionRequest {
-
-    @NotBlank
-    private String type;
-
-    @NotNull
-    @DecimalMin(value = "1", inclusive = true)
-    private BigDecimal durationMinutes;
-
-    @NotNull
-    private Boolean autoCalculateCalories;
-
-    @DecimalMin(value = "0", inclusive = true)
-    private BigDecimal calories;
-
-    @PastOrPresent
-    private LocalDate date;
-
-    public CreateTrainingSessionRequest() {
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public BigDecimal getDurationMinutes() {
-        return durationMinutes;
-    }
-
-    public void setDurationMinutes(BigDecimal durationMinutes) {
-        this.durationMinutes = durationMinutes;
-    }
-
-    public Boolean getAutoCalculateCalories() {
-        return autoCalculateCalories;
-    }
-
-    public void setAutoCalculateCalories(Boolean autoCalculateCalories) {
-        this.autoCalculateCalories = autoCalculateCalories;
-    }
-
-    public BigDecimal getCalories() {
-        return calories;
-    }
-
-    public void setCalories(BigDecimal calories) {
-        this.calories = calories;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/training/TrackingStatusResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/training/TrackingStatusResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,21 +1,0 @@
-package com.trekr.backend.dto.training;
-
-public class TrackingStatusResponse {
-
-    private boolean tracking;
-
-    public TrackingStatusResponse() {
-    }
-
-    public TrackingStatusResponse(boolean tracking) {
-        this.tracking = tracking;
-    }
-
-    public boolean isTracking() {
-        return tracking;
-    }
-
-    public void setTracking(boolean tracking) {
-        this.tracking = tracking;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/training/TrainingProfileResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/training/TrainingProfileResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,43 +1,0 @@
-package com.trekr.backend.dto.training;
-
-import java.math.BigDecimal;
-
-public class TrainingProfileResponse {
-
-    private String gender;
-    private Integer age;
-    private BigDecimal weight;
-
-    public TrainingProfileResponse() {
-    }
-
-    public TrainingProfileResponse(String gender, Integer age, BigDecimal weight) {
-        this.gender = gender;
-        this.age = age;
-        this.weight = weight;
-    }
-
-    public String getGender() {
-        return gender;
-    }
-
-    public void setGender(String gender) {
-        this.gender = gender;
-    }
-
-    public Integer getAge() {
-        return age;
-    }
-
-    public void setAge(Integer age) {
-        this.age = age;
-    }
-
-    public BigDecimal getWeight() {
-        return weight;
-    }
-
-    public void setWeight(BigDecimal weight) {
-        this.weight = weight;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/training/TrainingSessionDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/training/TrainingSessionDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,64 +1,0 @@
-package com.trekr.backend.dto.training;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-public class TrainingSessionDto {
-
-    private Long trainingId;
-    private LocalDate date;
-    private String type;
-    private BigDecimal duration;
-    private BigDecimal calories;
-
-    public TrainingSessionDto() {
-    }
-
-    public TrainingSessionDto(Long trainingId, LocalDate date, String type, BigDecimal duration, BigDecimal calories) {
-        this.trainingId = trainingId;
-        this.date = date;
-        this.type = type;
-        this.duration = duration;
-        this.calories = calories;
-    }
-
-    public Long getTrainingId() {
-        return trainingId;
-    }
-
-    public void setTrainingId(Long trainingId) {
-        this.trainingId = trainingId;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public BigDecimal getDuration() {
-        return duration;
-    }
-
-    public void setDuration(BigDecimal duration) {
-        this.duration = duration;
-    }
-
-    public BigDecimal getCalories() {
-        return calories;
-    }
-
-    public void setCalories(BigDecimal calories) {
-        this.calories = calories;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/training/TrainingSessionsResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/training/TrainingSessionsResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,33 +1,0 @@
-package com.trekr.backend.dto.training;
-
-import java.util.List;
-
-public class TrainingSessionsResponse {
-
-    private List<TrainingSessionDto> sessions;
-    private boolean hasMore;
-
-    public TrainingSessionsResponse() {
-    }
-
-    public TrainingSessionsResponse(List<TrainingSessionDto> sessions, boolean hasMore) {
-        this.sessions = sessions;
-        this.hasMore = hasMore;
-    }
-
-    public List<TrainingSessionDto> getSessions() {
-        return sessions;
-    }
-
-    public void setSessions(List<TrainingSessionDto> sessions) {
-        this.sessions = sessions;
-    }
-
-    public boolean isHasMore() {
-        return hasMore;
-    }
-
-    public void setHasMore(boolean hasMore) {
-        this.hasMore = hasMore;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/training/TrainingStartRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/training/TrainingStartRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,50 +1,0 @@
-package com.trekr.backend.dto.training;
-
-import jakarta.validation.constraints.Max;
-import jakarta.validation.constraints.Min;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-
-import java.math.BigDecimal;
-
-public class TrainingStartRequest {
-
-    @NotBlank(message = "Gender is required")
-    private String gender;
-
-    @NotNull(message = "Age is required")
-    @Min(value = 1, message = "Age must be greater than 0")
-    @Max(value = 120, message = "Age must be realistic")
-    private Integer age;
-
-    @NotNull(message = "Weight is required")
-    @Min(value = 1, message = "Weight must be greater than 0")
-    private BigDecimal weight;
-
-    public TrainingStartRequest() {
-    }
-
-    public String getGender() {
-        return gender;
-    }
-
-    public void setGender(String gender) {
-        this.gender = gender;
-    }
-
-    public Integer getAge() {
-        return age;
-    }
-
-    public void setAge(Integer age) {
-        this.age = age;
-    }
-
-    public BigDecimal getWeight() {
-        return weight;
-    }
-
-    public void setWeight(BigDecimal weight) {
-        this.weight = weight;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/training/WorkoutTypeDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/training/WorkoutTypeDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,43 +1,0 @@
-package com.trekr.backend.dto.training;
-
-import java.math.BigDecimal;
-
-public class WorkoutTypeDto {
-
-    private String type;
-    private String label;
-    private BigDecimal met;
-
-    public WorkoutTypeDto() {
-    }
-
-    public WorkoutTypeDto(String type, String label, BigDecimal met) {
-        this.type = type;
-        this.label = label;
-        this.met = met;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public BigDecimal getMet() {
-        return met;
-    }
-
-    public void setMet(BigDecimal met) {
-        this.met = met;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/dto/weight/CreateDailyIntakeRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/weight/CreateDailyIntakeRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,22 +1,0 @@
-package com.trekr.backend.dto.weight;
-
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.PositiveOrZero;
-
-import java.math.BigDecimal;
-
-public class CreateDailyIntakeRequest {
-
-    @NotNull(message = "Calories are required")
-    @PositiveOrZero(message = "Calories must be 0 or greater")
-    private BigDecimal calories;
-
-    public BigDecimal getCalories() {
-        return calories;
-    }
-
-    public void setCalories(BigDecimal calories) {
-        this.calories = calories;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/weight/TodayTrainingInfoDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/weight/TodayTrainingInfoDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,34 +1,0 @@
-package com.trekr.backend.dto.weight;
-
-import java.math.BigDecimal;
-
-public class TodayTrainingInfoDto {
-
-    private boolean trainedToday;
-    private BigDecimal totalBurnedCalories;
-
-    public TodayTrainingInfoDto() {
-    }
-
-    public TodayTrainingInfoDto(boolean trainedToday, BigDecimal totalBurnedCalories) {
-        this.trainedToday = trainedToday;
-        this.totalBurnedCalories = totalBurnedCalories;
-    }
-
-    public boolean isTrainedToday() {
-        return trainedToday;
-    }
-
-    public void setTrainedToday(boolean trainedToday) {
-        this.trainedToday = trainedToday;
-    }
-
-    public BigDecimal getTotalBurnedCalories() {
-        return totalBurnedCalories;
-    }
-
-    public void setTotalBurnedCalories(BigDecimal totalBurnedCalories) {
-        this.totalBurnedCalories = totalBurnedCalories;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/weight/TrackingStatusResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/weight/TrackingStatusResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,22 +1,0 @@
-package com.trekr.backend.dto.weight;
-
-public class TrackingStatusResponse {
-
-    private boolean tracking;
-
-    public TrackingStatusResponse() {
-    }
-
-    public TrackingStatusResponse(boolean tracking) {
-        this.tracking = tracking;
-    }
-
-    public boolean isTracking() {
-        return tracking;
-    }
-
-    public void setTracking(boolean tracking) {
-        this.tracking = tracking;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/weight/WeightDailyIntakeDto.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/weight/WeightDailyIntakeDto.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,73 +1,0 @@
-package com.trekr.backend.dto.weight;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-public class WeightDailyIntakeDto {
-
-    private Long dailyIntakeId;
-    private LocalDate date;
-    private BigDecimal calories;
-    private boolean trainedThatDay;
-    private BigDecimal burnedCalories;
-
-    public WeightDailyIntakeDto() {
-    }
-
-    public WeightDailyIntakeDto(Long dailyIntakeId, LocalDate date, BigDecimal calories) {
-        this.dailyIntakeId = dailyIntakeId;
-        this.date = date;
-        this.calories = calories;
-        this.trainedThatDay = false;
-        this.burnedCalories = BigDecimal.ZERO;
-    }
-
-    public WeightDailyIntakeDto(Long dailyIntakeId, LocalDate date, BigDecimal calories, boolean trainedThatDay, BigDecimal burnedCalories) {
-        this.dailyIntakeId = dailyIntakeId;
-        this.date = date;
-        this.calories = calories;
-        this.trainedThatDay = trainedThatDay;
-        this.burnedCalories = burnedCalories;
-    }
-
-    public Long getDailyIntakeId() {
-        return dailyIntakeId;
-    }
-
-    public void setDailyIntakeId(Long dailyIntakeId) {
-        this.dailyIntakeId = dailyIntakeId;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
-
-    public BigDecimal getCalories() {
-        return calories;
-    }
-
-    public void setCalories(BigDecimal calories) {
-        this.calories = calories;
-    }
-
-    public boolean isTrainedThatDay() {
-        return trainedThatDay;
-    }
-
-    public void setTrainedThatDay(boolean trainedThatDay) {
-        this.trainedThatDay = trainedThatDay;
-    }
-
-    public BigDecimal getBurnedCalories() {
-        return burnedCalories;
-    }
-
-    public void setBurnedCalories(BigDecimal burnedCalories) {
-        this.burnedCalories = burnedCalories;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/weight/WeightDailyIntakesResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/weight/WeightDailyIntakesResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,44 +1,0 @@
-package com.trekr.backend.dto.weight;
-
-import java.util.List;
-
-public class WeightDailyIntakesResponse {
-
-    private List<WeightDailyIntakeDto> intakes;
-    private boolean hasMore;
-    private boolean hasTodayIntake;
-
-    public WeightDailyIntakesResponse() {
-    }
-
-    public WeightDailyIntakesResponse(List<WeightDailyIntakeDto> intakes, boolean hasMore, boolean hasTodayIntake) {
-        this.intakes = intakes;
-        this.hasMore = hasMore;
-        this.hasTodayIntake = hasTodayIntake;
-    }
-
-    public List<WeightDailyIntakeDto> getIntakes() {
-        return intakes;
-    }
-
-    public void setIntakes(List<WeightDailyIntakeDto> intakes) {
-        this.intakes = intakes;
-    }
-
-    public boolean isHasMore() {
-        return hasMore;
-    }
-
-    public void setHasMore(boolean hasMore) {
-        this.hasMore = hasMore;
-    }
-
-    public boolean isHasTodayIntake() {
-        return hasTodayIntake;
-    }
-
-    public void setHasTodayIntake(boolean hasTodayIntake) {
-        this.hasTodayIntake = hasTodayIntake;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/weight/WeightProfileResponse.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/weight/WeightProfileResponse.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,56 +1,0 @@
-package com.trekr.backend.dto.weight;
-
-import java.math.BigDecimal;
-
-public class WeightProfileResponse {
-
-    private BigDecimal weight;
-    private BigDecimal height;
-    private BigDecimal goalWeight;
-    private BigDecimal goalCalories;
-
-    public WeightProfileResponse() {
-    }
-
-    public WeightProfileResponse(BigDecimal weight, BigDecimal height, BigDecimal goalWeight,
-            BigDecimal goalCalories) {
-        this.weight = weight;
-        this.height = height;
-        this.goalWeight = goalWeight;
-        this.goalCalories = goalCalories;
-    }
-
-    public BigDecimal getWeight() {
-        return weight;
-    }
-
-    public void setWeight(BigDecimal weight) {
-        this.weight = weight;
-    }
-
-    public BigDecimal getHeight() {
-        return height;
-    }
-
-    public void setHeight(BigDecimal height) {
-        this.height = height;
-    }
-
-    public BigDecimal getGoalWeight() {
-        return goalWeight;
-    }
-
-    public void setGoalWeight(BigDecimal goalWeight) {
-        this.goalWeight = goalWeight;
-    }
-
-
-    public BigDecimal getGoalCalories() {
-        return goalCalories;
-    }
-
-    public void setGoalCalories(BigDecimal goalCalories) {
-        this.goalCalories = goalCalories;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/dto/weight/WeightStartRequest.java
===================================================================
--- backend/src/main/java/com/trekr/backend/dto/weight/WeightStartRequest.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,69 +1,0 @@
-package com.trekr.backend.dto.weight;
-
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Positive;
-import jakarta.validation.constraints.PositiveOrZero;
-
-import java.math.BigDecimal;
-
-public class WeightStartRequest {
-
-    @NotNull(message = "Current weight is required")
-    @Positive(message = "Current weight must be greater than 0")
-    private BigDecimal weight;
-
-    @NotNull(message = "Height is required")
-    @Positive(message = "Height must be greater than 0")
-    private BigDecimal height;
-
-    @NotNull(message = "Goal weight is required")
-    @Positive(message = "Goal weight must be greater than 0")
-    private BigDecimal goalWeight;
-
-    @PositiveOrZero(message = "Goal calories must be 0 or greater")
-    private BigDecimal goalCalories;
-
-    private Boolean autoCalculateTargets = Boolean.TRUE;
-
-    public BigDecimal getWeight() {
-        return weight;
-    }
-
-    public void setWeight(BigDecimal weight) {
-        this.weight = weight;
-    }
-
-    public BigDecimal getHeight() {
-        return height;
-    }
-
-    public void setHeight(BigDecimal height) {
-        this.height = height;
-    }
-
-    public BigDecimal getGoalWeight() {
-        return goalWeight;
-    }
-
-    public void setGoalWeight(BigDecimal goalWeight) {
-        this.goalWeight = goalWeight;
-    }
-
-
-    public BigDecimal getGoalCalories() {
-        return goalCalories;
-    }
-
-    public void setGoalCalories(BigDecimal goalCalories) {
-        this.goalCalories = goalCalories;
-    }
-
-    public Boolean getAutoCalculateTargets() {
-        return autoCalculateTargets;
-    }
-
-    public void setAutoCalculateTargets(Boolean autoCalculateTargets) {
-        this.autoCalculateTargets = autoCalculateTargets;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/entity/User.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/User.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,64 +1,0 @@
-package com.trekr.backend.entity;
-
-import jakarta.persistence.*;
-
-@Entity
-@Table(name = "USERS", schema = "trekr")
-public class User {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "user_id")
-    private Long userId;
-
-    @Column(name = "email", nullable = false, unique = true)
-    private String email;
-
-    @Column(name = "username", nullable = false, unique = true)
-    private String username;
-
-    @Column(name = "password", nullable = false)
-    private String password;
-
-    public User() {
-    }
-
-    public User(Long userId, String email, String username, String password) {
-        this.userId = userId;
-        this.email = email;
-        this.username = username;
-        this.password = password;
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/discipline/CustomTrackingCategory.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/discipline/CustomTrackingCategory.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,56 +1,0 @@
-package com.trekr.backend.entity.discipline;
-
-import com.trekr.backend.entity.User;
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-
-@Entity
-@Table(name = "CUSTOM_TRACKING_CATEGORIES", schema = "trekr")
-public class CustomTrackingCategory {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "custom_tracking_id")
-    private Long customTrackingId;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "user_id")
-    private User user;
-
-    @Column(name = "name", nullable = false)
-    private String name;
-
-    public CustomTrackingCategory() {
-    }
-
-    public Long getCustomTrackingId() {
-        return customTrackingId;
-    }
-
-    public void setCustomTrackingId(Long customTrackingId) {
-        this.customTrackingId = customTrackingId;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/discipline/DailyCompletion.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/discipline/DailyCompletion.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,70 +1,0 @@
-package com.trekr.backend.entity.discipline;
-
-import com.trekr.backend.entity.User;
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-@Entity
-@Table(name = "DAILY_COMPLETION", schema = "trekr")
-public class DailyCompletion {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "daily_completion_id")
-    private Long dailyCompletionId;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "user_id")
-    private User user;
-
-    @Column(name = "date")
-    private LocalDate date;
-
-    @Column(name = "procent")
-    private BigDecimal procent;
-
-    public DailyCompletion() {
-    }
-
-    public Long getDailyCompletionId() {
-        return dailyCompletionId;
-    }
-
-    public void setDailyCompletionId(Long dailyCompletionId) {
-        this.dailyCompletionId = dailyCompletionId;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
-
-    public BigDecimal getProcent() {
-        return procent;
-    }
-
-    public void setProcent(BigDecimal procent) {
-        this.procent = procent;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/discipline/DisciplineUser.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/discipline/DisciplineUser.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,44 +1,0 @@
-package com.trekr.backend.entity.discipline;
-
-import com.trekr.backend.entity.User;
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.MapsId;
-import jakarta.persistence.OneToOne;
-import jakarta.persistence.Table;
-
-@Entity
-@Table(name = "DISCIPLINE_USERS", schema = "trekr")
-public class DisciplineUser {
-
-    @Id
-    @Column(name = "user_id")
-    private Long userId;
-
-    @OneToOne(fetch = FetchType.LAZY, optional = false)
-    @MapsId
-    @JoinColumn(name = "user_id")
-    private User user;
-
-    public DisciplineUser() {
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/discipline/Task.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/discipline/Task.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,83 +1,0 @@
-package com.trekr.backend.entity.discipline;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.EnumType;
-import jakarta.persistence.Enumerated;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-
-import java.time.LocalDate;
-
-@Entity
-@Table(name = "TASKS", schema = "trekr")
-public class Task {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "task_id")
-    private Long taskId;
-
-    @Column(name = "name", nullable = false)
-    private String name;
-
-    @Enumerated(EnumType.STRING)
-    @Column(name = "status", nullable = false)
-    private TaskStatus status = TaskStatus.NOT_STARTED;
-
-    @Column(name = "description")
-    private String description;
-
-    @Column(name = "due_date")
-    private LocalDate dueDate;
-
-    @Column(name = "priority")
-    private String priority;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "discipline_user_id")
-    private DisciplineUser disciplineUser;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "custom_tracking_id")
-    private CustomTrackingCategory customTrackingCategory;
-
-    public Task() {
-    }
-
-    public Long getTaskId() { return taskId; }
-    public void setTaskId(Long taskId) { this.taskId = taskId; }
-
-    public String getName() { return name; }
-    public void setName(String name) { this.name = name; }
-
-    public TaskStatus getStatus() { return status; }
-    public void setStatus(TaskStatus status) { this.status = status; }
-
-    public boolean isFinished() { return TaskStatus.FINISHED == status; }
-    public void setFinished(boolean finished) {
-        this.status = finished ? TaskStatus.FINISHED : TaskStatus.NOT_STARTED;
-    }
-
-    public String getDescription() { return description; }
-    public void setDescription(String description) { this.description = description; }
-
-    public LocalDate getDueDate() { return dueDate; }
-    public void setDueDate(LocalDate dueDate) { this.dueDate = dueDate; }
-
-    public String getPriority() { return priority; }
-    public void setPriority(String priority) { this.priority = priority; }
-
-    public DisciplineUser getDisciplineUser() { return disciplineUser; }
-    public void setDisciplineUser(DisciplineUser disciplineUser) { this.disciplineUser = disciplineUser; }
-
-    public CustomTrackingCategory getCustomTrackingCategory() { return customTrackingCategory; }
-    public void setCustomTrackingCategory(CustomTrackingCategory customTrackingCategory) {
-        this.customTrackingCategory = customTrackingCategory;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/discipline/TaskDailyCompletion.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/discipline/TaskDailyCompletion.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,54 +1,0 @@
-package com.trekr.backend.entity.discipline;
-
-import jakarta.persistence.EmbeddedId;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.MapsId;
-import jakarta.persistence.Table;
-
-@Entity
-@Table(name = "TASK_DAILY_COMPLETION", schema = "trekr")
-public class TaskDailyCompletion {
-
-    @EmbeddedId
-    private TaskDailyCompletionId id;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @MapsId("taskId")
-    @JoinColumn(name = "task_id")
-    private Task task;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @MapsId("dailyCompletionId")
-    @JoinColumn(name = "daily_completion_id")
-    private DailyCompletion dailyCompletion;
-
-    public TaskDailyCompletion() {
-    }
-
-    public TaskDailyCompletionId getId() {
-        return id;
-    }
-
-    public void setId(TaskDailyCompletionId id) {
-        this.id = id;
-    }
-
-    public Task getTask() {
-        return task;
-    }
-
-    public void setTask(Task task) {
-        this.task = task;
-    }
-
-    public DailyCompletion getDailyCompletion() {
-        return dailyCompletion;
-    }
-
-    public void setDailyCompletion(DailyCompletion dailyCompletion) {
-        this.dailyCompletion = dailyCompletion;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/discipline/TaskDailyCompletionId.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/discipline/TaskDailyCompletionId.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,56 +1,0 @@
-package com.trekr.backend.entity.discipline;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Embeddable;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-@Embeddable
-public class TaskDailyCompletionId implements Serializable {
-
-    @Column(name = "task_id")
-    private Long taskId;
-
-    @Column(name = "daily_completion_id")
-    private Long dailyCompletionId;
-
-    public TaskDailyCompletionId() {
-    }
-
-    public TaskDailyCompletionId(Long taskId, Long dailyCompletionId) {
-        this.taskId = taskId;
-        this.dailyCompletionId = dailyCompletionId;
-    }
-
-    public Long getTaskId() {
-        return taskId;
-    }
-
-    public void setTaskId(Long taskId) {
-        this.taskId = taskId;
-    }
-
-    public Long getDailyCompletionId() {
-        return dailyCompletionId;
-    }
-
-    public void setDailyCompletionId(Long dailyCompletionId) {
-        this.dailyCompletionId = dailyCompletionId;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        if (o == null || getClass() != o.getClass())
-            return false;
-        TaskDailyCompletionId that = (TaskDailyCompletionId) o;
-        return Objects.equals(taskId, that.taskId) && Objects.equals(dailyCompletionId, that.dailyCompletionId);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(taskId, dailyCompletionId);
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/discipline/TaskStatus.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/discipline/TaskStatus.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,8 +1,0 @@
-package com.trekr.backend.entity.discipline;
-
-public enum TaskStatus {
-    NOT_STARTED,
-    IN_PROGRESS,
-    FINISHED
-}
-
Index: backend/src/main/java/com/trekr/backend/entity/finance/FinanceUser.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/finance/FinanceUser.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,101 +1,0 @@
-package com.trekr.backend.entity.finance;
-
-import com.trekr.backend.entity.User;
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.MapsId;
-import jakarta.persistence.OneToOne;
-import jakarta.persistence.Table;
-
-import java.math.BigDecimal;
-
-@Entity
-@Table(name = "FINANCE_USERS", schema = "trekr")
-public class FinanceUser {
-
-    @Id
-    @Column(name = "user_id")
-    private Long userId;
-
-    @OneToOne(fetch = FetchType.LAZY, optional = false)
-    @MapsId
-    @JoinColumn(name = "user_id")
-    private User user;
-
-    @Column(name = "spending_budget")
-    private BigDecimal spendingBudget;
-
-    @Column(name = "saving_budget")
-    private BigDecimal savingBudget;
-
-    @Column(name = "investing_budget")
-    private BigDecimal investingBudget;
-
-    @Column(name = "donation_budget")
-    private BigDecimal donationBudget;
-
-    @Column(name = "credit")
-    private BigDecimal credit;
-
-    public FinanceUser() {
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public BigDecimal getSpendingBudget() {
-        return spendingBudget;
-    }
-
-    public void setSpendingBudget(BigDecimal spendingBudget) {
-        this.spendingBudget = spendingBudget;
-    }
-
-    public BigDecimal getSavingBudget() {
-        return savingBudget;
-    }
-
-    public void setSavingBudget(BigDecimal savingBudget) {
-        this.savingBudget = savingBudget;
-    }
-
-    public BigDecimal getInvestingBudget() {
-        return investingBudget;
-    }
-
-    public void setInvestingBudget(BigDecimal investingBudget) {
-        this.investingBudget = investingBudget;
-    }
-
-    public BigDecimal getDonationBudget() {
-        return donationBudget;
-    }
-
-    public void setDonationBudget(BigDecimal donationBudget) {
-        this.donationBudget = donationBudget;
-    }
-
-    public BigDecimal getCredit() {
-        return credit;
-    }
-
-    public void setCredit(BigDecimal credit) {
-        this.credit = credit;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/finance/Income.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/finance/Income.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,69 +1,0 @@
-package com.trekr.backend.entity.finance;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-@Entity
-@Table(name = "INCOMES", schema = "trekr")
-public class Income {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "income_id")
-    private Long incomeId;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "user_id")
-    private FinanceUser financeUser;
-
-    @Column(name = "date", nullable = false)
-    private LocalDate date;
-
-    @Column(name = "amount", nullable = false)
-    private BigDecimal amount;
-
-    public Income() {
-    }
-
-    public Long getIncomeId() {
-        return incomeId;
-    }
-
-    public void setIncomeId(Long incomeId) {
-        this.incomeId = incomeId;
-    }
-
-    public FinanceUser getFinanceUser() {
-        return financeUser;
-    }
-
-    public void setFinanceUser(FinanceUser financeUser) {
-        this.financeUser = financeUser;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
-
-    public BigDecimal getAmount() {
-        return amount;
-    }
-
-    public void setAmount(BigDecimal amount) {
-        this.amount = amount;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/invest/Asset.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/invest/Asset.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,91 +1,0 @@
-package com.trekr.backend.entity.invest;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-@Entity
-@Table(name = "ASSETS", schema = "trekr")
-public class Asset {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "asset_id")
-    private Long assetId;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "user_id")
-    private InvestorUser investorUser;
-
-    @Column(name = "ticker_symbol", nullable = false)
-    private String tickerSymbol;
-
-    @Column(name = "buy_price")
-    private BigDecimal buyPrice;
-
-    @Column(name = "buy_date")
-    private LocalDate buyDate;
-
-    @Column(name = "quantity")
-    private BigDecimal quantity;
-
-    public Asset() {
-    }
-
-    public Long getAssetId() {
-        return assetId;
-    }
-
-    public void setAssetId(Long assetId) {
-        this.assetId = assetId;
-    }
-
-    public InvestorUser getInvestorUser() {
-        return investorUser;
-    }
-
-    public void setInvestorUser(InvestorUser investorUser) {
-        this.investorUser = investorUser;
-    }
-
-    public String getTickerSymbol() {
-        return tickerSymbol;
-    }
-
-    public void setTickerSymbol(String tickerSymbol) {
-        this.tickerSymbol = tickerSymbol;
-    }
-
-    public BigDecimal getBuyPrice() {
-        return buyPrice;
-    }
-
-    public void setBuyPrice(BigDecimal buyPrice) {
-        this.buyPrice = buyPrice;
-    }
-
-    public LocalDate getBuyDate() {
-        return buyDate;
-    }
-
-    public void setBuyDate(LocalDate buyDate) {
-        this.buyDate = buyDate;
-    }
-
-    public BigDecimal getQuantity() {
-        return quantity;
-    }
-
-    public void setQuantity(BigDecimal quantity) {
-        this.quantity = quantity;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/invest/InvestorUser.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/invest/InvestorUser.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,42 +1,0 @@
-package com.trekr.backend.entity.invest;
-
-import com.trekr.backend.entity.User;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.MapsId;
-import jakarta.persistence.OneToOne;
-import jakarta.persistence.Table;
-
-@Entity
-@Table(name = "INVESTOR_USERS", schema = "trekr")
-public class InvestorUser {
-
-    @Id
-    private Long userId;
-
-    @OneToOne(fetch = FetchType.LAZY, optional = false)
-    @MapsId
-    @JoinColumn(name = "user_id")
-    private User user;
-
-    public InvestorUser() {
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/training/TrainingSession.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/training/TrainingSession.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,92 +1,0 @@
-package com.trekr.backend.entity.training;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-@Entity
-@Table(name = "TRAINING_SESSIONS", schema = "trekr")
-public class TrainingSession {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "training_id")
-    private Long trainingId;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "training_user_id")
-    private TrainingUser trainingUser;
-
-    @Column(name = "duration")
-    private BigDecimal duration;
-
-    @Column(name = "calories")
-    private BigDecimal calories;
-
-    @Column(name = "date")
-    private LocalDate date;
-
-    @Column(name = "type")
-    private String type;
-
-    public TrainingSession() {
-    }
-
-    public Long getTrainingId() {
-        return trainingId;
-    }
-
-    public void setTrainingId(Long trainingId) {
-        this.trainingId = trainingId;
-    }
-
-    public TrainingUser getTrainingUser() {
-        return trainingUser;
-    }
-
-    public void setTrainingUser(TrainingUser trainingUser) {
-        this.trainingUser = trainingUser;
-    }
-
-
-    public BigDecimal getDuration() {
-        return duration;
-    }
-
-    public void setDuration(BigDecimal duration) {
-        this.duration = duration;
-    }
-
-    public BigDecimal getCalories() {
-        return calories;
-    }
-
-    public void setCalories(BigDecimal calories) {
-        this.calories = calories;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/training/TrainingUser.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/training/TrainingUser.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,79 +1,0 @@
-package com.trekr.backend.entity.training;
-
-import com.trekr.backend.entity.User;
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.MapsId;
-import jakarta.persistence.OneToOne;
-import jakarta.persistence.Table;
-
-import java.math.BigDecimal;
-
-@Entity
-@Table(name = "TRAINING_USERS", schema = "trekr")
-public class TrainingUser {
-
-    @Id
-    @Column(name = "user_id")
-    private Long userId;
-
-    @OneToOne(fetch = FetchType.LAZY, optional = false)
-    @MapsId
-    @JoinColumn(name = "user_id")
-    private User user;
-
-    @Column(name = "gender")
-    private String gender;
-
-    @Column(name = "age")
-    private Integer age;
-
-    @Column(name = "weight")
-    private BigDecimal weight;
-
-    public TrainingUser() {
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public String getGender() {
-        return gender;
-    }
-
-    public void setGender(String gender) {
-        this.gender = gender;
-    }
-
-    public Integer getAge() {
-        return age;
-    }
-
-    public void setAge(Integer age) {
-        this.age = age;
-    }
-
-    public BigDecimal getWeight() {
-        return weight;
-    }
-
-    public void setWeight(BigDecimal weight) {
-        this.weight = weight;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/weight/DailyIntake.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/weight/DailyIntake.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,69 +1,0 @@
-package com.trekr.backend.entity.weight;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-@Entity
-@Table(name = "DAILY_INTAKES", schema = "trekr")
-public class DailyIntake {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "daily_intake_id")
-    private Long dailyIntakeId;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "user_id")
-    private WeightUser weightUser;
-
-    @Column(name = "calories")
-    private BigDecimal calories;
-
-    @Column(name = "date")
-    private LocalDate date;
-
-    public DailyIntake() {
-    }
-
-    public Long getDailyIntakeId() {
-        return dailyIntakeId;
-    }
-
-    public void setDailyIntakeId(Long dailyIntakeId) {
-        this.dailyIntakeId = dailyIntakeId;
-    }
-
-    public WeightUser getWeightUser() {
-        return weightUser;
-    }
-
-    public void setWeightUser(WeightUser weightUser) {
-        this.weightUser = weightUser;
-    }
-
-    public BigDecimal getCalories() {
-        return calories;
-    }
-
-    public void setCalories(BigDecimal calories) {
-        this.calories = calories;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/entity/weight/WeightUser.java
===================================================================
--- backend/src/main/java/com/trekr/backend/entity/weight/WeightUser.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,91 +1,0 @@
-package com.trekr.backend.entity.weight;
-
-import com.trekr.backend.entity.User;
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.MapsId;
-import jakarta.persistence.OneToOne;
-import jakarta.persistence.Table;
-
-import java.math.BigDecimal;
-
-@Entity
-@Table(name = "WEIGHT_USERS", schema = "trekr")
-public class WeightUser {
-
-    @Id
-    @Column(name = "user_id")
-    private Long userId;
-
-    @OneToOne(fetch = FetchType.LAZY, optional = false)
-    @MapsId
-    @JoinColumn(name = "user_id")
-    private User user;
-
-    @Column(name = "weight")
-    private BigDecimal weight;
-
-    @Column(name = "height")
-    private BigDecimal height;
-
-    @Column(name = "goal_weight")
-    private BigDecimal goalWeight;
-
-    @Column(name = "goal_calories")
-    private BigDecimal goalCalories;
-
-    public WeightUser() {
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public BigDecimal getWeight() {
-        return weight;
-    }
-
-    public void setWeight(BigDecimal weight) {
-        this.weight = weight;
-    }
-
-    public BigDecimal getHeight() {
-        return height;
-    }
-
-    public void setHeight(BigDecimal height) {
-        this.height = height;
-    }
-
-    public BigDecimal getGoalWeight() {
-        return goalWeight;
-    }
-
-    public void setGoalWeight(BigDecimal goalWeight) {
-        this.goalWeight = goalWeight;
-    }
-
-
-    public BigDecimal getGoalCalories() {
-        return goalCalories;
-    }
-
-    public void setGoalCalories(BigDecimal goalCalories) {
-        this.goalCalories = goalCalories;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/exception/GlobalExceptionHandler.java
===================================================================
--- backend/src/main/java/com/trekr/backend/exception/GlobalExceptionHandler.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,56 +1,0 @@
-package com.trekr.backend.exception;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.validation.FieldError;
-import org.springframework.web.bind.MethodArgumentNotValidException;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-
-import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.Map;
-
-@RestControllerAdvice
-public class GlobalExceptionHandler {
-    
-    @ExceptionHandler(MethodArgumentNotValidException.class)
-    public ResponseEntity<Map<String, Object>> handleValidationExceptions(
-            MethodArgumentNotValidException ex) {
-        Map<String, Object> errors = new HashMap<>();
-        Map<String, String> fieldErrors = new HashMap<>();
-        
-        ex.getBindingResult().getAllErrors().forEach((error) -> {
-            String fieldName = ((FieldError) error).getField();
-            String errorMessage = error.getDefaultMessage();
-            fieldErrors.put(fieldName, errorMessage);
-        });
-        
-        errors.put("timestamp", LocalDateTime.now());
-        errors.put("status", HttpStatus.BAD_REQUEST.value());
-        errors.put("message", "Validation failed");
-        errors.put("errors", fieldErrors);
-        
-        return ResponseEntity.badRequest().body(errors);
-    }
-    
-    @ExceptionHandler(RuntimeException.class)
-    public ResponseEntity<Map<String, Object>> handleRuntimeException(RuntimeException ex) {
-        Map<String, Object> error = new HashMap<>();
-        error.put("timestamp", LocalDateTime.now());
-        error.put("status", HttpStatus.BAD_REQUEST.value());
-        error.put("message", ex.getMessage());
-        
-        return ResponseEntity.badRequest().body(error);
-    }
-    
-    @ExceptionHandler(Exception.class)
-    public ResponseEntity<Map<String, Object>> handleGenericException(Exception ex) {
-        Map<String, Object> error = new HashMap<>();
-        error.put("timestamp", LocalDateTime.now());
-        error.put("status", HttpStatus.INTERNAL_SERVER_ERROR.value());
-        error.put("message", "An unexpected error occurred");
-        
-        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
-    }
-}
Index: backend/src/main/java/com/trekr/backend/repository/AssetRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/AssetRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,14 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.invest.Asset;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface AssetRepository extends JpaRepository<Asset, Long> {
-    Page<Asset> findByInvestorUser_UserIdOrderByAssetIdDesc(Long userId, Pageable pageable);
-
-    int deleteByAssetIdAndInvestorUser_UserId(Long assetId, Long userId);
-}
Index: backend/src/main/java/com/trekr/backend/repository/CustomTrackingCategoryRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/CustomTrackingCategoryRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,16 +1,0 @@
-
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.discipline.CustomTrackingCategory;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-
-public interface CustomTrackingCategoryRepository extends JpaRepository<CustomTrackingCategory, Long> {
-
-	List<CustomTrackingCategory> findByUser_UserIdOrderByCustomTrackingIdDesc(Long userId);
-
-	boolean existsByUser_UserIdAndNameIgnoreCase(Long userId, String name);
-}
-
-
Index: backend/src/main/java/com/trekr/backend/repository/DailyCompletionRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/DailyCompletionRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,17 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.discipline.DailyCompletion;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.time.LocalDate;
-import java.util.Optional;
-
-public interface DailyCompletionRepository extends JpaRepository<DailyCompletion, Long> {
-
-    Optional<DailyCompletion> findByUser_UserIdAndDate(Long userId, LocalDate date);
-
-    Page<DailyCompletion> findByUser_UserIdOrderByDateDescDailyCompletionIdDesc(Long userId, Pageable pageable);
-}
-
Index: backend/src/main/java/com/trekr/backend/repository/DailyIntakeRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/DailyIntakeRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,17 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.weight.DailyIntake;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.time.LocalDate;
-
-@Repository
-public interface DailyIntakeRepository extends JpaRepository<DailyIntake, Long> {
-    Page<DailyIntake> findByWeightUser_UserIdOrderByDateDesc(Long userId, Pageable pageable);
-
-    boolean existsByWeightUser_UserIdAndDate(Long userId, LocalDate date);
-}
-
Index: backend/src/main/java/com/trekr/backend/repository/DisciplineUserRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/DisciplineUserRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,8 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.discipline.DisciplineUser;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface DisciplineUserRepository extends JpaRepository<DisciplineUser, Long> {
-}
-
Index: backend/src/main/java/com/trekr/backend/repository/FinanceUserRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/FinanceUserRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,8 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.finance.FinanceUser;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface FinanceUserRepository extends JpaRepository<FinanceUser, Long> {
-}
-
Index: backend/src/main/java/com/trekr/backend/repository/IncomeRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/IncomeRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,12 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.finance.Income;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface IncomeRepository extends JpaRepository<Income, Long> {
-
-    Page<Income> findByFinanceUser_UserIdOrderByDateDescIncomeIdDesc(Long userId, Pageable pageable);
-}
-
Index: backend/src/main/java/com/trekr/backend/repository/InvestorUserRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/InvestorUserRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,9 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.invest.InvestorUser;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface InvestorUserRepository extends JpaRepository<InvestorUser, Long> {
-}
Index: backend/src/main/java/com/trekr/backend/repository/TaskDailyCompletionRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/TaskDailyCompletionRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,9 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.discipline.TaskDailyCompletion;
-import com.trekr.backend.entity.discipline.TaskDailyCompletionId;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface TaskDailyCompletionRepository extends JpaRepository<TaskDailyCompletion, TaskDailyCompletionId> {
-}
-
Index: backend/src/main/java/com/trekr/backend/repository/TaskRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/TaskRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,35 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.discipline.Task;
-import com.trekr.backend.entity.discipline.TaskStatus;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.List;
-
-public interface TaskRepository extends JpaRepository<Task, Long> {
-
-    Page<Task> findByDisciplineUser_UserIdOrderByTaskIdDesc(Long userId, Pageable pageable);
-
-    int deleteByTaskIdAndDisciplineUser_UserId(Long taskId, Long userId);
-
-    long countByDisciplineUser_UserId(Long userId);
-
-    long countByDisciplineUser_UserIdAndStatus(Long userId, TaskStatus status);
-
-    List<Task> findByDisciplineUser_UserIdAndStatus(Long userId, TaskStatus status);
-
-    List<Task> findByCustomTrackingCategory_CustomTrackingIdAndCustomTrackingCategory_User_UserIdOrderByTaskIdDesc(
-            Long customTrackingId, Long userId);
-
-    int deleteByTaskIdAndCustomTrackingCategory_CustomTrackingIdAndCustomTrackingCategory_User_UserId(
-            Long taskId, Long customTrackingId, Long userId);
-
-    @Modifying
-    @Query("update Task t set t.status = :status where t.disciplineUser.userId = :userId")
-    int resetStatusForUser(@Param("userId") Long userId, @Param("status") TaskStatus status);
-}
Index: backend/src/main/java/com/trekr/backend/repository/TrainingSessionRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/TrainingSessionRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,19 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.training.TrainingSession;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.time.LocalDate;
-import java.util.Collection;
-
-@Repository
-public interface TrainingSessionRepository extends JpaRepository<TrainingSession, Long> {
-    Page<TrainingSession> findByTrainingUser_UserIdOrderByDateDesc(Long userId, Pageable pageable);
-    java.util.List<TrainingSession> findByTrainingUser_UserIdAndDate(Long userId, java.time.LocalDate date);
-
-    @SuppressWarnings("unused")
-    java.util.List<TrainingSession> findByTrainingUser_UserIdAndDateIn(Long userId, Collection<LocalDate> dates);
-}
Index: backend/src/main/java/com/trekr/backend/repository/TrainingUserRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/TrainingUserRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,9 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.training.TrainingUser;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface TrainingUserRepository extends JpaRepository<TrainingUser, Long> {
-}
Index: backend/src/main/java/com/trekr/backend/repository/UserRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/UserRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,15 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.User;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-
-@Repository
-public interface UserRepository extends JpaRepository<User, Long> {
-    Optional<User> findByEmail(String email);
-    Optional<User> findByUsername(String username);
-    boolean existsByEmail(String email);
-    boolean existsByUsername(String username);
-}
Index: backend/src/main/java/com/trekr/backend/repository/WeightUserRepository.java
===================================================================
--- backend/src/main/java/com/trekr/backend/repository/WeightUserRepository.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,10 +1,0 @@
-package com.trekr.backend.repository;
-
-import com.trekr.backend.entity.weight.WeightUser;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface WeightUserRepository extends JpaRepository<WeightUser, Long> {
-}
-
Index: backend/src/main/java/com/trekr/backend/resources/application.properties
===================================================================
--- backend/src/main/java/com/trekr/backend/resources/application.properties	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,4 +1,0 @@
-### NOTE
-### This file is intentionally NOT used by Spring Boot.
-### The active config is in: src/main/resources/application.properties
-
Index: backend/src/main/java/com/trekr/backend/security/JwtAuthenticationFilter.java
===================================================================
--- backend/src/main/java/com/trekr/backend/security/JwtAuthenticationFilter.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,54 +1,0 @@
-package com.trekr.backend.security;
-
-import com.trekr.backend.service.JwtService;
-import jakarta.servlet.FilterChain;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
-import org.springframework.stereotype.Component;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-import java.io.IOException;
-import java.util.List;
-
-@Component
-public class JwtAuthenticationFilter extends OncePerRequestFilter {
-
-    private final JwtService jwtService;
-
-    public JwtAuthenticationFilter(JwtService jwtService) {
-        this.jwtService = jwtService;
-    }
-
-    @Override
-    protected void doFilterInternal(
-            HttpServletRequest request,
-            HttpServletResponse response,
-            FilterChain filterChain) throws ServletException, IOException {
-
-        String authHeader = request.getHeader("Authorization");
-        if (authHeader == null || !authHeader.startsWith("Bearer ")) {
-            filterChain.doFilter(request, response);
-            return;
-        }
-
-        String token = authHeader.substring("Bearer ".length()).trim();
-        if (token.isEmpty() || !jwtService.isTokenValid(token)) {
-            filterChain.doFilter(request, response);
-            return;
-        }
-
-        if (SecurityContextHolder.getContext().getAuthentication() == null) {
-            UserPrincipal principal = jwtService.parseUserPrincipal(token);
-            UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(principal,
-                    null, List.of());
-            authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
-            SecurityContextHolder.getContext().setAuthentication(authentication);
-        }
-
-        filterChain.doFilter(request, response);
-    }
-}
Index: backend/src/main/java/com/trekr/backend/security/UserPrincipal.java
===================================================================
--- backend/src/main/java/com/trekr/backend/security/UserPrincipal.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,33 +1,0 @@
-package com.trekr.backend.security;
-
-import java.io.Serializable;
-
-/**
- * Represents the currently logged-in user after we've validated their JWT.
- * Controllers can inject this or get it from SecurityContextHolder.
- */
-public class UserPrincipal implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private final Long userId;
-    private final String username;
-    private final String email;
-
-    public UserPrincipal(Long userId, String username, String email) {
-        this.userId = userId;
-        this.username = username;
-        this.email = email;
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-}
Index: backend/src/main/java/com/trekr/backend/service/AuthService.java
===================================================================
--- backend/src/main/java/com/trekr/backend/service/AuthService.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,60 +1,0 @@
-package com.trekr.backend.service;
-
-import com.trekr.backend.dto.auth.AuthResponse;
-import com.trekr.backend.dto.auth.LoginRequest;
-import com.trekr.backend.dto.auth.RegisterRequest;
-import com.trekr.backend.entity.User;
-import com.trekr.backend.repository.UserRepository;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-@Service
-public class AuthService {
-
-    private final UserRepository userRepository;
-    private final PasswordEncoder passwordEncoder;
-    private final JwtService jwtService;
-
-    public AuthService(UserRepository userRepository, PasswordEncoder passwordEncoder, JwtService jwtService) {
-        this.userRepository = userRepository;
-        this.passwordEncoder = passwordEncoder;
-        this.jwtService = jwtService;
-    }
-
-    @Transactional
-    public AuthResponse register(RegisterRequest request) {
-        if (userRepository.existsByEmail(request.getEmail())) {
-            throw new RuntimeException("Email already exists");
-        }
-        if (userRepository.existsByUsername(request.getUsername())) {
-            throw new RuntimeException("Username already exists");
-        }
-
-        User user = new User();
-        user.setEmail(request.getEmail().trim().toLowerCase());
-        user.setUsername(request.getUsername().trim());
-        user.setPassword(passwordEncoder.encode(request.getPassword()));
-
-        user = userRepository.save(user);
-
-        String token = jwtService.generateToken(user.getUserId(), user.getUsername(), user.getEmail());
-        return new AuthResponse(token, "Bearer", user.getUserId(), user.getUsername(), user.getEmail());
-    }
-
-    @Transactional(readOnly = true)
-    public AuthResponse login(LoginRequest request) {
-        String usernameOrEmail = request.getUsernameOrEmail().trim();
-        String emailLookup = usernameOrEmail.contains("@") ? usernameOrEmail.toLowerCase() : usernameOrEmail;
-        User user = userRepository.findByUsername(usernameOrEmail)
-                .or(() -> userRepository.findByEmail(emailLookup))
-                .orElseThrow(() -> new RuntimeException("Invalid credentials"));
-
-        if (!passwordEncoder.matches(request.getPassword(), user.getPassword())) {
-            throw new RuntimeException("Invalid credentials");
-        }
-
-        String token = jwtService.generateToken(user.getUserId(), user.getUsername(), user.getEmail());
-        return new AuthResponse(token, "Bearer", user.getUserId(), user.getUsername(), user.getEmail());
-    }
-}
Index: backend/src/main/java/com/trekr/backend/service/CustomTrackingService.java
===================================================================
--- backend/src/main/java/com/trekr/backend/service/CustomTrackingService.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,218 +1,0 @@
-package com.trekr.backend.service;
-
-import com.trekr.backend.dto.discipline.CreateCustomTrackingCategoryRequest;
-import com.trekr.backend.dto.discipline.CreateTaskRequest;
-import com.trekr.backend.dto.discipline.CustomTrackingCategoriesResponse;
-import com.trekr.backend.dto.discipline.CustomTrackingCategoryDto;
-import com.trekr.backend.dto.discipline.TaskDto;
-import com.trekr.backend.dto.discipline.TasksResponse;
-import com.trekr.backend.dto.discipline.UpdateTaskFinishedRequest;
-import com.trekr.backend.dto.discipline.UpdateTaskStatusRequest;
-import com.trekr.backend.entity.discipline.TaskStatus;
-import com.trekr.backend.dto.discipline.UpdateTaskRequest;
-import com.trekr.backend.entity.User;
-import com.trekr.backend.entity.discipline.CustomTrackingCategory;
-import com.trekr.backend.entity.discipline.Task;
-import com.trekr.backend.repository.CustomTrackingCategoryRepository;
-import com.trekr.backend.repository.TaskRepository;
-import com.trekr.backend.repository.UserRepository;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-@Service
-public class CustomTrackingService {
-
-    private final CustomTrackingCategoryRepository customTrackingCategoryRepository;
-    private final TaskRepository taskRepository;
-    private final UserRepository userRepository;
-
-    public CustomTrackingService(
-            CustomTrackingCategoryRepository customTrackingCategoryRepository,
-            TaskRepository taskRepository,
-            UserRepository userRepository) {
-        this.customTrackingCategoryRepository = customTrackingCategoryRepository;
-        this.taskRepository = taskRepository;
-        this.userRepository = userRepository;
-    }
-
-    @Transactional(readOnly = true)
-    public CustomTrackingCategoriesResponse getCustomTrackingCategories(Long userId) {
-        List<CustomTrackingCategoryDto> items = customTrackingCategoryRepository
-                .findByUser_UserIdOrderByCustomTrackingIdDesc(userId)
-                .stream()
-                .map(c -> new CustomTrackingCategoryDto(c.getCustomTrackingId(), c.getName()))
-                .toList();
-
-        return new CustomTrackingCategoriesResponse(items);
-    }
-
-    @Transactional
-    public CustomTrackingCategoryDto createCustomTrackingCategory(Long userId, CreateCustomTrackingCategoryRequest request) {
-        String name = request.getName();
-        if (name == null || name.isBlank()) {
-            throw new RuntimeException("Name is required");
-        }
-        String trimmed = name.trim();
-        if (trimmed.length() > 100) {
-            throw new RuntimeException("Name is too long");
-        }
-
-        if (customTrackingCategoryRepository.existsByUser_UserIdAndNameIgnoreCase(userId, trimmed)) {
-            throw new RuntimeException("Custom category with that name already exists");
-        }
-
-        User user = userRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("User not found"));
-
-        CustomTrackingCategory category = new CustomTrackingCategory();
-        category.setUser(user);
-        category.setName(trimmed);
-        CustomTrackingCategory saved = customTrackingCategoryRepository.save(category);
-
-        return new CustomTrackingCategoryDto(saved.getCustomTrackingId(), saved.getName());
-    }
-
-    @Transactional(readOnly = true)
-    public TasksResponse getCustomCategoryTasks(Long userId, Long customTrackingId) {
-        requireOwnership(userId, customTrackingId);
-
-        List<TaskDto> tasks = taskRepository
-                .findByCustomTrackingCategory_CustomTrackingIdAndCustomTrackingCategory_User_UserIdOrderByTaskIdDesc(
-                        customTrackingId, userId)
-                .stream()
-                .map(t -> new TaskDto(t.getTaskId(), t.getName(), t.isFinished(), t.getStatus(), t.getDescription(), t.getDueDate(), t.getPriority()))
-                .toList();
-
-        return new TasksResponse(tasks, false);
-    }
-
-    @Transactional
-    public TaskDto createCustomCategoryTask(Long userId, Long customTrackingId, CreateTaskRequest request) {
-        CustomTrackingCategory category = requireOwnership(userId, customTrackingId);
-
-        String name = request.getName();
-        if (name == null || name.isBlank()) {
-            throw new RuntimeException("Task name is required");
-        }
-        if (name.length() > 200) {
-            throw new RuntimeException("Task name is too long");
-        }
-
-        Task task = new Task();
-        task.setName(name.trim());
-        task.setStatus(TaskStatus.NOT_STARTED);
-        task.setDescription(request.getDescription());
-        task.setDueDate(request.getDueDate());
-        task.setPriority(request.getPriority());
-        task.setDisciplineUser(null);
-        task.setCustomTrackingCategory(category);
-
-        Task saved = taskRepository.save(task);
-        return new TaskDto(saved.getTaskId(), saved.getName(), saved.isFinished(), saved.getStatus(), saved.getDescription(), saved.getDueDate(), saved.getPriority());
-    }
-
-    @Transactional
-    public TaskDto updateCustomCategoryTask(Long userId, Long customTrackingId, Long taskId, UpdateTaskRequest request) {
-        Task task = taskRepository.findById(taskId)
-                .orElseThrow(() -> new RuntimeException("Task not found"));
-
-        if (task.getCustomTrackingCategory() == null
-                || !customTrackingId.equals(task.getCustomTrackingCategory().getCustomTrackingId())
-                || task.getCustomTrackingCategory().getUser() == null
-                || !userId.equals(task.getCustomTrackingCategory().getUser().getUserId())) {
-            throw new RuntimeException("Task not found");
-        }
-
-        String name = request.getName();
-        if (name == null || name.isBlank()) {
-            throw new RuntimeException("Task name is required");
-        }
-
-        task.setName(name.trim());
-        task.setDescription(request.getDescription());
-        task.setDueDate(request.getDueDate());
-        task.setPriority(request.getPriority());
-        if (request.getStatus() != null) {
-            task.setStatus(request.getStatus());
-        }
-        Task saved = taskRepository.save(task);
-        return new TaskDto(saved.getTaskId(), saved.getName(), saved.isFinished(), saved.getStatus(), saved.getDescription(), saved.getDueDate(), saved.getPriority());
-    }
-
-    @Transactional
-    public TaskDto updateCustomCategoryTaskFinished(Long userId, Long customTrackingId, Long taskId,
-                                                    UpdateTaskFinishedRequest request) {
-        Task task = taskRepository.findById(taskId)
-                .orElseThrow(() -> new RuntimeException("Task not found"));
-
-        if (task.getCustomTrackingCategory() == null
-                || !customTrackingId.equals(task.getCustomTrackingCategory().getCustomTrackingId())
-                || task.getCustomTrackingCategory().getUser() == null
-                || !userId.equals(task.getCustomTrackingCategory().getUser().getUserId())) {
-            throw new RuntimeException("Task not found");
-        }
-
-        Boolean finished = request.getIsFinished();
-        if (finished == null) {
-            throw new RuntimeException("isFinished is required");
-        }
-
-        task.setFinished(finished);
-        Task saved = taskRepository.save(task);
-        return new TaskDto(saved.getTaskId(), saved.getName(), saved.isFinished(), saved.getStatus(), saved.getDescription(), saved.getDueDate(), saved.getPriority());
-    }
-
-    @Transactional
-    public TaskDto updateCustomCategoryTaskStatus(Long userId, Long customTrackingId, Long taskId,
-                                                  UpdateTaskStatusRequest request) {
-        Task task = taskRepository.findById(taskId)
-                .orElseThrow(() -> new RuntimeException("Task not found"));
-
-        if (task.getCustomTrackingCategory() == null
-                || !customTrackingId.equals(task.getCustomTrackingCategory().getCustomTrackingId())
-                || task.getCustomTrackingCategory().getUser() == null
-                || !userId.equals(task.getCustomTrackingCategory().getUser().getUserId())) {
-            throw new RuntimeException("Task not found");
-        }
-
-        if (request.getStatus() == null) {
-            throw new RuntimeException("status is required");
-        }
-
-        task.setStatus(request.getStatus());
-        Task saved = taskRepository.save(task);
-        return new TaskDto(saved.getTaskId(), saved.getName(), saved.isFinished(), saved.getStatus(), saved.getDescription(), saved.getDueDate(), saved.getPriority());
-    }
-
-    @Transactional
-    public void deleteCustomCategoryTask(Long userId, Long customTrackingId, Long taskId) {
-        if (taskId == null || customTrackingId == null) {
-            throw new RuntimeException("Task not found");
-        }
-
-        int deleted = taskRepository
-                .deleteByTaskIdAndCustomTrackingCategory_CustomTrackingIdAndCustomTrackingCategory_User_UserId(
-                        taskId, customTrackingId, userId);
-        if (deleted == 0) {
-            throw new RuntimeException("Task not found");
-        }
-    }
-
-    private CustomTrackingCategory requireOwnership(Long userId, Long customTrackingId) {
-        if (customTrackingId == null) {
-            throw new RuntimeException("Custom tracking category not found");
-        }
-
-        CustomTrackingCategory category = customTrackingCategoryRepository.findById(customTrackingId)
-                .orElseThrow(() -> new RuntimeException("Custom tracking category not found"));
-
-        if (category.getUser() == null || !userId.equals(category.getUser().getUserId())) {
-            throw new RuntimeException("Custom tracking category not found");
-        }
-
-        return category;
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/service/DisciplineService.java
===================================================================
--- backend/src/main/java/com/trekr/backend/service/DisciplineService.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,250 +1,0 @@
-package com.trekr.backend.service;
-
-import com.trekr.backend.dto.discipline.CreateTaskRequest;
-import com.trekr.backend.dto.discipline.DailyCompletionDto;
-import com.trekr.backend.dto.discipline.DailyCompletionsResponse;
-import com.trekr.backend.dto.discipline.TaskDto;
-import com.trekr.backend.dto.discipline.TasksResponse;
-import com.trekr.backend.dto.discipline.ComputeDailyCompletionResponse;
-import com.trekr.backend.dto.discipline.UpdateTaskFinishedRequest;
-import com.trekr.backend.dto.discipline.UpdateTaskRequest;
-import com.trekr.backend.entity.User;
-import com.trekr.backend.entity.discipline.DisciplineUser;
-import com.trekr.backend.entity.discipline.DailyCompletion;
-import com.trekr.backend.entity.discipline.Task;
-import com.trekr.backend.entity.discipline.TaskDailyCompletion;
-import com.trekr.backend.entity.discipline.TaskStatus;
-import com.trekr.backend.entity.discipline.TaskDailyCompletionId;
-import com.trekr.backend.repository.DailyCompletionRepository;
-import com.trekr.backend.repository.DisciplineUserRepository;
-import com.trekr.backend.repository.TaskRepository;
-import com.trekr.backend.repository.TaskDailyCompletionRepository;
-import com.trekr.backend.repository.UserRepository;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.util.List;
-
-@Service
-public class DisciplineService {
-
-    private final DisciplineUserRepository disciplineUserRepository;
-    private final TaskRepository taskRepository;
-    private final DailyCompletionRepository dailyCompletionRepository;
-    private final TaskDailyCompletionRepository taskDailyCompletionRepository;
-    private final UserRepository userRepository;
-
-    public DisciplineService(
-            DisciplineUserRepository disciplineUserRepository,
-            TaskRepository taskRepository,
-            DailyCompletionRepository dailyCompletionRepository,
-            TaskDailyCompletionRepository taskDailyCompletionRepository,
-            UserRepository userRepository) {
-        this.disciplineUserRepository = disciplineUserRepository;
-        this.taskRepository = taskRepository;
-        this.dailyCompletionRepository = dailyCompletionRepository;
-        this.taskDailyCompletionRepository = taskDailyCompletionRepository;
-        this.userRepository = userRepository;
-    }
-
-
-    public boolean isTracking(Long userId) {
-        return disciplineUserRepository.existsById(userId);
-    }
-
-    @Transactional
-    public void startTracking(Long userId) {
-        if (disciplineUserRepository.existsById(userId)) {
-            return;
-        }
-
-        User user = userRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("User not found"));
-
-        DisciplineUser disciplineUser = new DisciplineUser();
-        disciplineUser.setUser(user);
-        disciplineUserRepository.save(disciplineUser);
-    }
-
-    @Transactional(readOnly = true)
-    public TasksResponse getTasks(Long userId, int page, int size) {
-        if (!disciplineUserRepository.existsById(userId)) {
-            return new TasksResponse(List.of(), false);
-        }
-
-        Page<Task> result = taskRepository.findByDisciplineUser_UserIdOrderByTaskIdDesc(
-                userId, PageRequest.of(page, size));
-
-        List<TaskDto> tasks = result.getContent().stream()
-                .map(t -> new TaskDto(t.getTaskId(), t.getName(), t.isFinished(), t.getStatus(), t.getDescription(), t.getDueDate(), t.getPriority()))
-                .toList();
-
-        return new TasksResponse(tasks, result.hasNext());
-    }
-
-    @Transactional
-    public TaskDto createTask(Long userId, CreateTaskRequest request) {
-        DisciplineUser disciplineUser = disciplineUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Discipline tracking is not enabled for this user"));
-
-        String name = request.getName();
-        if (name == null || name.isBlank()) {
-            throw new RuntimeException("Task name is required");
-        }
-
-        if (name.length() > 200) {
-            throw new RuntimeException("Task name is too long");
-        }
-
-        Task task = new Task();
-        task.setName(name.trim());
-        task.setFinished(false);
-        task.setDisciplineUser(disciplineUser);
-
-        Task saved = taskRepository.save(task);
-        return new TaskDto(saved.getTaskId(), saved.getName(), saved.isFinished(), saved.getStatus(), saved.getDescription(), saved.getDueDate(), saved.getPriority());
-    }
-
-    @Transactional
-    public TaskDto updateTask(Long userId, Long taskId, UpdateTaskRequest request) {
-        Task task = taskRepository.findById(taskId)
-                .orElseThrow(() -> new RuntimeException("Task not found"));
-
-        if (task.getDisciplineUser() == null || !userId.equals(task.getDisciplineUser().getUserId())) {
-            throw new RuntimeException("Task not found");
-        }
-
-        String name = request.getName();
-        if (name == null || name.isBlank()) {
-            throw new RuntimeException("Task name is required");
-        }
-
-        task.setName(name.trim());
-        Task saved = taskRepository.save(task);
-        return new TaskDto(saved.getTaskId(), saved.getName(), saved.isFinished(), saved.getStatus(), saved.getDescription(), saved.getDueDate(), saved.getPriority());
-    }
-
-    @Transactional
-    public TaskDto updateTaskFinished(Long userId, Long taskId, UpdateTaskFinishedRequest request) {
-        Task task = taskRepository.findById(taskId)
-                .orElseThrow(() -> new RuntimeException("Task not found"));
-
-        if (task.getDisciplineUser() == null || !userId.equals(task.getDisciplineUser().getUserId())) {
-            throw new RuntimeException("Task not found");
-        }
-
-        Boolean finished = request.getIsFinished();
-        if (finished == null) {
-            throw new RuntimeException("isFinished is required");
-        }
-
-        task.setFinished(finished);
-        Task saved = taskRepository.save(task);
-        return new TaskDto(saved.getTaskId(), saved.getName(), saved.isFinished(), saved.getStatus(), saved.getDescription(), saved.getDueDate(), saved.getPriority());
-    }
-
-    @Transactional
-    public void deleteTask(Long userId, Long taskId) {
-        if (taskId == null) {
-            throw new RuntimeException("Task not found");
-        }
-
-        int deleted = taskRepository.deleteByTaskIdAndDisciplineUser_UserId(taskId, userId);
-        if (deleted == 0) {
-            throw new RuntimeException("Task not found");
-        }
-    }
-
-    /**
-     * Computes the daily completion percentage for the given date:
-     * finished_tasks / total_tasks * 100
-     * - Persisted once per user+date. If already computed, it is not re-computed.
-     * - After computing, all tasks for that user are reset to unfinished.
-     */
-    @Transactional
-    public ComputeDailyCompletionResponse computeDailyCompletion(Long userId, LocalDate date) {
-        if (!disciplineUserRepository.existsById(userId)) {
-            throw new RuntimeException("Discipline tracking is not enabled for this user");
-        }
-
-        if (date == null) {
-            throw new RuntimeException("Date is required");
-        }
-
-        if (date.isAfter(LocalDate.now())) {
-            throw new RuntimeException("Date cannot be in the future");
-        }
-
-        DailyCompletion existing = dailyCompletionRepository.findByUser_UserIdAndDate(userId, date).orElse(null);
-        if (existing != null) {
-            return new ComputeDailyCompletionResponse(false,
-                    new DailyCompletionDto(existing.getDailyCompletionId(), existing.getDate(), existing.getProcent()));
-        }
-
-        long total = taskRepository.countByDisciplineUser_UserId(userId);
-        long finished = taskRepository.countByDisciplineUser_UserIdAndStatus(userId, TaskStatus.FINISHED);
-
-        BigDecimal percent;
-        if (total <= 0) {
-            percent = BigDecimal.ZERO;
-        } else {
-            percent = BigDecimal.valueOf(finished)
-                    .multiply(new BigDecimal("100"))
-                    .divide(BigDecimal.valueOf(total), 2, RoundingMode.HALF_UP);
-        }
-
-        User user = userRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("User not found"));
-
-        DailyCompletion completion = new DailyCompletion();
-        completion.setUser(user);
-        completion.setDate(date);
-        completion.setProcent(percent);
-        DailyCompletion savedCompletion = dailyCompletionRepository.save(completion);
-
-        // Link all tasks that were finished at calculation time
-        // (not strictly required for now, but matches schema and enables future analytics)
-        if (finished > 0) {
-            List<TaskDailyCompletion> links = taskRepository.findByDisciplineUser_UserIdAndStatus(userId, TaskStatus.FINISHED)
-                    .stream()
-                    .map(t -> {
-                        TaskDailyCompletion link = new TaskDailyCompletion();
-                        link.setTask(t);
-                        link.setDailyCompletion(savedCompletion);
-                        link.setId(new TaskDailyCompletionId(t.getTaskId(), savedCompletion.getDailyCompletionId()));
-                        return link;
-                    })
-                    .toList();
-            taskDailyCompletionRepository.saveAll(links);
-        }
-
-        // Reset all tasks for next day
-        taskRepository.resetStatusForUser(userId, TaskStatus.NOT_STARTED);
-
-        DailyCompletionDto dto = new DailyCompletionDto(savedCompletion.getDailyCompletionId(),
-                savedCompletion.getDate(), savedCompletion.getProcent());
-        return new ComputeDailyCompletionResponse(true, dto);
-    }
-
-    @Transactional(readOnly = true)
-    public DailyCompletionsResponse getDailyCompletions(Long userId, int page, int size) {
-        if (!disciplineUserRepository.existsById(userId)) {
-            return new DailyCompletionsResponse(List.of(), false);
-        }
-
-        Page<DailyCompletion> result = dailyCompletionRepository
-                .findByUser_UserIdOrderByDateDescDailyCompletionIdDesc(userId, PageRequest.of(page, size));
-
-        List<DailyCompletionDto> items = result.getContent().stream()
-                .map(dc -> new DailyCompletionDto(dc.getDailyCompletionId(), dc.getDate(), dc.getProcent()))
-                .toList();
-
-        return new DailyCompletionsResponse(items, result.hasNext());
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/service/FinanceService.java
===================================================================
--- backend/src/main/java/com/trekr/backend/service/FinanceService.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,159 +1,0 @@
-package com.trekr.backend.service;
-
-import com.trekr.backend.dto.finance.CreateIncomeRequest;
-import com.trekr.backend.dto.finance.FinanceProfileResponse;
-import com.trekr.backend.dto.finance.FinanceStartRequest;
-import com.trekr.backend.dto.finance.IncomeDto;
-import com.trekr.backend.dto.finance.IncomesResponse;
-import com.trekr.backend.entity.User;
-import com.trekr.backend.entity.finance.FinanceUser;
-import com.trekr.backend.entity.finance.Income;
-import com.trekr.backend.repository.FinanceUserRepository;
-import com.trekr.backend.repository.IncomeRepository;
-import com.trekr.backend.repository.UserRepository;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.util.List;
-
-@Service
-public class FinanceService {
-
-    private final FinanceUserRepository financeUserRepository;
-    private final IncomeRepository incomeRepository;
-    private final UserRepository userRepository;
-
-    public FinanceService(
-            FinanceUserRepository financeUserRepository,
-            IncomeRepository incomeRepository,
-            UserRepository userRepository) {
-        this.financeUserRepository = financeUserRepository;
-        this.incomeRepository = incomeRepository;
-        this.userRepository = userRepository;
-    }
-
-    public boolean isTracking(Long userId) {
-        return financeUserRepository.existsById(userId);
-    }
-
-    @Transactional
-    public void startOrUpdateTracking(Long userId, FinanceStartRequest request) {
-        FinanceUser financeUser = financeUserRepository.findById(userId).orElse(null);
-        if (financeUser == null) {
-            User user = userRepository.findById(userId)
-                    .orElseThrow(() -> new RuntimeException("User not found"));
-            financeUser = new FinanceUser();
-            financeUser.setUser(user);
-        }
-
-        BigDecimal spending = normalizePercent(request.getSpendingBudget());
-        BigDecimal saving = normalizePercent(request.getSavingBudget());
-        BigDecimal investing = normalizePercent(request.getInvestingBudget());
-        BigDecimal donation = normalizePercent(request.getDonationBudget());
-        BigDecimal credit = normalizePercent(request.getCredit());
-
-        validateSumTo100(spending, saving, investing, donation, credit);
-
-        financeUser.setSpendingBudget(spending);
-        financeUser.setSavingBudget(saving);
-        financeUser.setInvestingBudget(investing);
-        financeUser.setDonationBudget(donation);
-        financeUser.setCredit(credit);
-
-        financeUserRepository.save(financeUser);
-    }
-
-    @Transactional(readOnly = true)
-    public FinanceProfileResponse getProfile(Long userId) {
-        FinanceUser financeUser = financeUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Finance tracking is not enabled for this user"));
-
-        return new FinanceProfileResponse(
-                financeUser.getSpendingBudget(),
-                financeUser.getSavingBudget(),
-                financeUser.getInvestingBudget(),
-                financeUser.getDonationBudget(),
-                financeUser.getCredit());
-    }
-
-    @Transactional(readOnly = true)
-    public IncomesResponse getIncomes(Long userId, int page, int size) {
-        if (!financeUserRepository.existsById(userId)) {
-            return new IncomesResponse(List.of(), false);
-        }
-
-        Page<Income> result = incomeRepository.findByFinanceUser_UserIdOrderByDateDescIncomeIdDesc(
-                userId, PageRequest.of(page, size));
-
-        List<IncomeDto> dtos = result.getContent().stream()
-                .map(i -> new IncomeDto(i.getIncomeId(), i.getDate(), i.getAmount()))
-                .toList();
-
-        return new IncomesResponse(dtos, result.hasNext());
-    }
-
-    @Transactional
-    public IncomeDto createIncome(Long userId, CreateIncomeRequest request) {
-        FinanceUser financeUser = financeUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Finance tracking is not enabled for this user"));
-
-        LocalDate date = request.getDate();
-        if (date == null) {
-            throw new RuntimeException("Date is required");
-        }
-        if (date.isAfter(LocalDate.now().plusDays(1))) {
-            throw new RuntimeException("Date cannot be in the future");
-        }
-
-        BigDecimal amount = request.getAmount();
-        if (amount == null) {
-            throw new RuntimeException("Amount is required");
-        }
-        if (amount.compareTo(BigDecimal.ZERO) <= 0) {
-            throw new RuntimeException("Amount must be greater than 0");
-        }
-
-        Income income = new Income();
-        income.setFinanceUser(financeUser);
-        income.setDate(date);
-        income.setAmount(amount);
-
-        Income saved = incomeRepository.save(income);
-        return new IncomeDto(saved.getIncomeId(), saved.getDate(), saved.getAmount());
-    }
-
-    private static BigDecimal normalizePercent(BigDecimal value) {
-        if (value == null) {
-            return null;
-        }
-        return value.setScale(2, RoundingMode.HALF_UP);
-    }
-
-    private static void validateSumTo100(BigDecimal spending, BigDecimal saving, BigDecimal investing, BigDecimal donation,
-            BigDecimal credit) {
-        if (spending == null || saving == null || investing == null || donation == null || credit == null) {
-            throw new RuntimeException("All 5 percentage values are required");
-        }
-
-        List<BigDecimal> list = List.of(spending, saving, investing, donation, credit);
-
-        for (BigDecimal v : list) {
-            if (v.compareTo(BigDecimal.ZERO) < 0 || v.compareTo(new BigDecimal("100")) > 0) {
-                throw new RuntimeException("Percentages must be between 0 and 100");
-            }
-        }
-
-        BigDecimal sum = spending.add(saving).add(investing).add(donation).add(credit);
-        // allow tiny rounding errors (e.g. 33.33 * 3 + 0.01)
-        BigDecimal diff = sum.subtract(new BigDecimal("100")).abs();
-        if (diff.compareTo(new BigDecimal("0.01")) > 0) {
-            throw new RuntimeException("Percentages must sum to 100");
-        }
-    }
-}
-
Index: backend/src/main/java/com/trekr/backend/service/InvestingService.java
===================================================================
--- backend/src/main/java/com/trekr/backend/service/InvestingService.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,136 +1,0 @@
-package com.trekr.backend.service;
-
-import com.trekr.backend.dto.invest.AssetDto;
-import com.trekr.backend.dto.invest.CreateAssetRequest;
-import com.trekr.backend.dto.invest.InvestingAssetsResponse;
-import com.trekr.backend.entity.User;
-import com.trekr.backend.entity.invest.Asset;
-import com.trekr.backend.entity.invest.InvestorUser;
-import com.trekr.backend.repository.AssetRepository;
-import com.trekr.backend.repository.InvestorUserRepository;
-import com.trekr.backend.repository.UserRepository;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.LocalDate;
-import java.util.List;
-import java.util.Locale;
-
-@Service
-public class InvestingService {
-
-    private final InvestorUserRepository investorUserRepository;
-    private final AssetRepository assetRepository;
-    private final UserRepository userRepository;
-
-    public InvestingService(
-            InvestorUserRepository investorUserRepository,
-            AssetRepository assetRepository,
-            UserRepository userRepository) {
-        this.investorUserRepository = investorUserRepository;
-        this.assetRepository = assetRepository;
-        this.userRepository = userRepository;
-    }
-
-    public boolean isTracking(Long userId) {
-        return investorUserRepository.existsById(userId);
-    }
-
-    @Transactional
-    public void startTracking(Long userId) {
-        if (investorUserRepository.existsById(userId)) {
-            return;
-        }
-
-        User user = userRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("User not found"));
-
-        InvestorUser investorUser = new InvestorUser();
-        investorUser.setUser(user);
-        investorUserRepository.save(investorUser);
-    }
-
-    @Transactional(readOnly = true)
-    public InvestingAssetsResponse getAssets(Long userId, int page, int size) {
-        if (!investorUserRepository.existsById(userId)) {
-            return new InvestingAssetsResponse(List.of(), false);
-        }
-
-        Page<Asset> result = assetRepository
-                .findByInvestorUser_UserIdOrderByAssetIdDesc(userId, PageRequest.of(page, size));
-
-        List<AssetDto> assets = result.getContent().stream()
-                .map(a -> new AssetDto(
-                        a.getAssetId(),
-                        a.getTickerSymbol(),
-                        a.getBuyPrice(),
-                        a.getBuyDate(),
-                        a.getQuantity()))
-                .toList();
-
-        return new InvestingAssetsResponse(assets, result.hasNext());
-    }
-
-    @Transactional
-    public AssetDto createAsset(Long userId, CreateAssetRequest request) {
-        InvestorUser investorUser = investorUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Investing tracking is not enabled for this user"));
-
-        String ticker = normalizeTicker(request.getTickerSymbol());
-        if (ticker == null || ticker.isBlank()) {
-            throw new RuntimeException("Ticker symbol is required");
-        }
-
-        if (ticker.length() > 30) {
-            throw new RuntimeException("Ticker symbol is too long");
-        }
-
-        // Allow equities (AAPL), crypto pairs (BTC/USD), indices (^GSPC), FX pairs
-        // (EURUSD=X), etc.
-        if (!ticker.matches("^[A-Z0-9.^=\\-/]{1,30}$")) {
-            throw new RuntimeException("Ticker symbol contains invalid characters");
-        }
-
-        LocalDate buyDate = request.getBuyDate();
-        if (buyDate != null && buyDate.isAfter(LocalDate.now())) {
-            throw new RuntimeException("Buy date cannot be in the future");
-        }
-
-        Asset asset = new Asset();
-        asset.setInvestorUser(investorUser);
-        asset.setTickerSymbol(ticker);
-        asset.setQuantity(request.getQuantity());
-        asset.setBuyPrice(request.getBuyPrice());
-        asset.setBuyDate(buyDate);
-
-        Asset saved = assetRepository.save(asset);
-
-        return new AssetDto(
-                saved.getAssetId(),
-                saved.getTickerSymbol(),
-                saved.getBuyPrice(),
-                saved.getBuyDate(),
-                saved.getQuantity());
-    }
-
-    @Transactional
-    public void deleteAsset(Long userId, Long assetId) {
-        if (assetId == null) {
-            throw new RuntimeException("Asset not found");
-        }
-
-        int deleted = assetRepository.deleteByAssetIdAndInvestorUser_UserId(assetId, userId);
-        if (deleted == 0) {
-            throw new RuntimeException("Asset not found");
-        }
-    }
-
-    private static String normalizeTicker(String tickerSymbol) {
-        if (tickerSymbol == null) {
-            return null;
-        }
-        return tickerSymbol.trim().toUpperCase(Locale.ROOT);
-    }
-}
Index: backend/src/main/java/com/trekr/backend/service/JwtService.java
===================================================================
--- backend/src/main/java/com/trekr/backend/service/JwtService.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,64 +1,0 @@
-package com.trekr.backend.service;
-
-import com.trekr.backend.security.UserPrincipal;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.JwtException;
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.security.Keys;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import javax.crypto.SecretKey;
-import java.nio.charset.StandardCharsets;
-import java.util.Date;
-
-@Service
-public class JwtService {
-
-    private final SecretKey signingKey;
-    private static final long TOKEN_VALIDITY_MS = 24 * 60 * 60 * 1000; // 24 hours
-
-    public JwtService(@Value("${jwt.secret}") String secret) {
-        String key = secret != null && !secret.isBlank() ? secret : "dev-fallback-secret-min-32-chars-required";
-        if (key.length() < 32) {
-            key = key + "0".repeat(Math.max(0, 32 - key.length()));
-        }
-        this.signingKey = Keys.hmacShaKeyFor(key.getBytes(StandardCharsets.UTF_8));
-    }
-
-    public String generateToken(Long userId, String username, String email) {
-        return Jwts.builder()
-                .subject(String.valueOf(userId))
-                .claim("username", username)
-                .claim("email", email)
-                .issuedAt(new Date())
-                .expiration(new Date(System.currentTimeMillis() + TOKEN_VALIDITY_MS))
-                .signWith(signingKey)
-                .compact();
-    }
-
-    public boolean isTokenValid(String token) {
-        try {
-            parseClaims(token);
-            return true;
-        } catch (JwtException | IllegalArgumentException ex) {
-            return false;
-        }
-    }
-
-    public UserPrincipal parseUserPrincipal(String token) {
-        Claims claims = parseClaims(token);
-        Long userId = Long.valueOf(claims.getSubject());
-        String username = (String) claims.get("username");
-        String email = (String) claims.get("email");
-        return new UserPrincipal(userId, username, email);
-    }
-
-    private Claims parseClaims(String token) {
-        return Jwts.parser()
-                .verifyWith(signingKey)
-                .build()
-                .parseSignedClaims(token)
-                .getPayload();
-    }
-}
Index: backend/src/main/java/com/trekr/backend/service/TrainingService.java
===================================================================
--- backend/src/main/java/com/trekr/backend/service/TrainingService.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,232 +1,0 @@
-package com.trekr.backend.service;
-
-import com.trekr.backend.dto.training.CreateTrainingSessionRequest;
-import com.trekr.backend.dto.training.TrainingSessionDto;
-import com.trekr.backend.dto.training.TrainingStartRequest;
-import com.trekr.backend.dto.training.TrainingSessionsResponse;
-import com.trekr.backend.dto.training.TrainingProfileResponse;
-import com.trekr.backend.dto.training.WorkoutTypeDto;
-import com.trekr.backend.entity.User;
-import com.trekr.backend.entity.training.TrainingSession;
-import com.trekr.backend.entity.training.TrainingUser;
-import com.trekr.backend.repository.TrainingSessionRepository;
-import com.trekr.backend.repository.TrainingUserRepository;
-import com.trekr.backend.repository.UserRepository;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@Service
-public class TrainingService {
-
-    private static final Map<String, BigDecimal> MET_BY_TYPE = Map.ofEntries(
-            Map.entry("running", new BigDecimal("9.8")),
-            Map.entry("cycling", new BigDecimal("7.5")),
-            Map.entry("walking", new BigDecimal("3.5")),
-            Map.entry("strength", new BigDecimal("6.0")),
-            Map.entry("hiit", new BigDecimal("9.0")),
-            Map.entry("yoga", new BigDecimal("2.5")),
-            Map.entry("swimming", new BigDecimal("8.0")),
-            Map.entry("rowing", new BigDecimal("7.0")),
-            Map.entry("elliptical", new BigDecimal("5.0")),
-
-            // Added types (same calories formula; MET is the only extra input)
-            Map.entry("hiking", new BigDecimal("6.0")),
-            Map.entry("stair-climbing", new BigDecimal("8.8")),
-            Map.entry("jump-rope", new BigDecimal("12.3")),
-            Map.entry("boxing", new BigDecimal("7.8")),
-            Map.entry("basketball", new BigDecimal("8.0")),
-            Map.entry("soccer", new BigDecimal("10.0")),
-            Map.entry("tennis", new BigDecimal("7.3")),
-            Map.entry("dance", new BigDecimal("5.5")),
-            Map.entry("pilates", new BigDecimal("3.0")),
-            Map.entry("stretching", new BigDecimal("2.3")));
-
-    private static final List<String> WORKOUT_TYPE_ORDER = List.of(
-            "running",
-            "cycling",
-            "walking",
-            "strength",
-            "hiit",
-            "yoga",
-            "swimming",
-            "rowing",
-            "elliptical",
-            "hiking",
-            "stair-climbing",
-            "jump-rope",
-            "boxing",
-            "basketball",
-            "soccer",
-            "tennis",
-            "dance",
-            "pilates",
-            "stretching");
-
-    private final TrainingUserRepository trainingUserRepository;
-    private final TrainingSessionRepository trainingSessionRepository;
-    private final UserRepository userRepository;
-
-    public TrainingService(
-            TrainingUserRepository trainingUserRepository,
-            TrainingSessionRepository trainingSessionRepository,
-            UserRepository userRepository) {
-        this.trainingUserRepository = trainingUserRepository;
-        this.trainingSessionRepository = trainingSessionRepository;
-        this.userRepository = userRepository;
-    }
-
-    public boolean isTracking(Long userId) {
-        return trainingUserRepository.existsById(userId);
-    }
-
-    @Transactional
-    public void startTracking(Long userId, TrainingStartRequest request) {
-        if (trainingUserRepository.existsById(userId)) {
-            return;
-        }
-
-        User user = userRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("User not found"));
-
-        TrainingUser trainingUser = new TrainingUser();
-        trainingUser.setUser(user);
-        trainingUser.setGender(request.getGender());
-        trainingUser.setAge(request.getAge());
-        trainingUser.setWeight(request.getWeight());
-
-        trainingUserRepository.save(trainingUser);
-    }
-
-    @Transactional(readOnly = true)
-    public TrainingSessionsResponse getSessions(Long userId, int page, int size) {
-        if (!trainingUserRepository.existsById(userId)) {
-            return new TrainingSessionsResponse(List.of(), false);
-        }
-
-        Page<TrainingSession> result = trainingSessionRepository
-                .findByTrainingUser_UserIdOrderByDateDesc(userId, PageRequest.of(page, size));
-
-        List<TrainingSessionDto> sessions = result.getContent().stream()
-                .map(s -> new TrainingSessionDto(
-                        s.getTrainingId(),
-                        s.getDate(),
-                        s.getType(),
-                        s.getDuration(),
-                        s.getCalories()))
-                .toList();
-
-        return new TrainingSessionsResponse(sessions, result.hasNext());
-    }
-
-    public List<WorkoutTypeDto> getWorkoutTypes() {
-        return WORKOUT_TYPE_ORDER.stream()
-                .map(type -> new WorkoutTypeDto(type, labelForType(type), MET_BY_TYPE.get(type)))
-                .toList();
-    }
-
-    @Transactional(readOnly = true)
-    public TrainingProfileResponse getProfile(Long userId) {
-        TrainingUser trainingUser = trainingUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Training tracking is not enabled for this user"));
-        return new TrainingProfileResponse(trainingUser.getGender(), trainingUser.getAge(), trainingUser.getWeight());
-    }
-
-    @Transactional
-    public TrainingSessionDto createSession(Long userId, CreateTrainingSessionRequest request) {
-        TrainingUser trainingUser = trainingUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Training tracking is not enabled for this user"));
-
-        String type = normalizeType(request.getType());
-        BigDecimal met = MET_BY_TYPE.get(type);
-        if (met == null) {
-            throw new RuntimeException("Unsupported workout type");
-        }
-
-        BigDecimal durationMinutes = request.getDurationMinutes();
-        if (durationMinutes == null || durationMinutes.compareTo(BigDecimal.ONE) < 0) {
-            throw new RuntimeException("Duration must be at least 1 minute");
-        }
-
-        BigDecimal calories;
-        if (Boolean.TRUE.equals(request.getAutoCalculateCalories())) {
-            calories = calculateCalories(trainingUser, met, durationMinutes);
-        } else {
-            calories = request.getCalories();
-            if (calories == null) {
-                throw new RuntimeException("Calories are required when auto-calculation is disabled");
-            }
-            if (calories.compareTo(BigDecimal.ZERO) < 0) {
-                throw new RuntimeException("Calories must be 0 or greater");
-            }
-        }
-
-        TrainingSession session = new TrainingSession();
-        session.setTrainingUser(trainingUser);
-        session.setType(type);
-        session.setDuration(durationMinutes);
-        session.setCalories(calories);
-        // Allow client to supply a date (past or present). If not provided, use today.
-        java.time.LocalDate suppliedDate = request.getDate();
-        if (suppliedDate == null) {
-            suppliedDate = LocalDate.now();
-        }
-        if (suppliedDate.isAfter(LocalDate.now())) {
-            throw new RuntimeException("Date cannot be in the future");
-        }
-        session.setDate(suppliedDate);
-
-        TrainingSession saved = trainingSessionRepository.save(session);
-
-        return new TrainingSessionDto(
-                saved.getTrainingId(),
-                saved.getDate(),
-                saved.getType(),
-                saved.getDuration(),
-                saved.getCalories());
-    }
-
-    private static String normalizeType(String type) {
-        if (type == null) {
-            return null;
-        }
-        return type.trim().toLowerCase(Locale.ROOT);
-    }
-
-    private static String labelForType(String type) {
-        if (type == null || type.isBlank()) {
-            return "";
-        }
-        if ("hiit".equals(type)) {
-            return "HIIT";
-        }
-
-        String normalized = type.replace('_', '-');
-        return Arrays.stream(normalized.split("-"))
-                .filter(part -> !part.isBlank())
-                .map(part -> Character.toUpperCase(part.charAt(0)) + part.substring(1))
-                .collect(Collectors.joining(" "));
-    }
-
-    private static BigDecimal calculateCalories(TrainingUser trainingUser, BigDecimal met, BigDecimal durationMinutes) {
-        BigDecimal weightKg = trainingUser.getWeight();
-        if (weightKg == null) {
-            throw new RuntimeException("Weight is required to auto-calculate calories");
-        }
-
-        BigDecimal durationHours = durationMinutes.divide(new BigDecimal("60"), 10, RoundingMode.HALF_UP);
-        return met.multiply(weightKg)
-                .multiply(durationHours)
-                .setScale(2, RoundingMode.HALF_UP);
-    }
-}
Index: backend/src/main/java/com/trekr/backend/service/WeightService.java
===================================================================
--- backend/src/main/java/com/trekr/backend/service/WeightService.java	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,228 +1,0 @@
-package com.trekr.backend.service;
-
-import com.trekr.backend.dto.weight.CreateDailyIntakeRequest;
-import com.trekr.backend.dto.weight.TodayTrainingInfoDto;
-import com.trekr.backend.dto.weight.WeightDailyIntakeDto;
-import com.trekr.backend.dto.weight.WeightDailyIntakesResponse;
-import com.trekr.backend.dto.weight.WeightProfileResponse;
-import com.trekr.backend.dto.weight.WeightStartRequest;
-import com.trekr.backend.entity.User;
-import com.trekr.backend.entity.weight.DailyIntake;
-import com.trekr.backend.entity.weight.WeightUser;
-import com.trekr.backend.repository.DailyIntakeRepository;
-import com.trekr.backend.repository.TrainingSessionRepository;
-import com.trekr.backend.repository.UserRepository;
-import com.trekr.backend.repository.WeightUserRepository;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-public class WeightService {
-
-    private static final BigDecimal CALORIE_WEIGHT_FACTOR = new BigDecimal("10");
-    private static final BigDecimal CALORIE_HEIGHT_FACTOR = new BigDecimal("6.25");
-    private static final BigDecimal CALORIE_BASE = new BigDecimal("50");
-    private static final BigDecimal LOSS_CALORIE_DELTA = new BigDecimal("500");
-    private static final BigDecimal GAIN_CALORIE_DELTA = new BigDecimal("300");
-
-    private final WeightUserRepository weightUserRepository;
-    private final DailyIntakeRepository dailyIntakeRepository;
-    private final UserRepository userRepository;
-    private final TrainingSessionRepository trainingSessionRepository;
-
-    public WeightService(
-            WeightUserRepository weightUserRepository,
-            DailyIntakeRepository dailyIntakeRepository,
-            UserRepository userRepository,
-            TrainingSessionRepository trainingSessionRepository) {
-        this.weightUserRepository = weightUserRepository;
-        this.dailyIntakeRepository = dailyIntakeRepository;
-        this.userRepository = userRepository;
-        this.trainingSessionRepository = trainingSessionRepository;
-    }
-
-    public boolean isTracking(Long userId) {
-        return weightUserRepository.existsById(userId);
-    }
-
-    @Transactional
-    public void startTracking(Long userId, WeightStartRequest request) {
-        if (weightUserRepository.existsById(userId)) {
-            return;
-        }
-
-        User user = userRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("User not found"));
-
-        BigDecimal goalCalories = resolveGoalCalories(request, request.getWeight(), request.getHeight(), request.getGoalWeight());
-
-        WeightUser weightUser = new WeightUser();
-        weightUser.setUser(user);
-        weightUser.setWeight(request.getWeight());
-        weightUser.setHeight(request.getHeight());
-        weightUser.setGoalWeight(request.getGoalWeight());
-        weightUser.setGoalCalories(goalCalories);
-
-        weightUserRepository.save(weightUser);
-    }
-
-    @Transactional(readOnly = true)
-    public WeightProfileResponse getProfile(Long userId) {
-        WeightUser weightUser = weightUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Weight tracking is not enabled for this user"));
-
-        return new WeightProfileResponse(
-                weightUser.getWeight(),
-                weightUser.getHeight(),
-                weightUser.getGoalWeight(),
-                weightUser.getGoalCalories());
-    }
-
-    @Transactional(readOnly = true)
-    public WeightDailyIntakesResponse getDailyIntakes(Long userId, int page, int size) {
-        if (!weightUserRepository.existsById(userId)) {
-            return new WeightDailyIntakesResponse(List.of(), false, false);
-        }
-
-        Page<DailyIntake> result = dailyIntakeRepository
-                .findByWeightUser_UserIdOrderByDateDesc(userId, PageRequest.of(page, size));
-
-        List<LocalDate> dates = result.getContent().stream()
-                .map(DailyIntake::getDate)
-                .distinct()
-                .toList();
-
-        Map<LocalDate, Integer> trainingCountsByDate = new HashMap<>();
-        Map<LocalDate, BigDecimal> burnedCaloriesByDate = new HashMap<>();
-        if (!dates.isEmpty()) {
-            trainingSessionRepository.findByTrainingUser_UserIdAndDateIn(userId, dates).forEach(session -> {
-                LocalDate sessionDate = session.getDate();
-                trainingCountsByDate.merge(sessionDate, 1, Integer::sum);
-                BigDecimal calories = session.getCalories() != null ? session.getCalories() : BigDecimal.ZERO;
-                burnedCaloriesByDate.merge(sessionDate, calories, BigDecimal::add);
-            });
-        }
-
-        List<WeightDailyIntakeDto> intakes = result.getContent().stream()
-                .map(d -> {
-                    boolean trainedThatDay = trainingCountsByDate.getOrDefault(d.getDate(), 0) > 0;
-                    BigDecimal burnedCalories = burnedCaloriesByDate.getOrDefault(d.getDate(), BigDecimal.ZERO)
-                            .setScale(2, java.math.RoundingMode.HALF_UP);
-
-                    return new WeightDailyIntakeDto(
-                            d.getDailyIntakeId(),
-                            d.getDate(),
-                            d.getCalories(),
-                            trainedThatDay,
-                            burnedCalories);
-                })
-                .toList();
-
-        boolean hasTodayIntake = dailyIntakeRepository.existsByWeightUser_UserIdAndDate(userId, LocalDate.now());
-        return new WeightDailyIntakesResponse(intakes, result.hasNext(), hasTodayIntake);
-    }
-
-    @Transactional
-    public WeightDailyIntakeDto createDailyIntake(Long userId, CreateDailyIntakeRequest request) {
-        WeightUser weightUser = weightUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Weight tracking is not enabled for this user"));
-
-        LocalDate today = LocalDate.now();
-        if (dailyIntakeRepository.existsByWeightUser_UserIdAndDate(userId, today)) {
-            throw new RuntimeException("Today's intake has already been recorded");
-        }
-
-        DailyIntake intake = new DailyIntake();
-        intake.setWeightUser(weightUser);
-        intake.setCalories(request.getCalories());
-        intake.setDate(today);
-
-        DailyIntake saved = dailyIntakeRepository.save(intake);
-        
-        // Fetch today's training data
-        var trainingSessions = trainingSessionRepository.findByTrainingUser_UserIdAndDate(userId, today);
-        boolean trainedToday = !trainingSessions.isEmpty();
-        BigDecimal burnedCalories = trainingSessions.stream()
-                .map(ts -> ts.getCalories() != null ? ts.getCalories() : BigDecimal.ZERO)
-                .reduce(BigDecimal.ZERO, BigDecimal::add)
-                .setScale(2, java.math.RoundingMode.HALF_UP);
-        
-        return new WeightDailyIntakeDto(saved.getDailyIntakeId(), saved.getDate(), saved.getCalories(), trainedToday, burnedCalories);
-    }
-
-    public WeightProfileResponse updateProfile(Long userId, WeightStartRequest request) {
-        WeightUser weightUser = weightUserRepository.findById(userId)
-                .orElseThrow(() -> new RuntimeException("Weight tracking is not enabled for this user"));
-
-        BigDecimal goalCalories = resolveGoalCalories(request, request.getWeight(), request.getHeight(), request.getGoalWeight());
-
-        weightUser.setWeight(request.getWeight());
-        weightUser.setHeight(request.getHeight());
-        weightUser.setGoalWeight(request.getGoalWeight());
-        weightUser.setGoalCalories(goalCalories);
-
-        WeightUser updated = weightUserRepository.save(weightUser);
-        return new WeightProfileResponse(
-                updated.getWeight(),
-                updated.getHeight(),
-                updated.getGoalWeight(),
-                updated.getGoalCalories());
-    }
-
-    @Transactional(readOnly = true)
-    public TodayTrainingInfoDto getTodayTrainingInfo(Long userId) {
-        // Try to get training user, if doesn't exist just return zeros
-        var trainingUser = trainingSessionRepository.findByTrainingUser_UserIdAndDate(userId, LocalDate.now());
-
-        boolean trainedToday = !trainingUser.isEmpty();
-        BigDecimal totalBurnedCalories = trainingUser.stream()
-                .map(ts -> ts.getCalories() != null ? ts.getCalories() : BigDecimal.ZERO)
-                .reduce(BigDecimal.ZERO, BigDecimal::add)
-                .setScale(2, java.math.RoundingMode.HALF_UP);
-
-        return new TodayTrainingInfoDto(trainedToday, totalBurnedCalories);
-    }
-
-    private static BigDecimal resolveGoalCalories(
-            WeightStartRequest request,
-            BigDecimal currentWeight,
-            BigDecimal height,
-            BigDecimal goalWeight) {
-        if (!Boolean.FALSE.equals(request.getAutoCalculateTargets())) {
-            return calculateGoalCalories(currentWeight, height, goalWeight);
-        }
-
-        BigDecimal goalCalories = request.getGoalCalories();
-        if (goalCalories == null) {
-            throw new RuntimeException("Goal calories are required when auto-calculation is disabled");
-        }
-        if (goalCalories.compareTo(BigDecimal.ZERO) < 0) {
-            throw new RuntimeException("Goal calories must be 0 or greater");
-        }
-        return goalCalories.setScale(2, java.math.RoundingMode.HALF_UP);
-    }
-
-    private static BigDecimal calculateGoalCalories(BigDecimal currentWeight, BigDecimal height, BigDecimal goalWeight) {
-        BigDecimal maintenanceCalories = currentWeight.multiply(CALORIE_WEIGHT_FACTOR)
-                .add(height.multiply(CALORIE_HEIGHT_FACTOR))
-                .add(CALORIE_BASE)
-                .setScale(2, java.math.RoundingMode.HALF_UP);
-
-        int direction = goalWeight.compareTo(currentWeight);
-        if (direction < 0) {
-            return maintenanceCalories.subtract(LOSS_CALORIE_DELTA).max(BigDecimal.ZERO).setScale(2, java.math.RoundingMode.HALF_UP);
-        }
-        if (direction > 0) {
-            return maintenanceCalories.add(GAIN_CALORIE_DELTA).setScale(2, java.math.RoundingMode.HALF_UP);
-        }
-        return maintenanceCalories;
-    }
-}
Index: backend/src/main/resources/application.properties
===================================================================
--- backend/src/main/resources/application.properties	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ backend/src/main/resources/application.properties	(revision 72053b5fc3ff291757af1cdd64e8fdfcb9e9b17d)
@@ -1,54 +1,1 @@
-spring.application.name=trekr
-
-# ============================
-# JPA & Hibernate
-# ============================
-# NOTE: On some managed PostgreSQL providers the app user cannot read pg_catalog views
-# like pg_settings. Hibernate schema migration/metadata introspection can trigger that
-# access during startup (e.g., when ddl-auto=update).
-#
-# Default to no automatic DDL. Override locally if your DB user has sufficient rights:
-#   export SPRING_JPA_HIBERNATE_DDL_AUTO=update
-spring.jpa.hibernate.ddl-auto=${SPRING_JPA_HIBERNATE_DDL_AUTO:none}
-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
-spring.jpa.show-sql=false
-spring.jpa.properties.hibernate.format_sql=true
-spring.jpa.properties.hibernate.default_schema=trekr
-spring.jpa.properties.hibernate.hbm2ddl.create_namespaces=true
-
-# Avoid JDBC metadata access on boot (further reduces pg_catalog permission requirements)
-spring.jpa.properties.hibernate.boot.allow_jdbc_metadata_access=false
-
-# ============================
-# PostgreSQL connection (loaded from backend/.env or backend/env)
-# ============================
-spring.datasource.driver-class-name=org.postgresql.Driver
-spring.datasource.url=${SPRING_DATASOURCE_URL}
-spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
-spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
-
-# ============================
-# JWT Configuration (supports JWT_SECRET or JWT_CONFIG_SECRET)
-# ============================
-jwt.secret=${JWT_SECRET:${JWT_CONFIG_SECRET:dev-fallback-secret-min-32-chars-required}}
-
-# ============================
-# Logging
-# ============================
-logging.level.org.springframework.security=DEBUG
-
-# ============================
-# HikariCP
-# ============================
-spring.datasource.hikari.pool-name=trekrHikariPool
-# Remote PostgreSQL (especially via SSH tunnel) often has a small max_connections.
-# Use a slightly larger default so the app can serve more concurrent users without
-# overloading the database; override via env if your provider has tighter limits.
-spring.datasource.hikari.maximum-pool-size=${SPRING_DATASOURCE_HIKARI_MAX_POOL_SIZE:20}
-spring.datasource.hikari.minimum-idle=${SPRING_DATASOURCE_HIKARI_MIN_IDLE:5}
-spring.datasource.hikari.connection-timeout=30000
-spring.datasource.hikari.idle-timeout=600000
-spring.datasource.hikari.max-lifetime=1800000
-
-# Max multipart parts
-server.tomcat.max-part-count=50
+spring.application.name=backend
Index: backend/src/test/resources/application.properties
===================================================================
--- backend/src/test/resources/application.properties	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,21 +1,0 @@
-# Test profile: use in-memory DB so tests don't require external Postgres
-
-spring.datasource.url=jdbc:h2:mem:trekr;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE
-spring.datasource.driver-class-name=org.h2.Driver
-spring.datasource.username=sa
-spring.datasource.password=
-
-spring.jpa.hibernate.ddl-auto=create-drop
-spring.jpa.show-sql=false
-spring.jpa.properties.hibernate.format_sql=true
-spring.jpa.properties.hibernate.default_schema=trekr
-spring.jpa.properties.hibernate.hbm2ddl.create_namespaces=false
-
-# Ensure schema exists before Hibernate runs DDL
-spring.sql.init.mode=always
-
-# JWT secret for tests
-jwt.secret=test-secret-min-32-chars-000000000000
-
-# Keep noise down in tests
-logging.level.org.springframework.security=INFO
Index: backend/src/test/resources/schema.sql
===================================================================
--- backend/src/test/resources/schema.sql	(revision 0427f599f15f08425a193b5b366fd15cc0a95f42)
+++ 	(revision )
@@ -1,2 +1,0 @@
-CREATE SCHEMA IF NOT EXISTS trekr;
-SET SCHEMA trekr;
