Big Feature and Beautifying Package

This commit is contained in:
Tim Zöller 2026-01-13 12:53:18 +01:00
parent 87da2a3861
commit 1f2ff67f38
171 changed files with 1286 additions and 663 deletions

View file

@ -237,7 +237,7 @@ fitpub:
logging: logging:
level: level:
org.operaton.fitpub: DEBUG net.javahippie.fitpub: DEBUG
``` ```
#### `application-instance2.yml` #### `application-instance2.yml`
@ -261,7 +261,7 @@ fitpub:
logging: logging:
level: level:
org.operaton.fitpub: DEBUG net.javahippie.fitpub: DEBUG
``` ```
### Step 3: Build the Application ### Step 3: Build the Application

66
pom.xml
View file

@ -11,7 +11,7 @@
<relativePath/> <relativePath/>
</parent> </parent>
<groupId>org.operaton</groupId> <groupId>net.javahippie</groupId>
<artifactId>feditrack</artifactId> <artifactId>feditrack</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<name>FitPub</name> <name>FitPub</name>
@ -23,6 +23,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>17</java.version> <java.version>17</java.version>
<jjwt.version>0.12.3</jjwt.version> <jjwt.version>0.12.3</jjwt.version>
<testcontainers.version>2.0.3</testcontainers.version>
</properties> </properties>
<dependencies> <dependencies>
@ -77,16 +78,6 @@
<artifactId>flyway-core</artifactId> <artifactId>flyway-core</artifactId>
</dependency> </dependency>
<!-- Testcontainers for Dev Services -->
<!-- These are excluded from production builds via Maven profile -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency> <dependency>
<groupId>io.hypersistence</groupId> <groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-63</artifactId> <artifactId>hypersistence-utils-hibernate-63</artifactId>
@ -155,6 +146,7 @@
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId> <artifactId>spring-security-test</artifactId>
@ -168,45 +160,29 @@
<scope>runtime</scope> <scope>runtime</scope>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
</dependencies>
<build> <dependency>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
<!-- Exclude Testcontainers from production JAR -->
<exclude>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId> <artifactId>spring-boot-testcontainers</artifactId>
</exclude> <scope>test</scope>
<exclude> </dependency>
<dependency>
<groupId>org.testcontainers</groupId> <groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId> <artifactId>testcontainers-junit-jupiter</artifactId>
</exclude> <version>2.0.2</version>
<exclude> <scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId> <groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId> <artifactId>testcontainers-postgresql</artifactId>
</exclude> <version>2.0.1</version>
<exclude> <scope>test</scope>
<groupId>org.testcontainers</groupId> </dependency>
<artifactId>jdbc</artifactId>
</exclude> </dependencies>
<exclude>
<groupId>org.testcontainers</groupId>
<artifactId>database-commons</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<profiles> <profiles>
<!-- Profile to skip integration tests (useful when Docker is not available) --> <!-- Profile to skip integration tests (useful when Docker is not available) -->

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub; package net.javahippie.fitpub;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.client5.http.classic.HttpClient;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.config; package net.javahippie.fitpub.config;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.config; package net.javahippie.fitpub.config;
import org.apache.hc.core5.http.EntityDetails; import org.apache.hc.core5.http.EntityDetails;
import org.apache.hc.core5.http.HttpRequest; import org.apache.hc.core5.http.HttpRequest;

View file

