My customer provides race management for cross country and track and field meets. They are in need of a way to post (near) real-time timing for these events to their website. There are two different ways to time/score an event.
1. near real-time: the software will save the results to a csv. The time is configurable, so it can save every 5 seconds.
2. post event: some events are manually scored/time and entered into meet management software after the race is completed.
Directory Watcher (client side): this application is responsible for watching a directory for file changes. When a "file changed" event is fired, the system will parse the csv file and make a rest call to the server passing in the event and result information. This application will be started via command line with the directory to watch. It will continue to run until the user terminates the program. They system needs to make sure to no process the file while it is waiting for a response from the previous "save".
Post Event Parsing (client side): This application is responsible for parsing the data after an event is entered into the meet management software. The format of these files are in html. The html file contains a <pre> tag where the data is stored. The race data is in a fixed length format. The software will parse the html document looking for the <pre> tag, then parse the fixed length format. There are X number of different fixed lenght formats. The application will need to be able to parse all types.
API (Server Side): The server side application is responsible for the API. It will receive requests from the client (with the meet results) in JSON format, parse the JSON, and persist the results in the database. If results were previously saved, they will be overwritten.
Public User Interface (Server Side): This web application is responsible for retrieving and displaying the meet information from the database. There will 3 pages: list of meets, events for the selected meet, and results for the selected event.
Secured User Interface (Server Side): this web application is responsible for managing the meets and results. The admin will be able to create new or update meets. In addition, it will need to be able to maintain admin users.
All components must be written in java using JDK 8.x and be cloud ready (cloudfoundry, heroku, etc)
The client side will be core java and spring core for dependency inject. Parsing the fixedlength and csv data will utilize the flatpack library. It will use spring rest template for calling the API from the client applications.
The user interface will utilize spring mvc, spring core, spring data along with thymeleaf for templating (not JSP). The database will be mongodb.
The API and user interface will the same web application.
Unit testing is required for the java components. We can agree upon an acceptable % of code coverage later.