@@ -30,14 +30,34 @@ public function rules(): array
3030 return [
3131 'origin ' => ['required ' , 'string ' , 'max:255 ' ],
3232 'destination ' => ['required ' , 'string ' , 'max:255 ' , 'different:origin ' ],
33- 'departure_time ' => ['required ' , 'date ' , ' after:now ' ],
34- 'arrival_time ' => ['required ' , 'date ' , ' after:departure_time ' ],
33+ 'departure_time ' => ['required ' , 'date_format:H:i ' ],
34+ 'arrival_time ' => ['required ' , 'date_format:H:i ' ],
3535 'price ' => ['required ' , 'numeric ' , 'min:0 ' , 'max:9999.99 ' ],
3636 'bus_id ' => ['required ' , 'integer ' , 'exists:buses,id ' ],
3737 'is_active ' => ['nullable ' , 'boolean ' ],
3838 ];
3939 }
4040
41+ /**
42+ * Configure the validator instance.
43+ */
44+ public function withValidator (\Illuminate \Validation \Validator $ validator ): void
45+ {
46+ $ validator ->after (function ($ validator ): void {
47+ $ departureTime = $ this ->input ('departure_time ' );
48+ $ arrivalTime = $ this ->input ('arrival_time ' );
49+
50+ if ($ departureTime && $ arrivalTime ) {
51+ $ departure = \Carbon \Carbon::createFromFormat ('H:i ' , $ departureTime );
52+ $ arrival = \Carbon \Carbon::createFromFormat ('H:i ' , $ arrivalTime );
53+
54+ if ($ arrival ->lte ($ departure )) {
55+ $ validator ->errors ()->add ('arrival_time ' , 'The arrival time must be after the departure time. ' );
56+ }
57+ }
58+ });
59+ }
60+
4161 /**
4262 * Convert the request data to a TripData DTO.
4363 */
0 commit comments