Merge branch 'feat/tgu-slots-filters' into 'dev'

fix(tgu-ui): таблица слотов — слить виток/цикл, секунды в начале, длительность

See merge request 2-6/2-6-4/missionis/observatio-terrae!3
This commit is contained in:
Дмитрий Соловьев
2026-06-17 11:17:08 +00:00
51 changed files with 4658 additions and 255 deletions
@@ -0,0 +1,28 @@
package space.nstart.pcp.pcp_types_lib.dto.requests.slots
import space.nstart.pcp.pcp_types_lib.dto.ballistics.RevolutionSign
import java.time.LocalDateTime
/**
* Забронированный слот для отображения и снятия брони (GET /api/slots/booking/by-request/{id}).
*
* В отличие от [SlotDTO] несёт [bookedSlotId] — он нужен фронту, чтобы снимать бронь по списку id
* (DELETE /api/slots/booking/batch). В отличие от [BookedSlotDTO] несёт контур и координаты — нужны
* карте. Критично: [cycle] — это цикл БРОНИ (BookedSlotEntity.cycle), а не базовый slot.cycle,
* иначе ключ sat:slotNum:cycle на фронте не совпадёт с ответом POST booking/request.
*/
class BookedSlotViewDTO(
val bookedSlotId : Long = 0,
val cycle : Long = 0,
val satelliteId : Long = 0,
val tn : LocalDateTime,
val tk : LocalDateTime,
val roll : Double,
val contour : String,
val revolution : Long = 0,
val revolutionSign: RevolutionSign = RevolutionSign.ASC,
val slotNumber : Long = 0,
val state : SlotStatus = SlotStatus.BOOKED,
val latitude : Double = 0.0,
val longitude : Double = 0.0,
)
@@ -3,7 +3,7 @@ package space.nstart.pcp.pcp_types_lib.dto.requests.slots
import space.nstart.pcp.pcp_types_lib.dto.ballistics.RevolutionSign
import java.time.LocalDateTime
class SlotDTO(
data class SlotDTO(
val cycle : Long = 0,
val satelliteId : Long = 0,
val tn : LocalDateTime,
@@ -16,4 +16,7 @@ class SlotDTO(
val state : SlotStatus = SlotStatus.AVAILABLE,
val latitude : Double = 0.0,
val longitude : Double = 0.0,
// Держатели слота — заполняются только для BUSY-слотов в обзорном request-cover (all=true).
// null/пусто для AVAILABLE/BOOKED и для всех прочих путей (обратно совместимо).
val holders : List<SlotHolderDTO>? = null,
)
@@ -0,0 +1,12 @@
package space.nstart.pcp.pcp_types_lib.dto.requests.slots
/**
* Держатель занятого (BUSY) слота — заявка, чья бронь блокирует слот на этом проходе КА.
* Заполняется только в обзорном ответе request-cover (all=true); name/importance могут быть null,
* если request-service недоступен (деградация — бейдж показывает только идентификатор заявки).
*/
data class SlotHolderDTO(
val requestId: String,
val name: String? = null,
val importance: Double? = null,
)