[AB-82] adding youtube video search

This commit is contained in:
Sheldan
2021-03-28 23:29:51 +02:00
parent 9541f907b8
commit c2b413e4b9
31 changed files with 1979 additions and 1 deletions

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>webservices</artifactId>
<version>1.2.5-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>webservices-int</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.webservices.config;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import lombok.Getter;
@Getter
public enum WebserviceFeatureDefinition implements FeatureDefinition {
YOUTUBE("youtube");
private String key;
WebserviceFeatureDefinition(String key) {
this.key = key;
}
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.webservices.youtube.config;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.webservices.config.WebserviceFeatureDefinition;
import org.springframework.stereotype.Component;
@Component
public class YoutubeFeatureConfig implements FeatureConfig {
@Override
public FeatureDefinition getFeature() {
return WebserviceFeatureDefinition.YOUTUBE;
}
}

View File

@@ -0,0 +1,27 @@
package dev.sheldan.abstracto.webservices.youtube.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
import dev.sheldan.abstracto.webservices.youtube.model.exception.YoutubeAPIExceptionModel;
public class YoutubeAPIException extends AbstractoRunTimeException implements Templatable {
private final YoutubeAPIExceptionModel model;
public YoutubeAPIException(Throwable throwable) {
this.model = YoutubeAPIExceptionModel
.builder()
.exception(throwable)
.build();
}
@Override
public String getTemplateName() {
return "webservices_youtube_api_exception";
}
@Override
public Object getTemplateModel() {
return model;
}
}

View File

@@ -0,0 +1,17 @@
package dev.sheldan.abstracto.webservices.youtube.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class YoutubeVideoNotFoundException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "webservices_youtube_video_not_found_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,23 @@
package dev.sheldan.abstracto.webservices.youtube.model;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.math.BigInteger;
import java.time.Duration;
import java.time.Instant;
@Getter
@Setter
@Builder
public class YoutubeVideo {
private String url;
private BigInteger views;
private Instant publishedAt;
private Duration duration;
private String channelTitle;
private BigInteger likes;
private BigInteger dislikes;
private BigInteger commentCount;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.webservices.youtube.model.command;
import dev.sheldan.abstracto.core.models.context.SlimUserInitiatedServerContext;
import dev.sheldan.abstracto.webservices.youtube.model.YoutubeVideo;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
@Getter
@SuperBuilder
@Setter
public class YoutubeVideoSearchCommandModel extends SlimUserInitiatedServerContext {
private YoutubeVideo video;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.webservices.youtube.model.exception;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
@Builder
public class YoutubeAPIExceptionModel implements Serializable {
private Throwable exception;
}

View File

@@ -0,0 +1,7 @@
package dev.sheldan.abstracto.webservices.youtube.service;
import dev.sheldan.abstracto.webservices.youtube.model.YoutubeVideo;
public interface YoutubeSearchService {
YoutubeVideo searchOneVideoForQuery(String query);
}

View File

@@ -0,0 +1,7 @@
package dev.sheldan.abstracto.webservices.youtube.service;
import dev.sheldan.abstracto.webservices.youtube.model.YoutubeVideo;
public interface YoutubeVideoService {
YoutubeVideo getVideoInfo(String id);
}