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 @Override
public void save(Transcription transcription) { public void save(Transcription transcription) {
jdbcClient.sql(""" jdbcClient.sql("""
INSERT INTO transcriptions (id, owner, callback_uri, output_format) INSERT INTO transcriptions (id, owner, callback_uri, language, output_format)
VALUES (:id, :owner, :callback_uri, :output_format) VALUES (:id, :owner, :callback_uri, :language, :output_format)
""") """)
.param("id", transcription.id()) .param("id", transcription.id())
.param("owner", transcription.owner().getName()) .param("owner", transcription.owner().getName())
.param("callback_uri", transcription.callbackUri().toString()) .param("callback_uri", transcription.callbackUri().toString())
.param("language", transcription.language())
.param("output_format", transcription.outputFormat().name()) .param("output_format", transcription.outputFormat().name())
.update(); .update();
} }
@ -45,7 +46,7 @@ public class JDBCTranscriptionRepository implements TranscriptionRepository {
@Override @Override
public Optional<Transcription> findByOwnerAndId(Principal owner, UUID uuid) { public Optional<Transcription> findByOwnerAndId(Principal owner, UUID uuid) {
return jdbcClient.sql(""" return jdbcClient.sql("""
SELECT id, owner, callback_uri, output_format SELECT id, owner, callback_uri, language, output_format
FROM transcriptions FROM transcriptions
WHERE id = :id AND owner = :owner WHERE id = :id AND owner = :owner
""") """)
@ -140,7 +141,7 @@ public class JDBCTranscriptionRepository implements TranscriptionRepository {
@Override @Override
public List<Transcription> getProcessingTranscriptions() { public List<Transcription> getProcessingTranscriptions() {
return jdbcClient.sql(""" return jdbcClient.sql("""
SELECT id, owner, callback_uri, output_format SELECT id, owner, callback_uri, language, output_format
FROM transcriptions FROM transcriptions
WHERE notification_success = FALSE WHERE notification_success = FALSE
AND id IN ( AND id IN (
@ -245,8 +246,9 @@ public class JDBCTranscriptionRepository implements TranscriptionRepository {
UUID id = UUID.fromString(rs.getString("id")); UUID id = UUID.fromString(rs.getString("id"));
Principal owner = new SimplePrincipal(rs.getString("owner")); Principal owner = new SimplePrincipal(rs.getString("owner"));
URI callbackUri = URI.create(rs.getString("callback_uri")); URI callbackUri = URI.create(rs.getString("callback_uri"));
String language = rs.getString("language");
OutputFormat outputFormat = OutputFormat.valueOf(rs.getString("output_format")); 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) @RequestBody CreateTranscriptionRequest createTranscriptionRequest)
{ {
try { try {
if (createTranscriptionRequest.language() != null && createTranscriptionRequest.language().length() != 2) {
throw new InvalidLanguage(createTranscriptionRequest.language());
}
URI callbackUri = new URI(createTranscriptionRequest.callback()); URI callbackUri = new URI(createTranscriptionRequest.callback());
OutputFormat outputFormat = parseOutputFormat(createTranscriptionRequest.outputFormat()); 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); Transcription transcription = transcriptionService.createTranscription(createTranscription);
return new TranscriptionCreatedResponse(transcription.id()); return new TranscriptionCreatedResponse(transcription.id());
} catch (URISyntaxException e) { } catch (URISyntaxException e) {

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
public record CreateTranscriptionRequest( public record CreateTranscriptionRequest(
@JsonProperty(value = "callback", required = true) String callback, @JsonProperty(value = "callback", required = true) String callback,
@JsonProperty(value = "language") String language,
@JsonProperty(value = "outputformat", required = true) String outputFormat) @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.net.URI;
import java.security.Principal; 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.security.Principal;
import java.util.UUID; 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, id,
createTranscription.owner(), createTranscription.owner(),
createTranscription.callbackUri(), createTranscription.callbackUri(),
createTranscription.language(),
createTranscription.outputFormat()); createTranscription.outputFormat());
transcriptionRepository.save(transcription); transcriptionRepository.save(transcription);
return transcription; return transcription;
@ -83,6 +84,7 @@ public class TranscriptionService {
record WhisperJob( record WhisperJob(
@JsonProperty("jobfile") String absolutePathToFileToBeTranscribed, @JsonProperty("jobfile") String absolutePathToFileToBeTranscribed,
@JsonProperty("language") String language,
@JsonProperty("outputformat") String outputFormat, @JsonProperty("outputformat") String outputFormat,
@JsonProperty("origin") String origin, @JsonProperty("origin") String origin,
@JsonProperty("callback") String callbackUri) @JsonProperty("callback") String callbackUri)
@ -90,6 +92,7 @@ public class TranscriptionService {
} }
WhisperJob whisperJob = new WhisperJob( WhisperJob whisperJob = new WhisperJob(
fileToBeTranscribed.toAbsolutePath().toString(), fileToBeTranscribed.toAbsolutePath().toString(),
transcription.language(),
toWhisperFormat(transcription.outputFormat()), toWhisperFormat(transcription.outputFormat()),
transcription.owner().getName(), transcription.owner().getName(),
callbackUri.toString()); callbackUri.toString());

View File

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