DefaultSpeedingViolationCalculator.cs 1.1 KB

123456789101112131415161718192021222324252627282930
  1. namespace TrafficControlService.DomainServices;
  2. public class DefaultSpeedingViolationCalculator : ISpeedingViolationCalculator
  3. {
  4. private readonly string _roadId;
  5. private readonly int _sectionLengthInKm;
  6. private readonly int _maxAllowedSpeedInKmh;
  7. private readonly int _legalCorrectionInKmh;
  8. public DefaultSpeedingViolationCalculator(string roadId, int sectionLengthInKm, int maxAllowedSpeedInKmh, int legalCorrectionInKmh)
  9. {
  10. _roadId = roadId;
  11. _sectionLengthInKm = sectionLengthInKm;
  12. _maxAllowedSpeedInKmh = maxAllowedSpeedInKmh;
  13. _legalCorrectionInKmh = legalCorrectionInKmh;
  14. }
  15. public int DetermineSpeedingViolationInKmh(DateTime entryTimestamp, DateTime exitTimestamp)
  16. {
  17. double elapsedMinutes = exitTimestamp.Subtract(entryTimestamp).TotalSeconds; // 1 sec. == 1 min. in simulation
  18. double avgSpeedInKmh = Math.Round((_sectionLengthInKm / elapsedMinutes) * 60);
  19. int violation = Convert.ToInt32(avgSpeedInKmh - _maxAllowedSpeedInKmh - _legalCorrectionInKmh);
  20. return violation;
  21. }
  22. public string GetRoadId()
  23. {
  24. return _roadId;
  25. }
  26. }