WIP: Submit transcoding jobs via a HTTP API #6
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
15
src/main/java/se/su/dsv/whisperapi/api/InvalidLanguage.java
Normal file
15
src/main/java/se/su/dsv/whisperapi/api/InvalidLanguage.java
Normal 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.");
|
||||||
|
}
|
||||||
|
}
|
@ -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) {
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
2
src/main/resources/db/migration/V7__language.sql
Normal file
2
src/main/resources/db/migration/V7__language.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE `transcriptions`
|
||||||
|
ADD COLUMN `language` CHAR(2);
|
Loading…
x
Reference in New Issue
Block a user