From f2d9403685bb4d00a8b0d4ae5b480685a62ddddd Mon Sep 17 00:00:00 2001 From: Rob Date: Mon, 10 Jun 2019 13:33:37 -0400 Subject: [PATCH] Removing unused code. Adding docker file --- Dockerfile | 9 + .../nibl/api/ApplicationConfiguration.java | 62 --- .../anilist/controller/AnilistController.java | 63 --- .../nibl/api/anilist/domain/AccessToken.java | 75 --- .../com/nibl/api/anilist/domain/Airing.java | 44 -- .../com/nibl/api/anilist/domain/Episode.java | 108 ----- .../com/nibl/api/anilist/domain/Season.java | 117 ----- .../com/nibl/api/anilist/domain/Series.java | 304 ------------ .../anilist/service/AnilistApiService.java | 147 ------ .../HentaiverseMonsterController.java | 89 ---- .../nibl/api/hentaiverse/domain/Monster.java | 435 ------------------ .../hentaiverse/domain/MonsterCondition.java | 58 --- .../api/hentaiverse/domain/MonsterOrder.java | 5 - .../repository/MonsterRepository.java | 18 - .../schedule/MonsterRefreshCache.java | 26 -- .../service/MonsterCacheService.java | 39 -- .../hentaiverse/service/MonsterService.java | 348 -------------- .../com/nibl/api/hentaiverse/views/Views.java | 11 - src/main/resources/application.properties | 7 +- 19 files changed, 12 insertions(+), 1953 deletions(-) create mode 100644 Dockerfile delete mode 100644 src/main/java/com/nibl/api/anilist/controller/AnilistController.java delete mode 100644 src/main/java/com/nibl/api/anilist/domain/AccessToken.java delete mode 100644 src/main/java/com/nibl/api/anilist/domain/Airing.java delete mode 100644 src/main/java/com/nibl/api/anilist/domain/Episode.java delete mode 100644 src/main/java/com/nibl/api/anilist/domain/Season.java delete mode 100644 src/main/java/com/nibl/api/anilist/domain/Series.java delete mode 100644 src/main/java/com/nibl/api/anilist/service/AnilistApiService.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/controller/HentaiverseMonsterController.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/domain/Monster.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/domain/MonsterCondition.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/domain/MonsterOrder.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/repository/MonsterRepository.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/schedule/MonsterRefreshCache.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/service/MonsterCacheService.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/service/MonsterService.java delete mode 100644 src/main/java/com/nibl/api/hentaiverse/views/Views.java diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..81cee52 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM maven:3.5-jdk-8 AS build +COPY src /usr/src/app/src +COPY pom.xml /usr/src/app +RUN mvn -f /usr/src/app/pom.xml clean package + +FROM gcr.io/distroless/java +COPY --from=build /usr/src/app/target/nibl-api.jar /usr/app/nibl-api.jar + +ENTRYPOINT ["java","-jar","/usr/app/nibl-api.jar"] diff --git a/src/main/java/com/nibl/api/ApplicationConfiguration.java b/src/main/java/com/nibl/api/ApplicationConfiguration.java index 9b56270..6758828 100644 --- a/src/main/java/com/nibl/api/ApplicationConfiguration.java +++ b/src/main/java/com/nibl/api/ApplicationConfiguration.java @@ -1,16 +1,7 @@ package com.nibl.api; -import java.util.ArrayList; -import java.util.List; - -import org.apache.catalina.connector.Connector; -import org.apache.commons.lang3.StringUtils; -import org.apache.coyote.http11.Http11NioProtocol; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; -import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; @@ -22,59 +13,6 @@ public class ApplicationConfiguration { private static Logger log = LoggerFactory.getLogger(ApplicationConfiguration.class); - public class EmbeddedTomcatConfiguration { - - @Value("${server.additionalPorts}") - private String additionalPorts; - - @Value("${server.ssl.key-store}") - private String absoluteKeyStore; - - @Value("${server.ssl.key-store-password}") - private String keystorePass; - - @Value("${server.ssl.keyStoreType}") - private String keystoreType; - - @Value("${server.ssl.keyAlias}") - private String keyAlias; - - @Bean - public EmbeddedServletContainerFactory servletContainer() { - TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(); - Connector[] additionalConnectors = this.additionalConnector(); - if (additionalConnectors != null && additionalConnectors.length > 0) { - tomcat.addAdditionalTomcatConnectors(additionalConnectors); - } - return tomcat; - } - - private Connector[] additionalConnector() { - if (StringUtils.isBlank(this.additionalPorts)) { - return null; - } - String[] ports = this.additionalPorts.split(","); - List result = new ArrayList<>(); - for (String port : ports) { - Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); - Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); - - connector.setScheme("https"); - connector.setPort(Integer.valueOf(port)); - connector.setSecure(true); - - protocol.setSSLEnabled(true); - protocol.setKeystoreFile(absoluteKeyStore); - protocol.setKeystorePass(keystorePass); - protocol.setKeystoreType(keystoreType); - protocol.setKeyAlias(keyAlias); - - result.add(connector); - } - return result.toArray(new Connector[] {}); - } - } - @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { diff --git a/src/main/java/com/nibl/api/anilist/controller/AnilistController.java b/src/main/java/com/nibl/api/anilist/controller/AnilistController.java deleted file mode 100644 index 899ed47..0000000 --- a/src/main/java/com/nibl/api/anilist/controller/AnilistController.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.nibl.api.anilist.controller; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.PathParam; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.fasterxml.jackson.annotation.JsonView; -import com.nibl.api.anilist.domain.Season; -import com.nibl.api.anilist.domain.Series; -import com.nibl.api.anilist.service.AnilistApiService; -import com.nibl.api.util.ContentResponse; -import com.nibl.api.util.ErrorResponse; -import com.nibl.api.xdcc.controller.BotController; -import com.nibl.api.xdcc.view.Views; - -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; - -@RestController -@RequestMapping(value = "anilist", produces = MediaType.APPLICATION_JSON_VALUE) -public class AnilistController { - - private static Logger log = LoggerFactory.getLogger(BotController.class); - - @Autowired - AnilistApiService aniListApi; - - @JsonView(Views.Bot.class) - @ApiOperation(value = "Series By Season", nickname = "seriesBySeason") - @ApiResponses( - value = { - @ApiResponse(code = 200, message = "Good", response = Series.class, responseContainer = "List"), - @ApiResponse(code = 400, message = "Invalid parameters", response = ErrorResponse.class) - } - ) - @RequestMapping(method = RequestMethod.GET, value = "/series/season") - public ContentResponse> aniListTest( - @PathParam("year") - @RequestParam(value = "year", required = true) Integer year, - @PathParam("season") - @ApiParam(required = true, allowableValues = "winter, spring, summer, fall") - @RequestParam(value = "season", required = true) String seasonName, - HttpServletRequest request) { - log.debug("Enter /series/season. " + request.getQueryString()); - Season season = new Season(); - season.setYear(year); - season.setSeasonName(seasonName); - return new ContentResponse>(aniListApi.fetchAllSeries(season)); - } - -} diff --git a/src/main/java/com/nibl/api/anilist/domain/AccessToken.java b/src/main/java/com/nibl/api/anilist/domain/AccessToken.java deleted file mode 100644 index 1561608..0000000 --- a/src/main/java/com/nibl/api/anilist/domain/AccessToken.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.nibl.api.anilist.domain; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.Date; - -/** - * Created by Brandon Risberg on 2/16/2016. - *

- * Pojo representing a timed access token acquired from AniList.co - */ -public class AccessToken { - @JsonProperty("access_token") - private String accessToken; - - @JsonProperty("token_type") - private String tokenType; - - private Date expires; - - @JsonProperty("expires_in") - private int expiresIn; - - private Date created; - - public String getAccessToken() { - return accessToken; - } - - public void setAccessToken(String accessToken) { - this.accessToken = accessToken; - } - - public String getTokenType() { - return tokenType; - } - - public void setTokenType(String tokenType) { - this.tokenType = tokenType; - } - - public Date getExpires() { - return expires; - } - - public void setExpires(Date expires) { - this.expires = expires; - } - - public int getExpiresIn() { - return expiresIn; - } - - public void setExpiresIn(int expiresIn) { - this.expiresIn = expiresIn; - } - - public Date getCreated() { - return created; - } - - public void setCreated(Date created) { - this.created = created; - } - - @Override - public String toString() { - return "AniListAccessToken{" + - "accessToken='" + accessToken + '\'' + - ", tokenType='" + tokenType + '\'' + - ", expires=" + expires + - ", expiresIn=" + expiresIn + - '}'; - } -} diff --git a/src/main/java/com/nibl/api/anilist/domain/Airing.java b/src/main/java/com/nibl/api/anilist/domain/Airing.java deleted file mode 100644 index fc73049..0000000 --- a/src/main/java/com/nibl/api/anilist/domain/Airing.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.nibl.api.anilist.domain; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; - -@JsonIgnoreProperties(ignoreUnknown = true) -public class Airing { - - @JsonProperty("time") - private String time; - - @JsonProperty("countdown") - private Integer countdown; - - @JsonProperty("next_episode") - private Integer nextEpisode; - - public String getTime() { - return time; - } - - public void setTime(String time) { - this.time = time; - } - - public Integer getCountdown() { - return countdown; - } - - public void setCountdown(Integer countdown) { - this.countdown = countdown; - } - - public Integer getNextEpisode() { - return nextEpisode; - } - - public void setNextEpisode(Integer nextEpisode) { - this.nextEpisode = nextEpisode; - } - - - -} diff --git a/src/main/java/com/nibl/api/anilist/domain/Episode.java b/src/main/java/com/nibl/api/anilist/domain/Episode.java deleted file mode 100644 index 67dacdc..0000000 --- a/src/main/java/com/nibl/api/anilist/domain/Episode.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.nibl.api.anilist.domain; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.Date; - -/** - * Series have a title, start and end dates and the season in which they aired. - * - * @author Brandon Risberg - * @since 2/16/2016 - */ -@JsonIgnoreProperties(ignoreUnknown = true) -public class Episode { - - private String title; - - @JsonProperty("next_episode") - private int episodeIndex; - - @JsonProperty("time") - private Date airDate; - - private Season season; - - private int weekIndex; - - private Series series; - - public Episode() { - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public int getEpisodeIndex() { - return episodeIndex; - } - - public void setEpisodeIndex(int episodeIndex) { - this.episodeIndex = episodeIndex; - } - - public Date getAirDate() { - return airDate; - } - - public void setAirDate(Date airDate) { - this.airDate = airDate; - } - - public Season getSeason() { - return season; - } - - public void setSeason(Season season) { - this.season = season; - } - - public int getWeekIndex() { - return weekIndex; - } - - public void setWeekIndex(int weekIndex) { - this.weekIndex = weekIndex; - } - - public Series getSeries() { - return series; - } - - public void setSeries(Series series) { - this.series = series; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Episode)) return false; - - Episode series = (Episode) o; - - return title.equals(series.title); - - } - - @Override - public int hashCode() { - return title.hashCode(); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - - sb.append("Episode[index="); - sb.append(episodeIndex); - sb.append("]"); - - return sb.toString(); - } -} \ No newline at end of file diff --git a/src/main/java/com/nibl/api/anilist/domain/Season.java b/src/main/java/com/nibl/api/anilist/domain/Season.java deleted file mode 100644 index ce34778..0000000 --- a/src/main/java/com/nibl/api/anilist/domain/Season.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.nibl.api.anilist.domain; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -/** - * Surveys have a title, and a start and end date. They have a one-to-many with Series that aired during this season. - * - * @author Brandon Risberg - * @since 2/16/2016 - */ -public class Season { - - private String title; - - private String seasonName; // summer, fall, winter, spring - - private int year; // eg. 2015 - - private Date startDate; - - private Date endDate; - - private List seriesList; - - /** - * Constructor - */ - public Season() { - seriesList = new ArrayList(); - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getSeasonName() { - return seasonName; - } - - public void setSeasonName(String seasonName) { - this.seasonName = seasonName; - } - - public int getYear() { - return year; - } - - public void setYear(int year) { - this.year = year; - } - - public Date getStartDate() { - return startDate; - } - - public void setStartDate(Date startDate) { - this.startDate = startDate; - } - - public Date getEndDate() { - return endDate; - } - - public void setEndDate(Date endDate) { - this.endDate = endDate; - } - - public List getSeriesList() { - return seriesList; - } - - public void setSeriesList(List seriesList) { - this.seriesList = seriesList; - } - - public Date getStartDateByWeekIndex(int weekIndex) { - Date startDate = getStartDate(); - - Calendar c = Calendar.getInstance(); - - for (int i = 1; i < weekIndex; i++) { - c.setTime(startDate); - c.add(Calendar.WEEK_OF_YEAR, 1); - startDate = c.getTime(); - } - - return startDate; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Season)) return false; - - Season season = (Season) o; - - return title.equals(season.title); - - } - - @Override - public int hashCode() { - return title.hashCode(); - } - - @Override - public String toString() { - return title; // must be just title, because this is used in FilterGrid drop-down - } -} \ No newline at end of file diff --git a/src/main/java/com/nibl/api/anilist/domain/Series.java b/src/main/java/com/nibl/api/anilist/domain/Series.java deleted file mode 100644 index d29329b..0000000 --- a/src/main/java/com/nibl/api/anilist/domain/Series.java +++ /dev/null @@ -1,304 +0,0 @@ -package com.nibl.api.anilist.domain; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.sql.Timestamp; -import java.util.List; - -/** - * Series have a title, start and end dates and the season in which they aired. - * - * @author Brandon Risberg - * @since 2/16/2016 - */ -@JsonIgnoreProperties(ignoreUnknown = true) -public class Series { - - @JsonProperty("id") - private Integer id; - - @JsonProperty("title_romaji") - private String rom_title; - - @JsonProperty("title_english") - private String eng_title; - - @JsonProperty("title_japanese") - private String jap_title; - - @JsonProperty("type") - private String type; - - @JsonProperty("start_date_fuzzy") - private Timestamp startDateFuzzy; - - @JsonProperty("end_date_fuzzy") - private Timestamp endDateFuzzy; - - @JsonProperty("season") - private Integer season; - - @JsonProperty("series_type") - private String seriesType; - - @JsonProperty("synonyms") - private List synonyms; - - @JsonProperty("genres") - private List genres; - - @JsonProperty("adult") - private Boolean adult; - - @JsonProperty("average_score") - private Double averageScore; - - @JsonProperty("popularity") - private Integer popularity; - - @JsonProperty("updated_at") - private Timestamp updatedAt; - - @JsonProperty("hashtag") - private String hashtag; - - @JsonProperty("image_url_sml") - private String imageUrlSml; - - @JsonProperty("image_url_med") - private String imageUrlMed; - - @JsonProperty("image_url_lge") - private String imageUrlLge; - - @JsonProperty("image_url_banner") - private String imageUrlBanner; - - @JsonProperty("total_episodes") - private Integer totalEpisodes; - - @JsonProperty("airing_status") - private String airingStatus; - - @JsonProperty("airing") - private Airing airing; - - public Series() { - - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getRom_title() { - return rom_title; - } - - public void setRom_title(String rom_title) { - this.rom_title = rom_title; - } - - public String getEng_title() { - return eng_title; - } - - public void setEng_title(String eng_title) { - this.eng_title = eng_title; - } - - public String getJap_title() { - return jap_title; - } - - public void setJap_title(String jap_title) { - this.jap_title = jap_title; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public Timestamp getStartDateFuzzy() { - return startDateFuzzy; - } - - public void setStartDateFuzzy(Timestamp startDateFuzzy) { - this.startDateFuzzy = startDateFuzzy; - } - - public Timestamp getEndDateFuzzy() { - return endDateFuzzy; - } - - public void setEndDateFuzzy(Timestamp endDateFuzzy) { - this.endDateFuzzy = endDateFuzzy; - } - - public Integer getSeason() { - return season; - } - - public void setSeason(Integer season) { - this.season = season; - } - - public String getSeriesType() { - return seriesType; - } - - public void setSeriesType(String seriesType) { - this.seriesType = seriesType; - } - - public List getSynonyms() { - return synonyms; - } - - public void setSynonyms(List synonyms) { - this.synonyms = synonyms; - } - - public List getGenres() { - return genres; - } - - public void setGenres(List genres) { - this.genres = genres; - } - - public Boolean getAdult() { - return adult; - } - - public void setAdult(Boolean adult) { - this.adult = adult; - } - - public Double getAverageScore() { - return averageScore; - } - - public void setAverageScore(Double averageScore) { - this.averageScore = averageScore; - } - - public Integer getPopularity() { - return popularity; - } - - public void setPopularity(Integer popularity) { - this.popularity = popularity; - } - - public Timestamp getUpdatedAt() { - return updatedAt; - } - - public void setUpdatedAt(Timestamp updatedAt) { - this.updatedAt = updatedAt; - } - - public String getHashtag() { - return hashtag; - } - - public void setHashtag(String hashtag) { - this.hashtag = hashtag; - } - - public String getImageUrlSml() { - return imageUrlSml; - } - - public void setImageUrlSml(String imageUrlSml) { - this.imageUrlSml = imageUrlSml; - } - - public String getImageUrlMed() { - return imageUrlMed; - } - - public void setImageUrlMed(String imageUrlMed) { - this.imageUrlMed = imageUrlMed; - } - - public String getImageUrlLge() { - return imageUrlLge; - } - - public void setImageUrlLge(String imageUrlLge) { - this.imageUrlLge = imageUrlLge; - } - - public String getImageUrlBanner() { - return imageUrlBanner; - } - - public void setImageUrlBanner(String imageUrlBanner) { - this.imageUrlBanner = imageUrlBanner; - } - - public Integer getTotalEpisodes() { - return totalEpisodes; - } - - public void setTotalEpisodes(Integer totalEpisodes) { - this.totalEpisodes = totalEpisodes; - } - - public String getAiringStatus() { - return airingStatus; - } - - public void setAiringStatus(String airingStatus) { - this.airingStatus = airingStatus; - } - - public Airing getAiring() { - return airing; - } - - public void setAiring(Airing airing) { - this.airing = airing; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (!(o instanceof Series)) - return false; - - Series series = (Series) o; - - return eng_title.equals(series.eng_title); - - } - - @Override - public int hashCode() { - return eng_title.hashCode(); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - - sb.append("Series[title="); - sb.append(eng_title); - sb.append("]"); - - return sb.toString(); - } - -} \ No newline at end of file diff --git a/src/main/java/com/nibl/api/anilist/service/AnilistApiService.java b/src/main/java/com/nibl/api/anilist/service/AnilistApiService.java deleted file mode 100644 index 6e2cccd..0000000 --- a/src/main/java/com/nibl/api/anilist/service/AnilistApiService.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.nibl.api.anilist.service; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.nibl.api.anilist.domain.AccessToken; -import com.nibl.api.anilist.domain.Season; -import com.nibl.api.anilist.domain.Series; - -import org.apache.commons.lang3.time.DateUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import java.io.*; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Date; -import java.util.List; - -@Component("AniList") -public class AnilistApiService { - - private static final Logger logger = LoggerFactory.getLogger(AnilistApiService.class); - - @Value("${nibl.anilist.id}") - private String CLIENT_ID; - @Value("${nibl.anilist.secret}") - private String CLIENT_SECRET; - - private AccessToken token = null; - - private AccessToken getAccessToken() { - - if( null != token && DateUtils.addSeconds(token.getCreated(), token.getExpiresIn()).after(new Date()) ) { - return token; - } - - String url = "https://anilist.co/api/auth/access_token"; - - URL obj; - try { - // TODO consolidate HTTP connections - obj = new URL(url); - HttpURLConnection con = (HttpURLConnection) obj.openConnection(); - - // set request params with my client info on AniList.co/settings/developer - con.setRequestMethod("POST"); - con.setRequestProperty("User-Agent", "NIBL"); - con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); - - // hard coded client credentials for now - String urlParameters = "grant_type=client_credentials&client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET; - - // Send post request - con.setDoOutput(true); - con.setDoInput(true); - OutputStream os = con.getOutputStream(); - BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); - wr.write(urlParameters); - wr.flush(); - wr.close(); - os.close(); - - int responseCode = con.getResponseCode(); - - logger.info("\nSending 'POST' request to URL : " + url + " . Param: " + urlParameters); - logger.info("Response Code : " + responseCode); - - BufferedReader in = new BufferedReader( - new InputStreamReader(con.getInputStream())); - String inputLine; - StringBuilder responseBuffer = new StringBuilder(); - - while ((inputLine = in.readLine()) != null) { - responseBuffer.append(inputLine); - } - in.close(); - - ObjectMapper mapper = new ObjectMapper(); - - token = mapper.readValue(responseBuffer.toString(), AccessToken.class); - - token.setCreated(new Date()); - - } catch (Exception e) { - logger.error(e.toString()); - } - - return token; - - } - - - public List fetchAllSeries(Season season) { - AccessToken accessToken = getAccessToken(); - - String url = "https://anilist.co/api/browse/anime?access_token=" + accessToken.getAccessToken() - + "&year=" + season.getYear() - + "&season=" + season.getSeasonName() - + "&type=Tv" - + "&airing_data=true" - + "&full_page=true"; - - try { - // TODO consolidate HTTP connections - URL obj = new URL(url); - HttpURLConnection con = (HttpURLConnection) obj.openConnection(); - - // optional default is GET - con.setRequestMethod("GET"); - - //add request header - con.setRequestProperty("User-Agent", "NIBL"); - - int responseCode = con.getResponseCode(); - - - logger.info("\nSending 'GET' request to URL : " + url); - logger.info("Response Code : " + responseCode); - - - BufferedReader in = new BufferedReader( - new InputStreamReader(con.getInputStream())); - String inputLine; - StringBuffer responseBuffer = new StringBuffer(); - - while ((inputLine = in.readLine()) != null) { - responseBuffer.append(inputLine); - } - in.close(); - - // Set up the ObjectMapper to map an array of series into an array of objects. - ObjectMapper mapper = new ObjectMapper(); - List seriesList = mapper.readValue(responseBuffer.toString(), new TypeReference>() {}); - - return seriesList; - } catch (Exception e) - - { - logger.error(e.toString()); - } - - return null; - } - -} diff --git a/src/main/java/com/nibl/api/hentaiverse/controller/HentaiverseMonsterController.java b/src/main/java/com/nibl/api/hentaiverse/controller/HentaiverseMonsterController.java deleted file mode 100644 index 39e1848..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/controller/HentaiverseMonsterController.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.nibl.api.hentaiverse.controller; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.lang3.ArrayUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.fasterxml.jackson.annotation.JsonView; -import com.nibl.api.hentaiverse.domain.Monster; -import com.nibl.api.hentaiverse.domain.MonsterCondition; -import com.nibl.api.hentaiverse.service.MonsterService; -import com.nibl.api.hentaiverse.views.Views; -import com.nibl.api.util.ContentResponse; -import com.nibl.api.util.ErrorResponse; - -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; - -@RestController -@RequestMapping(value = "hentaiverse", produces = MediaType.APPLICATION_JSON_VALUE) -public class HentaiverseMonsterController { - - private static Logger log = LoggerFactory.getLogger(HentaiverseMonsterController.class); - - @Autowired - MonsterService monsterService; - - @JsonView(Views.FullMonster.class) - @ApiOperation(value = "Get Active HentaiVerse Monsters", nickname = "getActiveMonsters") - @ApiResponses( - value = { @ApiResponse(code = 200, message = "Good", response = Monster.class, responseContainer = "List"), - @ApiResponse(code = 400, message = "Invalid parameters", response = ErrorResponse.class) }) - @RequestMapping(method = RequestMethod.GET, value = "/activemonsters") - public ContentResponse> getMonsters( - @RequestParam(value = "numMonths", required = false, defaultValue = "2") Integer numMonths, - HttpServletRequest request) { - log.debug("Enter /monster. " + request.getQueryString()); - return new ContentResponse>(monsterService.getActiveMonsters(numMonths)); - } - - @JsonView(Views.FullMonster.class) - @ApiOperation(value = "Get All HentaiVerse Monsters", nickname = "getAllMonsters") - @ApiResponses( - value = { @ApiResponse(code = 200, message = "Good", response = Monster.class), - @ApiResponse(code = 400, message = "Invalid parameters", response = ErrorResponse.class) }) - @RequestMapping(method = RequestMethod.POST, value = "/monsters", consumes = MediaType.APPLICATION_JSON_VALUE) - public ContentResponse> getAllMonsters( - @RequestBody List monsterConditions, - HttpServletRequest request) { - return new ContentResponse>(monsterService.getMonsters(monsterConditions)); - } - - @JsonView(Views.FullMonster.class) - @ApiOperation(value = "Get HentaiVerse Monsters by Monster Ids", nickname = "getMonstersByIds") - @ApiResponses( - value = { @ApiResponse(code = 200, message = "Good", response = Monster.class), - @ApiResponse(code = 400, message = "Invalid parameters", response = ErrorResponse.class) }) - @RequestMapping(method = RequestMethod.GET, value = "/monsters/{monsterIds}") - public ContentResponse> getMonsters(@PathVariable Long[] monsterIds, HttpServletRequest request) { - log.debug("Enter /monsters/{monsterIds}. " + ArrayUtils.toString(monsterIds)); - return new ContentResponse>(monsterService.findByMonsterIds(monsterIds)); - } - - @JsonView(Views.Monster.class) - @ApiOperation(value = "Save HentaiVerse Monster", nickname = "saveMonster") - @ApiResponses( - value = { @ApiResponse(code = 200, message = "Good", response = Monster.class), - @ApiResponse(code = 400, message = "Invalid parameters", response = ErrorResponse.class) }) - @RequestMapping(method = RequestMethod.PUT, value = "/monster", consumes = MediaType.APPLICATION_JSON_VALUE) - public ContentResponse setMonster( - @RequestBody Monster monster, - HttpServletRequest request) throws Exception { - log.debug("Enter PUT /monster. " + request.getQueryString()); - return new ContentResponse(monsterService.saveMonster(monster)); - } - -} diff --git a/src/main/java/com/nibl/api/hentaiverse/domain/Monster.java b/src/main/java/com/nibl/api/hentaiverse/domain/Monster.java deleted file mode 100644 index 9b864bb..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/domain/Monster.java +++ /dev/null @@ -1,435 +0,0 @@ -package com.nibl.api.hentaiverse.domain; - -import java.io.IOException; -import java.io.Serializable; -import java.sql.Timestamp; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonView; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.nibl.api.hentaiverse.views.Views; - -import io.swagger.annotations.ApiModelProperty; - -@Entity -@Table(name = "hvmonsterlist", catalog = "hvmonsterlist") -public class Monster implements Serializable { - - private static final long serialVersionUID = 1L; - - // TODO change this to use reflection - public enum MonsterAttributeMapper{ - MONSTERID("monsterid"), - LASTUPDATE("lastupdate"), - MONSTERNAME("monstername"), - MONSTERCLASS("monsterclass"), - PLVL("plvl"), - TRAINER("trainer"), - ATTACK("attack"), - FIRE("fire"), - COLD("cold"), - ELEC("elec"), - WIND("wind"), - HOLY("holy"), - DARK("dark"), - CRUSHING("crushing"), - SLASHING("slashing"), - PIERCING("piercing"); - - private final String attributeName; - - MonsterAttributeMapper(String attributeName) { - this.attributeName = attributeName; - } - - public static MonsterAttributeMapper fromString(String text) { - for (MonsterAttributeMapper b : MonsterAttributeMapper.values()) { - if (b.attributeName.equalsIgnoreCase(text)) { - return b; - } - } - return null; - } - - public Object getValue(Monster m){ - switch( this.attributeName ) { - case "monsterid": - return m.getMonsterId(); - case "lastupdate": - return m.getLastUpdate(); - case "monstername": - return m.getMonsterName(); - case "monsterclass": - return m.getMonsterClass(); - case "plvl": - return m.getPlvl(); - case "trainer": - return m.getTrainer(); - case "attack": - return m.getAttack(); - case "fire": - return m.getFire(); - case "cold": - return m.getCold(); - case "elec": - return m.getElec(); - case "wind": - return m.getWind(); - case "holy": - return m.getHoly(); - case "dark": - return m.getDark(); - case "crushing": - return m.getCrushing(); - case "slashing": - return m.getSlashing(); - case "piercing": - return m.getPiercing(); - } - - return null; - } - } - - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - @JsonView(Views.InternalMonster.class) - @Column(name = "id", nullable = false) - private Long id; - - // ---------------------------------------------------------------------- - // ENTITY DATA FIELDS - // ---------------------------------------------------------------------- - @JsonView(Views.Monster.class) - @Column(name = "monsterid") - private Long monsterId; - - @JsonView(Views.Monster.class) - @Column(name = "monstername") - private String monsterName; - - @JsonView(Views.FullMonster.class) - @Column(name = "class") - private String monsterClass; - - @JsonView(Views.Monster.class) - @Column(name = "plvl") - private Integer plvl; - - @JsonView(Views.Monster.class) - @Column(name = "trainer") - private String trainer; - - @JsonView(Views.Monster.class) - @Column(name = "attack") - private String attack; - - @JsonView(Views.Monster.class) - @Column(name = "fire") - private Integer fire; - - @JsonView(Views.Monster.class) - @Column(name = "cold") - private Integer cold; - - @JsonView(Views.Monster.class) - @Column(name = "elec") - private Integer elec; - - @JsonView(Views.Monster.class) - @Column(name = "wind") - private Integer wind; - - @JsonView(Views.Monster.class) - @Column(name = "holy") - private Integer holy; - - @JsonView(Views.Monster.class) - @Column(name = "dark") - private Integer dark; - - @JsonView(Views.Monster.class) - @Column(name = "crushing") - private Integer crushing; - - @JsonView(Views.Monster.class) - @Column(name = "slashing") - private Integer slashing; - - @JsonView(Views.Monster.class) - @Column(name = "piercing") - private Integer piercing; - - @JsonView(Views.FullMonster.class) - @Column(name = "lastupdate") - @ApiModelProperty(example = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Timestamp lastUpdate; - - @JsonView(Views.FullMonster.class) - @Column(name = "creationdate") - @ApiModelProperty(example = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Timestamp creationDate; - - // ---------------------------------------------------------------------- - // ENTITY LINKS ( RELATIONSHIP ) - // ---------------------------------------------------------------------- - - // ---------------------------------------------------------------------- - // CONSTRUCTOR(S) - // ---------------------------------------------------------------------- - public Monster(Long id, Long monsterId, String monsterName, String monsterClass, Integer plvl, String trainer, - String attack, Integer fire, Integer cold, Integer elec, Integer wind, Integer holy, Integer dark, - Integer crushing, Integer slashing, Integer piercing, Timestamp lastupdate, Timestamp creationdate) { - super(); - this.setId(id); - this.setMonsterId(monsterId); - this.setMonsterName(monsterName); - this.setMonsterClass(monsterClass); - this.setPlvl(plvl); - this.setTrainer(trainer); - this.setAttack(attack); - this.setFire(fire); - this.setCold(cold); - this.setElec(elec); - this.setWind(wind); - this.setHoly(holy); - this.setDark(dark); - this.setCrushing(crushing); - this.setSlashing(slashing); - this.setPiercing(piercing); - this.setLastUpdate(lastupdate); - this.setCreationDate(creationdate); - } - - public Monster() { - super(); - } - - // ---------------------------------------------------------------------- - // GETTER & SETTER FOR THE KEY FIELD - // ---------------------------------------------------------------------- - - public static Monster getUsersFromJsonString(String jsonString) - throws JsonParseException, JsonMappingException, IOException { - ObjectMapper mapper = new ObjectMapper(); - return mapper.readValue(jsonString, Monster.class); - } - - // ---------------------------------------------------------------------- - // GETTERS & SETTERS FOR FIELDS - // ---------------------------------------------------------------------- - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String toJsonString() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(this); - } - - // ---------------------------------------------------------------------- - // GETTERS & SETTERS FOR LINKS - // ---------------------------------------------------------------------- - - public static long getSerialversionuid() { - return serialVersionUID; - } - - public Long getMonsterId() { - return monsterId; - } - - public void setMonsterId(Long monsterId) { - this.monsterId = monsterId; - } - - public String getMonsterName() { - return monsterName; - } - - public void setMonsterName(String monsterName) { - this.monsterName = monsterName; - } - - public String getMonsterClass() { - return monsterClass; - } - - public void setMonsterClass(String monsterClass) { - this.monsterClass = monsterClass; - } - - public Integer getPlvl() { - return plvl; - } - - public void setPlvl(Integer plvl) { - this.plvl = plvl; - } - - public String getTrainer() { - return trainer; - } - - public void setTrainer(String trainer) { - this.trainer = trainer; - } - - public String getAttack() { - return attack; - } - - public void setAttack(String attack) { - this.attack = attack; - } - - public Integer getFire() { - return fire; - } - - public void setFire(Integer fire) { - this.fire = fire; - } - - public Integer getCold() { - return cold; - } - - public void setCold(Integer cold) { - this.cold = cold; - } - - public Integer getElec() { - return elec; - } - - public void setElec(Integer elec) { - this.elec = elec; - } - - public Integer getWind() { - return wind; - } - - public void setWind(Integer wind) { - this.wind = wind; - } - - public Integer getHoly() { - return holy; - } - - public void setHoly(Integer holy) { - this.holy = holy; - } - - public Integer getDark() { - return dark; - } - - public void setDark(Integer dark) { - this.dark = dark; - } - - public Integer getCrushing() { - return crushing; - } - - public void setCrushing(Integer crushing) { - this.crushing = crushing; - } - - public Integer getSlashing() { - return slashing; - } - - public void setSlashing(Integer slashing) { - this.slashing = slashing; - } - - public Integer getPiercing() { - return piercing; - } - - public void setPiercing(Integer piercing) { - this.piercing = piercing; - } - - public Timestamp getLastUpdate() { - return lastUpdate; - } - - public void setLastUpdate(Timestamp lastUpdate) { - this.lastUpdate = lastUpdate; - } - - public Timestamp getCreationDate() { - return creationDate; - } - - public void setCreationDate(Timestamp creationDate) { - this.creationDate = creationDate; - } - - // ---------------------------------------------------------------------- - // toString METHOD - // ---------------------------------------------------------------------- - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append("["); - sb.append(this.getId()); - sb.append("]:"); - sb.append(this.getMonsterId()); - sb.append("|"); - sb.append(this.getMonsterName()); - sb.append("|"); - sb.append(this.getMonsterClass()); - sb.append("|"); - sb.append(this.getPlvl()); - sb.append("|"); - sb.append(this.getTrainer()); - sb.append("|"); - sb.append(this.getAttack()); - sb.append("|"); - sb.append(this.getFire()); - sb.append("|"); - sb.append(this.getCold()); - sb.append("|"); - sb.append(this.getElec()); - sb.append("|"); - sb.append(this.getWind()); - sb.append("|"); - sb.append(this.getHoly()); - sb.append("|"); - sb.append(this.getDark()); - sb.append("|"); - sb.append(this.getCrushing()); - sb.append("|"); - sb.append(this.getSlashing()); - sb.append("|"); - sb.append(this.getPiercing()); - sb.append("|"); - sb.append(this.getLastUpdate()); - sb.append("|"); - sb.append(this.getCreationDate()); - - return sb.toString(); - } - -} diff --git a/src/main/java/com/nibl/api/hentaiverse/domain/MonsterCondition.java b/src/main/java/com/nibl/api/hentaiverse/domain/MonsterCondition.java deleted file mode 100644 index 458ce89..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/domain/MonsterCondition.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.nibl.api.hentaiverse.domain; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -import javax.persistence.Column; -import javax.persistence.Embeddable; - -@Embeddable -public class MonsterCondition implements Serializable { - - private static final long serialVersionUID = 1L; - - @Column(name = "parameter") - private String parameter; - - @Column(name = "condition") - private String condition; - - @Column(name = "values") - private List values; - - public String getParameter() { - return parameter; - } - - public void setParameter(String parameter) { - this.parameter = parameter; - } - - public String getCondition() { - return condition; - } - - public void setCondition(String condition) { - this.condition = condition.toLowerCase(); - } - - public List getValues() { - return values; - } - - public void setValues(List values) { - this.values = values; - } - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(this.getParameter()); - sb.append("|"); - sb.append(this.getCondition()); - sb.append("|"); - sb.append(this.getValues().toString()); - - return sb.toString(); - } -} diff --git a/src/main/java/com/nibl/api/hentaiverse/domain/MonsterOrder.java b/src/main/java/com/nibl/api/hentaiverse/domain/MonsterOrder.java deleted file mode 100644 index 2dafb50..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/domain/MonsterOrder.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.nibl.api.hentaiverse.domain; - -public class MonsterOrder { - -} diff --git a/src/main/java/com/nibl/api/hentaiverse/repository/MonsterRepository.java b/src/main/java/com/nibl/api/hentaiverse/repository/MonsterRepository.java deleted file mode 100644 index bcd8087..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/repository/MonsterRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.nibl.api.hentaiverse.repository; - -import java.util.Set; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.stereotype.Repository; - -import com.nibl.api.hentaiverse.domain.Monster; - -@Repository -public interface MonsterRepository extends JpaRepository { - - // TODO add audit trail for monsters - @Query(value = "SELECT m FROM Monster m") - Set getMonsters(); - -} diff --git a/src/main/java/com/nibl/api/hentaiverse/schedule/MonsterRefreshCache.java b/src/main/java/com/nibl/api/hentaiverse/schedule/MonsterRefreshCache.java deleted file mode 100644 index 0e945fb..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/schedule/MonsterRefreshCache.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.nibl.api.hentaiverse.schedule; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import com.nibl.api.hentaiverse.service.MonsterCacheService; - -@Component("MonsterScheduler") -public class MonsterRefreshCache { - - private static Logger log = LoggerFactory.getLogger(MonsterRefreshCache.class); - - @Autowired - MonsterCacheService monsterCacheService; - - @Scheduled(fixedRateString = "${nibl.cache.refresh.time}") - public void refreshMonsterCache() { - log.info("Start Refresh Monster Cache"); - monsterCacheService.refreshCache(); - log.info("Finish Refresh Monster Cache"); - } - -} diff --git a/src/main/java/com/nibl/api/hentaiverse/service/MonsterCacheService.java b/src/main/java/com/nibl/api/hentaiverse/service/MonsterCacheService.java deleted file mode 100644 index 296c22f..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/service/MonsterCacheService.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.nibl.api.hentaiverse.service; - -import java.util.Set; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.nibl.api.hentaiverse.domain.Monster; -import com.nibl.api.hentaiverse.repository.MonsterRepository; - -@Component("MonsterCache") -public class MonsterCacheService { - - private static Logger log = LoggerFactory.getLogger(MonsterCacheService.class); - - @Autowired - private MonsterRepository monsterRepository; - - // TODO figure out better caching mechanism - private static Set allMonsters = null; - public Set getCache() { - if( allMonsters == null ) { - refreshCache(); - } - return allMonsters; - } - - public void refreshCache() { - log.debug("GETTING ALL MONSTERS FROM DB"); - allMonsters = monsterRepository.getMonsters(); - } - - public void invalidateCache() { - log.debug("INVALIDATE MONSTER CACHE"); - allMonsters = null; - } -} diff --git a/src/main/java/com/nibl/api/hentaiverse/service/MonsterService.java b/src/main/java/com/nibl/api/hentaiverse/service/MonsterService.java deleted file mode 100644 index 52925b9..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/service/MonsterService.java +++ /dev/null @@ -1,348 +0,0 @@ -package com.nibl.api.hentaiverse.service; - -import java.sql.Timestamp; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Set; -import java.util.stream.Collectors; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceUnit; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import com.nibl.api.hentaiverse.domain.Monster; -import com.nibl.api.hentaiverse.domain.Monster.MonsterAttributeMapper; -import com.nibl.api.hentaiverse.domain.MonsterCondition; - -@Component("Monster") -public class MonsterService { - - @PersistenceUnit - private EntityManagerFactory emf; - - private static Logger log = LoggerFactory.getLogger(MonsterService.class); - - @Autowired - MonsterCacheService monsterCacheService; - - @Cacheable("monsters") - public Set getMonsters() { - log.debug("Get all monsters from CacheService"); - return monsterCacheService.getCache(); - } - - public Boolean monsterConditionFilter(Monster monster, List monsterConditions) { - - // This group of conditions must inclusively succeed - for (MonsterCondition monsterCondition : monsterConditions) { - - Object obj = null; - try { - MonsterAttributeMapper m = Monster.MonsterAttributeMapper - .fromString(monsterCondition.getParameter().toLowerCase()); - obj = m.getValue(monster); - } catch (Exception e) { - // Invalid condition passed in, so return false - // TODO move this check further up to determine if parameters are acceptable - return false; - } - - if (obj instanceof String) { - String testValue = obj.toString(); - // String comparison - switch (monsterCondition.getCondition()) { - case ">": - { - Boolean matches = monsterCondition.getValues().stream().anyMatch(p -> testValue.toLowerCase().startsWith(p.toLowerCase())); - if (!matches) { - return false; - } - } - break; - case "<": - { - Boolean matches = monsterCondition.getValues().stream().anyMatch(p -> testValue.toLowerCase().endsWith(p.toLowerCase())); - if (!matches) { - return false; - } - } - break; - case "=": - { - Boolean matches = monsterCondition.getValues().stream().anyMatch(testValue::equalsIgnoreCase); - - if (!matches) { - return false; - } - } - break; - } - - } else if (obj instanceof Integer) { - Integer testValue = (Integer) obj; - - // Integer comparisons - switch (monsterCondition.getCondition()) { - case ">": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> testValue > Integer.parseInt(c)).count() > 0); - if (!matches) { - return false; - } - } - break; - case "<": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> testValue < Integer.parseInt(c)).count() > 0); - if (!matches) { - return false; - } - } - break; - case "=": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> testValue == Integer.parseInt(c)).count() > 0); - if (!matches) { - return false; - } - } - break; - } - - } else if (obj instanceof Long) { - Long testValue = (Long) obj; - - // Integer comparisons - switch (monsterCondition.getCondition()) { - case ">": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> testValue > Long.parseLong(c)).count() > 0); - if (!matches) { - return false; - } - } - break; - case "<": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> testValue < Long.parseLong(c)).count() > 0); - if (!matches) { - return false; - } - } - break; - case "=": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> testValue == Long.parseLong(c)).count() > 0); - if (!matches) { - return false; - } - } - break; - } - - } else if (obj instanceof Timestamp) { - - Timestamp testValue = (Timestamp) obj; - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdfAugment = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - // Integer comparisons - switch (monsterCondition.getCondition()) { - case ">": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> { - try { - try{ - return sdf.parse( sdf.format( testValue ) ).after( sdf.parse(c) ); - } catch (ParseException e) { - return sdf.parse( sdf.format( testValue ) ).after( sdfAugment.parse(c) ); - } - } catch (ParseException e) { - return false; - } - } ).count() > 0); - if (!matches) { - return false; - } - } - break; - case "<": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> { - try { - try{ - return sdf.parse( sdf.format( testValue ) ).before( sdf.parse(c) ); - } catch (ParseException e) { - return sdf.parse( sdf.format( testValue ) ).before( sdfAugment.parse(c) ); - } - } catch (ParseException e) { - return false; - } - }).count() > 0); - if (!matches) { - return false; - } - } - break; - case "=": { - Boolean matches = (monsterCondition.getValues().stream() - .filter(c -> { - try { - try{ - return sdf.parse( sdf.format( testValue ) ).equals( sdf.parse(c) ); - } catch (ParseException e) { - return sdf.parse( sdf.format( testValue ) ).equals( sdfAugment.parse(c) ); - } - } catch (ParseException e) { - return false; - } - }).count() > 0); - if (!matches) { - return false; - } - } - break; - } - - } - - } - - return true; - } - - public List getMonsters(List monsterConditions) { - try{ - return getMonsters().stream().filter(m -> monsterConditionFilter(m, monsterConditions)) - .collect(Collectors.toList()); - } catch(NoSuchElementException e) { - return null; - } - } - - public List getActiveMonsters(Integer numMonths) { - try{ - Timestamp timestamp = Timestamp.valueOf(LocalDateTime.from(LocalDateTime.now()).minusMonths(numMonths)); - return getMonsters().stream().filter(m -> m.getLastUpdate().before(timestamp)).collect(Collectors.toList()); - } catch(NoSuchElementException e) { - return null; - } - } - - public Monster findByMonsterId(Long monsterId) { - log.debug("Get monster #" + monsterId); - try{ - return getMonsters().stream().filter(m -> m.getMonsterId().equals(monsterId) ).findFirst().get(); - } catch(NoSuchElementException e) { - return null; - } - } - - public List findByMonsterIds(Long[] monsterIds) { - try{ - return getMonsters().stream().filter(m -> Arrays.asList(monsterIds).contains(m.getMonsterId())) - .collect(Collectors.toList()); - } catch(NoSuchElementException e) { - return null; - } - } - - @Transactional - public Monster saveMonster(Monster monster) throws Exception { - if (null == monster) { - throw new Exception("No monster passed in"); - } - - Monster localMonster = findByMonsterId(monster.getMonsterId()); - if (null == localMonster) { // If monster doesn't exist, assume this is a new monster - localMonster = new Monster(); - localMonster.setMonsterId(monster.getMonsterId()); - localMonster.setMonsterClass(monster.getMonsterClass()); - localMonster.setCreationDate(Timestamp.valueOf(LocalDateTime.now())); - } - - if (null != monster.getMonsterName()) { - localMonster.setMonsterName(monster.getMonsterName()); - } - - if (null != monster.getPlvl()) { - localMonster.setPlvl(monster.getPlvl()); - } - - if (null != monster.getTrainer()) { - localMonster.setTrainer(monster.getTrainer()); - } - - if (null != monster.getAttack()) { - localMonster.setAttack(monster.getAttack()); - } - - if (null != monster.getFire()) { - localMonster.setFire(monster.getFire()); - } - - if (null != monster.getCold()) { - localMonster.setCold(monster.getCold()); - } - - if (null != monster.getElec()) { - localMonster.setElec(monster.getElec()); - } - - if (null != monster.getWind()) { - localMonster.setWind(monster.getWind()); - } - - if (null != monster.getHoly()) { - localMonster.setHoly(monster.getHoly()); - } - - if (null != monster.getDark()) { - localMonster.setDark(monster.getDark()); - } - - if (null != monster.getCrushing()) { - localMonster.setCrushing(monster.getCrushing()); - } - - if (null != monster.getSlashing()) { - localMonster.setSlashing(monster.getSlashing()); - } - - if (null != monster.getPiercing()) { - localMonster.setPiercing(monster.getPiercing()); - } - - localMonster.setLastUpdate(Timestamp.valueOf(LocalDateTime.now())); - - EntityManager em = emf.createEntityManager(); - em.getTransaction().begin(); - - if (null != localMonster.getId()) { - em.merge(localMonster); // update - } else { - em.persist(localMonster); // create - } - - em.getTransaction().commit(); - em.close(); - - // TODO update cache instead of invalidating - monsterCacheService.invalidateCache(); - - return localMonster; - } -} diff --git a/src/main/java/com/nibl/api/hentaiverse/views/Views.java b/src/main/java/com/nibl/api/hentaiverse/views/Views.java deleted file mode 100644 index 9e6b623..0000000 --- a/src/main/java/com/nibl/api/hentaiverse/views/Views.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.nibl.api.hentaiverse.views; - -public class Views { - - public interface Monster {} - - public interface FullMonster extends Monster {} - - public interface InternalMonster extends FullMonster {} - -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a170508..6f25222 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,4 @@ -spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ooinuza?zeroDateTimeBehavior=convertToNull&useSSL=false&useUnicode=yes&characterEncoding=UTF-8 +spring.datasource.url=jdbc:mysql://mysql:3306/ooinuza?zeroDateTimeBehavior=convertToNull&useSSL=false&useUnicode=yes&characterEncoding=UTF-8 spring.datasource.username=x spring.datasource.password=x @@ -18,7 +18,7 @@ endpoints.heapdump.enabled=false endpoints.trace.enabled=false endpoints.configprops.enabled=false -logging.path=./logs/ +logging.path=/logs/ logging.file=niblapi.log logging.level.*=ERROR logging.level.com.nibl.api.*=INFO @@ -27,8 +27,7 @@ nibl.cache.refresh.time=900000 nibl.anilist.id=x nibl.anilist.secret=x -server.port: 443 -server.additionalPorts: 8080 +server.port: 80 #security.require-ssl=true #server.ssl.key-store:x #server.ssl.key-store-password: x