feat(markers): auto-delete after 8 hours
This commit is contained in:
@@ -6,10 +6,14 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface MarkerRepository extends JpaRepository<Marker, Long> {
|
||||
@Query("SELECT m FROM Marker m WHERE m.user = ?1")
|
||||
List<Marker> findByUser(User user);
|
||||
|
||||
@Query("SELECT m FROM Marker m WHERE m.timestamp <= ?1")
|
||||
List<Marker> findAllBefore(Instant time);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,9 @@ import com.ddf.vodsystem.exceptions.MarkerNotFound;
|
||||
import com.ddf.vodsystem.exceptions.NotAuthenticated;
|
||||
import com.ddf.vodsystem.exceptions.NotStreaming;
|
||||
import com.ddf.vodsystem.repositories.MarkerRepository;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.Instant;
|
||||
@@ -20,6 +23,9 @@ public class MarkerService {
|
||||
private final StreamService streamService;
|
||||
private final MarkerRepository markerRepository;
|
||||
|
||||
@Value("${stream.max-length}")
|
||||
private Long maxStreamLength;
|
||||
|
||||
public MarkerService(UserService userService, StreamService streamService, MarkerRepository markerRepository) {
|
||||
this.userService = userService;
|
||||
this.streamService = streamService;
|
||||
@@ -65,4 +71,12 @@ public class MarkerService {
|
||||
marker.setTimestamp(Instant.now());
|
||||
return markerRepository.saveAndFlush(marker);
|
||||
}
|
||||
|
||||
@Scheduled(fixedDelay = 360_000)
|
||||
@Transactional
|
||||
public void deleteOldMarkers() {
|
||||
Instant cutoff = Instant.now().minusSeconds(maxStreamLength);
|
||||
List<Marker> stale = markerRepository.findAllBefore(cutoff);
|
||||
markerRepository.deleteAllInBatch(stale);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user