Remove 3rd dimension of POST data by directly accessing request data - a simple EpisodeActions array has to be posted now. This way the api is closer to gpodder.
Additionally, removed EpisodeAction upload as String, so it's now incompatible with older versions
Parsing EpisodeActions from String can lead to problems if the String is changed by only a little bits.
Additionally, the gpodder api describes the upload as Array.
Uploading EpisodeActions as String is still possible.
EpisodeAction/create now can deal with multiple EpisodeActions inside a single EpisodeAction string, they will be processed one after another.
For this EpisodeActionReader->fromString() now returns an array of EpisodeActions.
EpisodeActionReader created (or appended to) file actionreader.log in Nextcloud base folder (with index.php & occ). This concluded in a Nextcloud warning about "additional files in Nextcloud folder" in the self-check feature.
createDateTimeFromTimestamp interpreted 0 as timestamp as a mistake while 0 is a valid timestamp.
The fix checks if timestamp is null (not defined/initialized), so that 0 is treated as a correct timestamp.
Reverting the change of format of the timestamp that gets saved into episode_action table.
Reason: The 'T' was in there so that the timestamp format is like AntennaPod's timestamp format.
Use UTC timestamp for episode actions instead of the timezone used by the AntennaPod app.
Correct conversion should be assured because the AntennaPod timestamp includes a timezone identifier (T).
Also slightly change the output format for the DateTime-timestamp to equal other timestamp formats.
persist and list with database
create episodeAction list reponse (with mocked timestamp, started and total)
create episodeActions with received values
update existing episodeActions by unique episode link
receive and store subscription changes
deal with multiple subscription changes in single request
split database into subdirectories
only return subscription changes younger then passed parameter since
parse passed timestamp
parse passed timestamp for episode_actions listing
only return list of urls for subscription changes
align list endpoint naming schema
store userId with episode actions and subscriptions
return json object on application root route