@@ -344,7 +344,9 @@ async fn search(
344
344
Json ( SearchPayload { object, query, dry } ) : Json < SearchPayload > ,
345
345
) -> Result < Json < serde_json:: Value > > {
346
346
let roles: HashSet < BuiltinRole > = match object. as_str ( ) {
347
- "track" | "operationalpoint" | "signal" => HashSet :: from ( [ BuiltinRole :: InfraRead ] ) ,
347
+ "track" | "operationalpoint" | "signal" | "trainschedule" => {
348
+ HashSet :: from ( [ BuiltinRole :: InfraRead ] )
349
+ }
348
350
"project" | "study" | "scenario" => HashSet :: from ( [ BuiltinRole :: OpsRead ] ) ,
349
351
_ => {
350
352
return Err ( SearchApiError :: ObjectType {
@@ -683,6 +685,47 @@ pub(super) struct SearchResultItemScenario {
683
685
tags : Vec < String > ,
684
686
}
685
687
688
+ #[ derive( Search , Serialize , ToSchema ) ]
689
+ #[ search(
690
+ table = "train_schedule" ,
691
+ column( name = "timetable_id" , data_type = "integer" ) ,
692
+ column( name = "train_name" , data_type = "string" )
693
+ ) ]
694
+ #[ allow( unused) ]
695
+ /// A search result item for a query with `object = "trainschedule"`
696
+ pub ( super ) struct SearchResultItemTrainSchedule {
697
+ #[ search( sql = "train_schedule.id" ) ]
698
+ id : u64 ,
699
+ #[ search( sql = "train_schedule.train_name" ) ]
700
+ train_name : String , // useless puisqu'on en a besoin pour la request?
701
+ #[ search( sql = "train_schedule.labels" ) ]
702
+ labels : Vec < String > ,
703
+ #[ search( sql = "train_schedule.rolling_stock_name" ) ]
704
+ rolling_stock_name : String ,
705
+ #[ search( sql = "train_schedule.timetable_id" ) ]
706
+ timetable_id : u64 , // useless puisqu'on en a besoin pour la request?
707
+ #[ search( sql = "train_schedule.start_time" ) ]
708
+ start_time : String ,
709
+ #[ search( sql = "train_schedule.schedule" ) ]
710
+ schedule : Vec < String > ,
711
+ #[ search( sql = "train_schedule.margins" ) ]
712
+ margins : Vec < String > ,
713
+ #[ search( sql = "train_schedule.initial_speed" ) ]
714
+ initial_speed : f64 ,
715
+ #[ search( sql = "train_schedule.comfort" ) ]
716
+ comfort : i16 ,
717
+ #[ search( sql = "train_schedule.path" ) ]
718
+ path : Vec < String > ,
719
+ #[ search( sql = "train_schedule.constraint_distribution" ) ]
720
+ constraint_distribution : i16 ,
721
+ #[ search( sql = "train_schedule.speed_limit_tag" ) ]
722
+ speed_limit_tag : Vec < String > ,
723
+ #[ search( sql = "train_schedule.power_restrictions" ) ]
724
+ power_restrictions : Vec < String > ,
725
+ #[ search( sql = "train_schedule.options" ) ]
726
+ options : Vec < String > ,
727
+ }
728
+
686
729
/// See [editoast_search::SearchConfigStore::find]
687
730
#[ derive( SearchConfigStore ) ]
688
731
#[ search_config_store(
@@ -692,5 +735,6 @@ pub(super) struct SearchResultItemScenario {
692
735
object( name = "project" , config = SearchResultItemProject ) ,
693
736
object( name = "study" , config = SearchResultItemStudy ) ,
694
737
object( name = "scenario" , config = SearchResultItemScenario ) ,
738
+ object( name = "trainschedule" , config = SearchResultItemTrainSchedule ) ,
695
739
) ]
696
740
pub struct SearchConfigFinder ;
0 commit comments