WIP: Submit transcoding jobs via a HTTP API #6

Draft
ansv7779 wants to merge 22 commits from api-submission into master
8 changed files with 35 additions and 8 deletions
Showing only changes of commit 0064149d79 - Show all commits

View File

@ -32,12 +32,13 @@ public class JDBCTranscriptionRepository implements TranscriptionRepository {
@Override
public void save(Transcription transcription) {
jdbcClient.sql("""
INSERT INTO transcriptions (id, owner, callback_uri, output_format)
VALUES (:id, :owner, :callback_uri, :output_format)
INSERT INTO transcriptions (id, owner, callback_uri, language, output_format)
VALUES (:id, :owner, :callback_uri, :language, :output_format)
""")
.param("id", transcription.id())
.param("owner", transcription.owner().getName())
.param("callback_uri", transcription.callbackUri().toString())
.param("language", transcription.language())
.param("output_format", transcription.outputFormat().name())
.update();
}
@ -45,7 +46,7 @@ public class JDBCTranscriptionRepository implements TranscriptionRepository {
@Override
public Optional<Transcription> findByOwnerAndId(Principal owner, UUID uuid) {
return jdbcClient.sql("""
SELECT id, owner, callback_uri, output_format
SELECT id, owner, callback_uri, language, output_format
FROM transcriptions
WHERE id = :id AND owner = :owner
""")
@ -140,7 +141,7 @@ public class JDBCTranscriptionRepository implements TranscriptionRepository {
@Override
public List<Transcription> getProcessingTranscriptions() {
return jdbcClient.sql("""
SELECT id, owner, callback_uri, output_format
SELECT id, owner, callback_uri, language, output_format
FROM transcriptions
WHERE notification_success = FALSE
AND id IN (
@ -245,8 +246,9 @@ public class JDBCTranscriptionRepository implements TranscriptionRepository {
UUID id = UUID.fromString(rs.getString("id"));
Principal owner = new SimplePrincipal(rs.getString("owner"));
URI callbackUri = URI.create(rs.getString("callback_uri"));
String language = rs.getString("language");
OutputFormat outputFormat = OutputFormat.valueOf(rs.getString("output_format"));
return new Transcription(id, owner, callbackUri, outputFormat);
return new Transcription(id, owner, callbackUri, language, outputFormat);
}
}

View File

@ -58,9 +58,13 @@ public class ApiController {
@RequestBody CreateTranscriptionRequest createTranscriptionRequest)
{
try {
if (createTranscriptionRequest.language() != null && createTranscriptionRequest.language().length() != 2) {
throw new InvalidLanguage(createTranscriptionRequest.language());
}
URI callbackUri = new URI(createTranscriptionRequest.callback());
OutputFormat outputFormat = parseOutputFormat(createTranscriptionRequest.outputFormat());
CreateTranscription createTranscription = new CreateTranscription(owner, callbackUri, outputFormat);
CreateTranscription createTranscription = new CreateTranscription(owner, callbackUri,
createTranscriptionRequest.language(), outputFormat);
Transcription transcription = transcriptionService.createTranscription(createTranscription);
return new TranscriptionCreatedResponse(transcription.id());
} catch (URISyntaxException e) {

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
public record CreateTranscriptionRequest(
@JsonProperty(value = "callback", required = true) String callback,
@JsonProperty(value = "language") String language,
@JsonProperty(value = "outputformat", required = true) String outputFormat)
{
}

View File

@ -0,0 +1,15 @@
package se.su.dsv.whisperapi.api;
import org.springframework.http.HttpStatus;
import org.springframework.web.ErrorResponseException;
import java.net.URI;
public class InvalidLanguage extends ErrorResponseException {
public InvalidLanguage(String language) {
super(HttpStatus.BAD_REQUEST);
setType(URI.create("https://gitea.dsv.su.se/DMC/whisper-frontend/wiki/Errors#invalid-language"));
setTitle("Invalid language");
setDetail("The language '" + language + "' is not supported, it must be a valid two-letter ISO-639-1 code.");
}
}

View File

@ -3,5 +3,5 @@ package se.su.dsv.whisperapi.core;
import java.net.URI;
import java.security.Principal;
public record CreateTranscription(Principal owner, URI callbackUri, OutputFormat outputFormat) {
public record CreateTranscription(Principal owner, URI callbackUri, String language, OutputFormat outputFormat) {
}

View File

@ -4,5 +4,5 @@ import java.net.URI;
import java.security.Principal;
import java.util.UUID;
public record Transcription(UUID id, Principal owner, URI callbackUri, OutputFormat outputFormat) {
public record Transcription(UUID id, Principal owner, URI callbackUri, String language, OutputFormat outputFormat) {
}

View File

@ -40,6 +40,7 @@ public class TranscriptionService {
id,
createTranscription.owner(),
createTranscription.callbackUri(),
createTranscription.language(),
createTranscription.outputFormat());
transcriptionRepository.save(transcription);
return transcription;
@ -83,6 +84,7 @@ public class TranscriptionService {
record WhisperJob(
@JsonProperty("jobfile") String absolutePathToFileToBeTranscribed,
@JsonProperty("language") String language,
@JsonProperty("outputformat") String outputFormat,
@JsonProperty("origin") String origin,
@JsonProperty("callback") String callbackUri)
@ -90,6 +92,7 @@ public class TranscriptionService {
}
WhisperJob whisperJob = new WhisperJob(
fileToBeTranscribed.toAbsolutePath().toString(),
transcription.language(),
toWhisperFormat(transcription.outputFormat()),
transcription.owner().getName(),
callbackUri.toString());

View File

@ -0,0 +1,2 @@
ALTER TABLE `transcriptions`
ADD COLUMN `language` CHAR(2);