@ -1,7 +1,7 @@
package org.operaton.fitpub.config; package net.javahippie.fitpub.config;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.operaton.fitpub.security.JwtAuthenticationFilter; import net.javahippie.fitpub.security.JwtAuthenticationFilter;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
@ -36,7 +36,7 @@ public class SecurityConfig {
private final JwtAuthenticationFilter jwtAuthenticationFilter; private final JwtAuthenticationFilter jwtAuthenticationFilter;
private final UserDetailsService userDetailsService; private final UserDetailsService userDetailsService;
private final org.operaton.fitpub.security.CustomAuthenticationEntryPoint customAuthenticationEntryPoint; private final net.javahippie.fitpub.security.CustomAuthenticationEntryPoint customAuthenticationEntryPoint;
/** /**
* Configures the security filter chain. * Configures the security filter chain.
@ -62,6 +62,7 @@ public class SecurityConfig {
// Public endpoints - Web UI pages // Public endpoints - Web UI pages
.requestMatchers("/", "/login", "/register", "/timeline", "/timeline/**").permitAll() .requestMatchers("/", "/login", "/register", "/timeline", "/timeline/**").permitAll()
.requestMatchers("/discover").permitAll() // User discovery page .requestMatchers("/discover").permitAll() // User discovery page
.requestMatchers("/terms").permitAll() // Terms of Service page
// Protected view pages - require authentication // Protected view pages - require authentication
.requestMatchers("/activities", "/activities/upload").authenticated() .requestMatchers("/activities", "/activities/upload").authenticated()

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.config; package net.javahippie.fitpub.config;
import nz.net.ultraq.thymeleaf.layoutdialect.LayoutDialect; import nz.net.ultraq.thymeleaf.layoutdialect.LayoutDialect;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;

View file

@ -1,22 +1,23 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.ActivityDTO; import net.javahippie.fitpub.model.dto.ActivityDTO;
import org.operaton.fitpub.model.dto.ActivityUpdateRequest; import net.javahippie.fitpub.model.dto.ActivityUpdateRequest;
import org.operaton.fitpub.model.dto.ActivityUploadRequest; import net.javahippie.fitpub.model.dto.ActivityUploadRequest;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.Activity;
import org.operaton.fitpub.model.entity.PrivacyZone; import net.javahippie.fitpub.model.entity.PrivacyZone;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.ActivityFileService; import net.javahippie.fitpub.service.ActivityFileService;
import org.operaton.fitpub.service.ActivityImageService; import net.javahippie.fitpub.service.ActivityImageService;
import org.operaton.fitpub.service.ActivityPostProcessingService; import net.javahippie.fitpub.service.ActivityPostProcessingService;
import org.operaton.fitpub.service.FederationService; import net.javahippie.fitpub.service.FederationService;
import org.operaton.fitpub.service.FitFileService; import net.javahippie.fitpub.service.WeatherService;
import org.operaton.fitpub.service.PrivacyZoneService; import net.javahippie.fitpub.service.FitFileService;
import org.operaton.fitpub.service.TrackPrivacyFilter; import net.javahippie.fitpub.service.PrivacyZoneService;
import net.javahippie.fitpub.service.TrackPrivacyFilter;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -46,7 +47,7 @@ public class ActivityController {
private final ActivityPostProcessingService activityPostProcessingService; private final ActivityPostProcessingService activityPostProcessingService;
private final FederationService federationService; private final FederationService federationService;
private final ActivityImageService activityImageService; private final ActivityImageService activityImageService;
private final org.operaton.fitpub.service.WeatherService weatherService; private final WeatherService weatherService;
private final PrivacyZoneService privacyZoneService; private final PrivacyZoneService privacyZoneService;
private final TrackPrivacyFilter trackPrivacyFilter; private final TrackPrivacyFilter trackPrivacyFilter;
@ -250,7 +251,8 @@ public class ActivityController {
userId, userId,
request.getTitle(), request.getTitle(),
request.getDescription(), request.getDescription(),
request.getVisibility() request.getVisibility(),
request.getRace()
); );
ActivityDTO dto = ActivityDTO.fromEntity(updated); ActivityDTO dto = ActivityDTO.fromEntity(updated);

View file

@ -1,15 +1,17 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.activitypub.Actor; import net.javahippie.fitpub.model.activitypub.Actor;
import org.operaton.fitpub.model.activitypub.OrderedCollection; import net.javahippie.fitpub.model.activitypub.OrderedCollection;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.Activity;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.ActivityRepository; import net.javahippie.fitpub.repository.FollowRepository;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.ActivityRepository;
import org.operaton.fitpub.service.ActivityImageService; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.util.ActivityFormatter; import net.javahippie.fitpub.service.ActivityImageService;
import net.javahippie.fitpub.service.InboxProcessor;
import net.javahippie.fitpub.util.ActivityFormatter;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -33,8 +35,8 @@ public class ActivityPubController {
private final UserRepository userRepository; private final UserRepository userRepository;
private final ActivityRepository activityRepository; private final ActivityRepository activityRepository;
private final ActivityImageService activityImageService; private final ActivityImageService activityImageService;
private final org.operaton.fitpub.service.InboxProcessor inboxProcessor; private final InboxProcessor inboxProcessor;
private final org.operaton.fitpub.repository.FollowRepository followRepository; private final FollowRepository followRepository;
@Value("${fitpub.base-url}") @Value("${fitpub.base-url}")
private String baseUrl; private String baseUrl;

View file

@ -1,10 +1,19 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.entity.*; import net.javahippie.fitpub.model.entity.Achievement;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.model.entity.ActivitySummary;
import org.operaton.fitpub.service.*; import net.javahippie.fitpub.model.entity.PersonalRecord;
import net.javahippie.fitpub.model.entity.TrainingLoad;
import net.javahippie.fitpub.model.entity.User;
import net.javahippie.fitpub.service.AchievementService;
import net.javahippie.fitpub.service.ActivitySummaryService;
import net.javahippie.fitpub.service.PersonalRecordService;
import net.javahippie.fitpub.service.TrainingLoadService;
import net.javahippie.fitpub.model.entity.*;
import net.javahippie.fitpub.repository.UserRepository;
import net.javahippie.fitpub.service.*;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;

View file

@ -1,14 +1,14 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.AuthResponse; import net.javahippie.fitpub.model.dto.AuthResponse;
import org.operaton.fitpub.model.dto.LoginRequest; import net.javahippie.fitpub.model.dto.LoginRequest;
import org.operaton.fitpub.model.dto.RegisterRequest; import net.javahippie.fitpub.model.dto.RegisterRequest;
import org.operaton.fitpub.service.UserService; import net.javahippie.fitpub.service.UserService;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;

View file

@ -1,14 +1,14 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.entity.BatchImportFileResult; import net.javahippie.fitpub.model.entity.BatchImportFileResult;
import org.operaton.fitpub.model.entity.BatchImportJob; import net.javahippie.fitpub.model.entity.BatchImportJob;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.BatchImportFileResultRepository; import net.javahippie.fitpub.repository.BatchImportFileResultRepository;
import org.operaton.fitpub.repository.BatchImportJobRepository; import net.javahippie.fitpub.repository.BatchImportJobRepository;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.BatchImportService; import net.javahippie.fitpub.service.BatchImportService;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;

View file

@ -1,18 +1,18 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.CommentCreateRequest; import net.javahippie.fitpub.model.dto.CommentCreateRequest;
import org.operaton.fitpub.model.dto.CommentDTO; import net.javahippie.fitpub.model.dto.CommentDTO;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.Activity;
import org.operaton.fitpub.model.entity.Comment; import net.javahippie.fitpub.model.entity.Comment;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.ActivityRepository; import net.javahippie.fitpub.repository.ActivityRepository;
import org.operaton.fitpub.repository.CommentRepository; import net.javahippie.fitpub.repository.CommentRepository;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.FederationService; import net.javahippie.fitpub.service.FederationService;
import org.operaton.fitpub.service.NotificationService; import net.javahippie.fitpub.service.NotificationService;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;

View file

@ -1,9 +1,9 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;

View file

@ -1,13 +1,13 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.HeatmapDataDTO; import net.javahippie.fitpub.model.dto.HeatmapDataDTO;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.model.entity.UserHeatmapGrid; import net.javahippie.fitpub.model.entity.UserHeatmapGrid;
import org.operaton.fitpub.repository.ActivityRepository; import net.javahippie.fitpub.repository.ActivityRepository;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.HeatmapGridService; import net.javahippie.fitpub.service.HeatmapGridService;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -18,4 +18,9 @@ public class HomeController {
public String heatmap() { public String heatmap() {
return "heatmap"; return "heatmap";
} }
@GetMapping("/terms")
public String terms() {
return "terms";
}
} }

View file

@ -1,16 +1,16 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.LikeDTO; import net.javahippie.fitpub.model.dto.LikeDTO;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.Activity;
import org.operaton.fitpub.model.entity.Like; import net.javahippie.fitpub.model.entity.Like;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.ActivityRepository; import net.javahippie.fitpub.repository.ActivityRepository;
import org.operaton.fitpub.repository.LikeRepository; import net.javahippie.fitpub.repository.LikeRepository;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.FederationService; import net.javahippie.fitpub.service.FederationService;
import org.operaton.fitpub.service.NotificationService; import net.javahippie.fitpub.service.NotificationService;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -20,7 +20,6 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.time.Instant;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View file

@ -1,12 +1,12 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.NotificationDTO; import net.javahippie.fitpub.model.dto.NotificationDTO;
import org.operaton.fitpub.model.entity.Notification; import net.javahippie.fitpub.model.entity.Notification;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.NotificationService; import net.javahippie.fitpub.service.NotificationService;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;

View file

@ -1,15 +1,15 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.CreatePrivacyZoneRequest; import net.javahippie.fitpub.model.dto.CreatePrivacyZoneRequest;
import org.operaton.fitpub.model.dto.PrivacyZoneDTO; import net.javahippie.fitpub.model.dto.PrivacyZoneDTO;
import org.operaton.fitpub.model.dto.UpdatePrivacyZoneRequest; import net.javahippie.fitpub.model.dto.UpdatePrivacyZoneRequest;
import org.operaton.fitpub.model.entity.PrivacyZone; import net.javahippie.fitpub.model.entity.PrivacyZone;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.PrivacyZoneService; import net.javahippie.fitpub.service.PrivacyZoneService;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

View file

@ -1,11 +1,11 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.TimelineActivityDTO; import net.javahippie.fitpub.model.dto.TimelineActivityDTO;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.TimelineService; import net.javahippie.fitpub.service.TimelineService;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

View file

@ -1,19 +1,21 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.dto.AccountDeletionRequest; import net.javahippie.fitpub.model.dto.AccountDeletionRequest;
import org.operaton.fitpub.model.dto.ActorDTO; import net.javahippie.fitpub.model.dto.ActorDTO;
import org.operaton.fitpub.model.dto.UserDTO; import net.javahippie.fitpub.model.dto.UserDTO;
import org.operaton.fitpub.model.dto.UserUpdateRequest; import net.javahippie.fitpub.model.dto.UserUpdateRequest;
import org.operaton.fitpub.model.entity.Follow; import net.javahippie.fitpub.model.entity.Follow;
import org.operaton.fitpub.model.entity.RemoteActor; import net.javahippie.fitpub.model.entity.RemoteActor;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.FollowRepository; import net.javahippie.fitpub.repository.FollowRepository;
import org.operaton.fitpub.repository.RemoteActorRepository; import net.javahippie.fitpub.repository.RemoteActorRepository;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.operaton.fitpub.service.UserService; import net.javahippie.fitpub.service.FederationService;
import net.javahippie.fitpub.service.WebFingerClient;
import net.javahippie.fitpub.service.UserService;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@ -42,8 +44,8 @@ public class UserController {
private final UserRepository userRepository; private final UserRepository userRepository;
private final FollowRepository followRepository; private final FollowRepository followRepository;
private final RemoteActorRepository remoteActorRepository; private final RemoteActorRepository remoteActorRepository;
private final org.operaton.fitpub.service.WebFingerClient webFingerClient; private final WebFingerClient webFingerClient;
private final org.operaton.fitpub.service.FederationService federationService; private final FederationService federationService;
private final UserService userService; private final UserService userService;
@Value("${fitpub.base-url}") @Value("${fitpub.base-url}")

View file

@ -1,10 +1,10 @@
package org.operaton.fitpub.controller; package net.javahippie.fitpub.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.model.activitypub.WebFingerResponse; import net.javahippie.fitpub.model.activitypub.WebFingerResponse;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.operaton.fitpub.repository.UserRepository; import net.javahippie.fitpub.repository.UserRepository;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.exception; package net.javahippie.fitpub.exception;
/** /**
* Exception thrown when FIT file processing fails. * Exception thrown when FIT file processing fails.

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.exception; package net.javahippie.fitpub.exception;
/** /**
* Base exception for GPX file processing errors. * Base exception for GPX file processing errors.

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.exception; package net.javahippie.fitpub.exception;
/** /**
* Exception thrown when a FIT file is invalid or corrupted. * Exception thrown when a FIT file is invalid or corrupted.

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.exception; package net.javahippie.fitpub.exception;
/** /**
* Exception thrown when a GPX file fails validation. * Exception thrown when a GPX file fails validation.

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.exception; package net.javahippie.fitpub.exception;
/** /**
* Exception thrown when an uploaded file format is not supported. * Exception thrown when an uploaded file format is not supported.

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.activitypub; package net.javahippie.fitpub.model.activitypub;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import net.javahippie.fitpub.model.entity.User;
import java.util.List; import java.util.List;
@ -41,7 +42,7 @@ public class Actor {
/** /**
* Creates an Actor from a User entity. * Creates an Actor from a User entity.
*/ */
public static Actor fromUser(org.operaton.fitpub.model.entity.User user, String baseUrl) { public static Actor fromUser(User user, String baseUrl) {
String actorUri = user.getActorUri(baseUrl); String actorUri = user.getActorUri(baseUrl);
return Actor.builder() return Actor.builder()

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.activitypub; package net.javahippie.fitpub.model.activitypub;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.activitypub; package net.javahippie.fitpub.model.activitypub;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.activitypub; package net.javahippie.fitpub.model.activitypub;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.activitypub; package net.javahippie.fitpub.model.activitypub;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -6,15 +6,13 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.LineString; import org.locationtech.jts.geom.LineString;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.Activity;
import org.operaton.fitpub.model.entity.PrivacyZone; import net.javahippie.fitpub.model.entity.PrivacyZone;
import org.operaton.fitpub.service.TrackPrivacyFilter; import net.javahippie.fitpub.service.TrackPrivacyFilter;
import org.operaton.fitpub.util.ActivityFormatter; import net.javahippie.fitpub.util.ActivityFormatter;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@ -59,6 +57,9 @@ public class ActivityDTO {
private String subSport; // SubSport field from FIT file (e.g., INDOOR_CYCLING, TREADMILL) private String subSport; // SubSport field from FIT file (e.g., INDOOR_CYCLING, TREADMILL)
private String indoorDetectionMethod; // How indoor flag was determined private String indoorDetectionMethod; // How indoor flag was determined
// Race/competition flag
private Boolean race; // True if activity is a race/competition (uses total time for pace calculation)
// Social interaction counts (populated separately) // Social interaction counts (populated separately)
private Long likesCount; private Long likesCount;
private Long commentsCount; private Long commentsCount;
@ -151,6 +152,9 @@ public class ActivityDTO {
builder.subSport(activity.getSubSport()); builder.subSport(activity.getSubSport());
builder.indoorDetectionMethod(activity.getIndoorDetectionMethod()); builder.indoorDetectionMethod(activity.getIndoorDetectionMethod());
// Race flag
builder.race(activity.getRace() != null ? activity.getRace() : false);
return builder.build(); return builder.build();
} }
@ -232,6 +236,7 @@ public class ActivityDTO {
.indoor(activity.getIndoor() != null ? activity.getIndoor() : false) .indoor(activity.getIndoor() != null ? activity.getIndoor() : false)
.subSport(activity.getSubSport()) .subSport(activity.getSubSport())
.indoorDetectionMethod(activity.getIndoorDetectionMethod()) .indoorDetectionMethod(activity.getIndoorDetectionMethod())
.race(activity.getRace() != null ? activity.getRace() : false)
.build(); .build();
} }
@ -277,6 +282,9 @@ public class ActivityDTO {
builder.subSport(activity.getSubSport()); builder.subSport(activity.getSubSport());
builder.indoorDetectionMethod(activity.getIndoorDetectionMethod()); builder.indoorDetectionMethod(activity.getIndoorDetectionMethod());
// Race flag
builder.race(activity.getRace() != null ? activity.getRace() : false);
return builder.build(); return builder.build();
} }

View file

@ -1,10 +1,10 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.ActivityMetrics; import net.javahippie.fitpub.model.entity.ActivityMetrics;
import java.math.BigDecimal; import java.math.BigDecimal;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
@ -6,7 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.Activity;
/** /**
* Request DTO for updating activity metadata. * Request DTO for updating activity metadata.
@ -26,4 +26,6 @@ public class ActivityUpdateRequest {
@NotNull(message = "Visibility is required") @NotNull(message = "Visibility is required")
private Activity.Visibility visibility; private Activity.Visibility visibility;
private Boolean race; // Race/competition flag
} }

View file

@ -1,12 +1,11 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.Activity;
/** /**
* Request DTO for uploading a new activity. * Request DTO for uploading a new activity.

View file

@ -1,11 +1,11 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.RemoteActor; import net.javahippie.fitpub.model.entity.RemoteActor;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import java.time.Instant; import java.time.Instant;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;

View file

@ -1,10 +1,10 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.Comment; import net.javahippie.fitpub.model.entity.Comment;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.UUID; import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,10 +1,10 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.UserHeatmapGrid; import net.javahippie.fitpub.model.entity.UserHeatmapGrid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View file

@ -1,10 +1,10 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.Like; import net.javahippie.fitpub.model.entity.Like;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.UUID; import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,10 +1,10 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.Notification; import net.javahippie.fitpub.model.entity.Notification;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.UUID; import java.util.UUID;

View file

@ -1,10 +1,10 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.PrivacyZone; import net.javahippie.fitpub.model.entity.PrivacyZone;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.UUID; import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;

View file

@ -1,13 +1,14 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.ActivityMetrics;
import org.operaton.fitpub.model.entity.RemoteActivity; import net.javahippie.fitpub.model.entity.Activity;
import org.operaton.fitpub.model.entity.RemoteActor; import net.javahippie.fitpub.model.entity.RemoteActivity;
import net.javahippie.fitpub.model.entity.RemoteActor;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
@ -63,6 +64,9 @@ public class TimelineActivityDTO {
private String subSport; // SubSport field from FIT file (e.g., INDOOR_CYCLING, TREADMILL) private String subSport; // SubSport field from FIT file (e.g., INDOOR_CYCLING, TREADMILL)
private String indoorDetectionMethod; // How indoor flag was determined private String indoorDetectionMethod; // How indoor flag was determined
// Race/competition flag
private Boolean race; // True if activity is a race/competition
// Metrics summary // Metrics summary
private ActivityMetricsSummary metrics; private ActivityMetricsSummary metrics;
@ -93,6 +97,7 @@ public class TimelineActivityDTO {
.indoor(activity.getIndoor() != null ? activity.getIndoor() : false) .indoor(activity.getIndoor() != null ? activity.getIndoor() : false)
.subSport(activity.getSubSport()) .subSport(activity.getSubSport())
.indoorDetectionMethod(activity.getIndoorDetectionMethod()) .indoorDetectionMethod(activity.getIndoorDetectionMethod())
.race(activity.getRace() != null ? activity.getRace() : false)
.metrics(activity.getMetrics() != null ? ActivityMetricsSummary.fromMetrics(activity.getMetrics()) : null) .metrics(activity.getMetrics() != null ? ActivityMetricsSummary.fromMetrics(activity.getMetrics()) : null)
.build(); .build();
} }
@ -155,7 +160,7 @@ public class TimelineActivityDTO {
private Long movingTimeSeconds; private Long movingTimeSeconds;
private Long stoppedTimeSeconds; private Long stoppedTimeSeconds;
public static ActivityMetricsSummary fromMetrics(org.operaton.fitpub.model.entity.ActivityMetrics metrics) { public static ActivityMetricsSummary fromMetrics(ActivityMetrics metrics) {
return ActivityMetricsSummary.builder() return ActivityMetricsSummary.builder()
.averageHeartRate(metrics.getAverageHeartRate()) .averageHeartRate(metrics.getAverageHeartRate())
.maxHeartRate(metrics.getMaxHeartRate()) .maxHeartRate(metrics.getMaxHeartRate())

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,10 +1,10 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.UUID; import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.dto; package net.javahippie.fitpub.model.dto;
import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Min;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import io.hypersistence.utils.hibernate.type.json.JsonBinaryType; import io.hypersistence.utils.hibernate.type.json.JsonBinaryType;
import jakarta.persistence.*; import jakarta.persistence.*;
@ -130,6 +130,14 @@ public class Activity {
@Column(name = "indoor_detection_method", length = 20) @Column(name = "indoor_detection_method", length = 20)
private String indoorDetectionMethod; private String indoorDetectionMethod;
/**
* Indicates if this is a race/competition activity.
* Race activities use total time for pace calculation instead of moving time.
*/
@Column(name = "race", nullable = false)
@Builder.Default
private Boolean race = false;
@OneToOne(mappedBy = "activity", cascade = CascadeType.ALL, orphanRemoval = true) @OneToOne(mappedBy = "activity", cascade = CascadeType.ALL, orphanRemoval = true)
private ActivityMetrics metrics; private ActivityMetrics metrics;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import io.hypersistence.utils.hibernate.type.json.JsonBinaryType; import io.hypersistence.utils.hibernate.type.json.JsonBinaryType;
import jakarta.persistence.*; import jakarta.persistence.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.model.entity; package net.javahippie.fitpub.model.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.Achievement; import net.javahippie.fitpub.model.entity.Achievement;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.ActivityMetrics; import net.javahippie.fitpub.model.entity.ActivityMetrics;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.Activity; import net.javahippie.fitpub.model.entity.Activity;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.ActivitySummary; import net.javahippie.fitpub.model.entity.ActivitySummary;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.BatchImportFileResult; import net.javahippie.fitpub.model.entity.BatchImportFileResult;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.BatchImportJob; import net.javahippie.fitpub.model.entity.BatchImportJob;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.Comment; import net.javahippie.fitpub.model.entity.Comment;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.Follow; import net.javahippie.fitpub.model.entity.Follow;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;

View file

@ -1,10 +1,8 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.Like; import net.javahippie.fitpub.model.entity.Like;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.Notification; import net.javahippie.fitpub.model.entity.Notification;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.PersonalRecord; import net.javahippie.fitpub.model.entity.PersonalRecord;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.PrivacyZone; import net.javahippie.fitpub.model.entity.PrivacyZone;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.RemoteActivity; import net.javahippie.fitpub.model.entity.RemoteActivity;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.RemoteActor; import net.javahippie.fitpub.model.entity.RemoteActor;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.TrainingLoad; import net.javahippie.fitpub.model.entity.TrainingLoad;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;

View file

@ -1,7 +1,7 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.locationtech.jts.geom.Point; import org.locationtech.jts.geom.Point;
import org.operaton.fitpub.model.entity.UserHeatmapGrid; import net.javahippie.fitpub.model.entity.UserHeatmapGrid;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.User; import net.javahippie.fitpub.model.entity.User;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
@ -8,7 +8,6 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;

View file

@ -1,6 +1,6 @@
package org.operaton.fitpub.repository; package net.javahippie.fitpub.repository;
import org.operaton.fitpub.model.entity.WeatherData; import net.javahippie.fitpub.model.entity.WeatherData;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View file

@ -1,8 +1,8 @@
package org.operaton.fitpub.scheduler; package net.javahippie.fitpub.scheduler;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.operaton.fitpub.service.BatchImportService; import net.javahippie.fitpub.service.BatchImportService;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.security; package net.javahippie.fitpub.security;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.security; package net.javahippie.fitpub.security;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.security; package net.javahippie.fitpub.security;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;

View file

@ -1,4 +1,4 @@
package org.operaton.fitpub.security; package net.javahippie.fitpub.security;
import io.jsonwebtoken.*; import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys; import io.jsonwebtoken.security.Keys;

Some files were not shown because too many files have changed in this diff Show more