mirror of
https://github.com/2martens/tsw-timetable.git
synced 2026-10-17 07:57:55 +02:00
change: Allow overwriting BahnTimetable
This commit is contained in:
+1
-1
@@ -14,7 +14,7 @@ import java.time.Instant
|
|||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
@Document
|
@Document
|
||||||
@CompoundIndex(def = "{'userId': 1, 'routeId': 1, 'eva': 1, 'fetchedDateTime': 1}", unique = true)
|
@CompoundIndex(def = "{'userId': 1, 'routeId': 1, 'eva': 1, 'fetchedDateTime': 1}")
|
||||||
data class ScheduledFetchTask(
|
data class ScheduledFetchTask(
|
||||||
var userId: UserId,
|
var userId: UserId,
|
||||||
var routeId: RouteId,
|
var routeId: RouteId,
|
||||||
|
|||||||
+9
@@ -4,9 +4,18 @@ import de.twomartens.timetable.bahnApi.model.Eva
|
|||||||
import de.twomartens.timetable.bahnApi.model.db.BahnTimetable
|
import de.twomartens.timetable.bahnApi.model.db.BahnTimetable
|
||||||
import de.twomartens.timetable.types.HourAtDay
|
import de.twomartens.timetable.types.HourAtDay
|
||||||
import org.bson.types.ObjectId
|
import org.bson.types.ObjectId
|
||||||
|
import org.springframework.data.domain.ExampleMatcher
|
||||||
import org.springframework.data.mongodb.repository.MongoRepository
|
import org.springframework.data.mongodb.repository.MongoRepository
|
||||||
|
|
||||||
// TODO: figure out what ID type should be
|
// TODO: figure out what ID type should be
|
||||||
interface BahnTimetableRepository : MongoRepository<BahnTimetable, ObjectId> {
|
interface BahnTimetableRepository : MongoRepository<BahnTimetable, ObjectId> {
|
||||||
fun findByEvaAndHourAtDay(eva: Eva, hourAtDay: HourAtDay): BahnTimetable?
|
fun findByEvaAndHourAtDay(eva: Eva, hourAtDay: HourAtDay): BahnTimetable?
|
||||||
|
|
||||||
|
fun getExampleMatcher(): ExampleMatcher {
|
||||||
|
return ExampleMatcher.matching()
|
||||||
|
.withMatcher("userId", ExampleMatcher.GenericPropertyMatchers.exact())
|
||||||
|
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatchers.exact())
|
||||||
|
.withMatcher("eva", ExampleMatcher.GenericPropertyMatchers.exact())
|
||||||
|
.withMatcher("hourAtDay", ExampleMatcher.GenericPropertyMatchers.exact())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+12
-1
@@ -12,6 +12,7 @@ import de.twomartens.timetable.model.db.Station
|
|||||||
import de.twomartens.timetable.model.repository.StationRepository
|
import de.twomartens.timetable.model.repository.StationRepository
|
||||||
import de.twomartens.timetable.types.HourAtDay
|
import de.twomartens.timetable.types.HourAtDay
|
||||||
import org.mapstruct.factory.Mappers
|
import org.mapstruct.factory.Mappers
|
||||||
|
import org.springframework.data.domain.Example
|
||||||
import org.springframework.data.mongodb.core.BulkOperations
|
import org.springframework.data.mongodb.core.BulkOperations
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate
|
import org.springframework.data.mongodb.core.MongoTemplate
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
@@ -91,7 +92,17 @@ open class BahnDatabaseService(
|
|||||||
|
|
||||||
fun storeTimetable(timetable: BahnTimetable, userId: UserId, routeId: RouteId,
|
fun storeTimetable(timetable: BahnTimetable, userId: UserId, routeId: RouteId,
|
||||||
hourAtDay: HourAtDay) {
|
hourAtDay: HourAtDay) {
|
||||||
bahnTimetableRepository.save(bahnTimetableMapper.mapToDB(timetable, userId, routeId, hourAtDay))
|
val matcher = bahnTimetableRepository.getExampleMatcher()
|
||||||
|
val dbTimetable = bahnTimetableMapper.mapToDB(timetable, userId, routeId, hourAtDay)
|
||||||
|
val existingTimetable = bahnTimetableRepository.findOne(Example.of(dbTimetable, matcher))
|
||||||
|
existingTimetable
|
||||||
|
.map {
|
||||||
|
it.stops = dbTimetable.stops
|
||||||
|
it.station = dbTimetable.station
|
||||||
|
it
|
||||||
|
}
|
||||||
|
.orElse(dbTimetable)
|
||||||
|
bahnTimetableRepository.save(dbTimetable)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
Reference in New Issue
Block a user