diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f2297eb --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +# Keeps editors from reintroducing CRLF. The enforcement is .gitattributes plus the CI +# check; this is so a contributor's working tree does not fight it in the first place. +root = true + +[*] +end_of_line = lf +charset = utf-8 + +[*.{bat,cmd}] +end_of_line = crlf diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6e7bb60 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,66 @@ +# Line endings are LF in the repository and in the working tree, on every platform. +# Git applies this on `git add`, so a contributor's core.autocrlf setting cannot put CRLF +# into the index. Adding this file does not fix what is already committed - that needs +# `git add --renormalize .` once, which is what the commit introducing this file did. +# +# The extensions are listed explicitly rather than relying on `text=auto` alone: auto +# detection is a heuristic, and this repository had files keep their CRLF for years despite +# a `* text=auto eol=lf` rule. The CI check is the actual guarantee. + +* text=auto eol=lf + +# source and config +*.java text eol=lf +*.kt text eol=lf +*.ts text eol=lf +*.tsx text eol=lf +*.js text eol=lf +*.jsx text eol=lf +*.mjs text eol=lf +*.cjs text eol=lf +*.json text eol=lf +*.jsonc text eol=lf +*.yml text eol=lf +*.yaml text eol=lf +*.xml text eol=lf +*.sql text eol=lf +*.avsc text eol=lf +*.md text eol=lf +*.txt text eol=lf +*.css text eol=lf +*.scss text eol=lf +*.html text eol=lf +*.properties text eol=lf +*.sh text eol=lf +*.env text eol=lf +Dockerfile text eol=lf +Makefile text eol=lf + +# read by cmd.exe, which wants CRLF +*.bat text eol=crlf +*.cmd text eol=crlf + +# never converted, never diffed +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.webp binary +*.svg text eol=lf +*.woff binary +*.woff2 binary +*.ttf binary +*.otf binary +*.eot binary +*.pdf binary +*.zip binary +*.gz binary +*.tar binary +*.jar binary +*.wasm binary +*.glb binary +*.gltf binary +*.mp4 binary +*.webm binary +*.avro binary diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..54d1225 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,19 @@ +name: validate +on: + push: + workflow_dispatch: + +jobs: + line-endings: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check line endings + run: | + # .gitattributes normalises on add; this catches anything that slipped past it, + # including files committed before the rule existed. Fix with: + # git add --renormalize . && git commit + if git ls-files --eol | grep -E '^i/(crlf|mixed)'; then + echo '::error::the files listed above have CRLF or mixed line endings in the index' + exit 1 + fi diff --git a/.gitignore b/.gitignore index 1ee6c38..6927e56 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -.lh/ +.lh/ .classpath \ No newline at end of file diff --git a/README.md b/README.md index a576447..d824688 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# Event processor contract shared -Git submodule for shared files of event-processor-contract implementation. - -- parent pom +# Event processor contract shared +Git submodule for shared files of event-processor-contract implementation. + +- parent pom - common AVRO schemata \ No newline at end of file diff --git a/src/main/avro/shared/realtime/notification.avsc b/src/main/avro/shared/realtime/notification.avsc index d6647ea..0b36f92 100644 --- a/src/main/avro/shared/realtime/notification.avsc +++ b/src/main/avro/shared/realtime/notification.avsc @@ -1,31 +1,31 @@ -{ - "type": "record", - "name": "notification", - "namespace": "contracts", - "fields": [ - { - "name": "id", - "type": "long" - }, - { - "name": "blocknum", - "type": "long" - }, - { - "name": "block_timestamp", - "type": "long" - }, - { - "name": "account", - "type": "string" - }, - { - "name": "context", - "type": "string" - }, - { - "name": "data", - "type": "string" - } - ] +{ + "type": "record", + "name": "notification", + "namespace": "contracts", + "fields": [ + { + "name": "id", + "type": "long" + }, + { + "name": "blocknum", + "type": "long" + }, + { + "name": "block_timestamp", + "type": "long" + }, + { + "name": "account", + "type": "string" + }, + { + "name": "context", + "type": "string" + }, + { + "name": "data", + "type": "string" + } + ] } \ No newline at end of file diff --git a/src/main/avro/shared/realtime/realtime_event.avsc b/src/main/avro/shared/realtime/realtime_event.avsc index 771b291..2f5b57c 100644 --- a/src/main/avro/shared/realtime/realtime_event.avsc +++ b/src/main/avro/shared/realtime/realtime_event.avsc @@ -1,43 +1,43 @@ -{ - "type": "record", - "name": "realtime_event", - "namespace": "contracts", - "fields": [ - { - "name": "blocknum", - "type": "long" - }, - { - "name": "block_timestamp", - "type": "long" - }, - { - "name": "global_sequence", - "type": "long" - }, - { - "name": "asset_id", - "type": ["null","long"] - }, - { - "name": "template_id", - "type": ["null","long"] - }, - { - "name": "collection_id", - "type": "string" - }, - { - "name": "context", - "type": "string" - }, - { - "name": "type", - "type": "string" - }, - { - "name": "data", - "type": ["null","string"] - } - ] +{ + "type": "record", + "name": "realtime_event", + "namespace": "contracts", + "fields": [ + { + "name": "blocknum", + "type": "long" + }, + { + "name": "block_timestamp", + "type": "long" + }, + { + "name": "global_sequence", + "type": "long" + }, + { + "name": "asset_id", + "type": ["null","long"] + }, + { + "name": "template_id", + "type": ["null","long"] + }, + { + "name": "collection_id", + "type": "string" + }, + { + "name": "context", + "type": "string" + }, + { + "name": "type", + "type": "string" + }, + { + "name": "data", + "type": ["null","string"] + } + ] } \ No newline at end of file diff --git a/src/main/java/com/kryptokrauts/shared/BaseCache.java b/src/main/java/com/kryptokrauts/shared/BaseCache.java index 9733567..7d77dad 100644 --- a/src/main/java/com/kryptokrauts/shared/BaseCache.java +++ b/src/main/java/com/kryptokrauts/shared/BaseCache.java @@ -1,278 +1,278 @@ -package com.kryptokrauts.shared; - -import com.kryptokrauts.shared.dao.common.CollectionAuditEntity; -import com.kryptokrauts.shared.dao.common.ExchangeRateEntity; -import com.kryptokrauts.shared.dao.common.MarketConfigEntity; -import com.kryptokrauts.shared.dao.common.ProfileBaseView; -import com.kryptokrauts.shared.dao.common.SupportedAssetsEntity; -import com.kryptokrauts.shared.model.common._Account; -import com.kryptokrauts.shared.model.common._BlacklistMetadata; -import com.kryptokrauts.shared.model.common._MarketConfig; -import io.quarkus.runtime.StartupEvent; -import io.quarkus.scheduler.Scheduled; -import jakarta.enterprise.context.control.ActivateRequestContext; -import jakarta.enterprise.event.Observes; -import jakarta.inject.Singleton; -import jakarta.transaction.Transactional; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.BinaryOperator; -import java.util.function.Function; -import java.util.stream.Collector; -import java.util.stream.Collectors; -import org.jboss.logging.Logger; - -@Singleton -public class BaseCache { - - protected static final Logger logger = Logger.getLogger(BaseCache.class); - - private static Map profileCache = new HashMap<>(); - - private static Map exchangeRateCache; - - private static _MarketConfig marketConfigCache; - - private static Map collectionShieldedCache = new HashMap<>(); - - private static Map collectionBlacklistedCache = new HashMap<>(); - - private static Map supportedAssetsCache = new HashMap<>(); - - public static _MarketConfig getMarketConfigCache() { - return marketConfigCache; - } - - public static Map getExchangeRateCache() { - return exchangeRateCache; - } - - public static Boolean isShielded(String collectionId) { - return collectionShieldedCache.containsKey(collectionId); - } - - public static Boolean isBlacklisted(String collectionId) { - return collectionBlacklistedCache.containsKey(collectionId); - } - - public static _Account getAccountFromCache(String account) { - return profileCache.containsKey(account) ? profileCache.get(account) : null; - } - - public static Integer getTokenPrecision(String token) { - if (!supportedAssetsCache.containsKey(token)) { - SupportedAssetsEntity supportedAssets = - SupportedAssetsEntity.find("token = ?1", token).firstResult(); - supportedAssetsCache.put(token, supportedAssets.getPrecision()); - } - return supportedAssetsCache.get(token); - } - - /*- - * fill every cache once at startup. - * - * @Scheduled(every = ...) does not fire at boot, it fires one interval later, so without this - * every cache is empty for that first interval after each deploy. What that costs depends on the - * cache, and the two groups below are treated differently for that reason. - * - * The market config and the exchange rates are dereferenced without a null check in - * BaseMapper.buildPriceInfo, and both start as null rather than empty. So until they are filled, - * every response carrying a price fails with a NullPointerException - for ten minutes in the case - * of the exchange rates and, with cache.refresh.market_config = P1d, for up to a day in the case - * of the market config. Those two are required: failing to start is better than starting a - * service that reports itself healthy and answers every priced request with a 500. - * - * The rest degrade instead of failing - a missing profile costs a KYC badge, see - * kryptokrauts/event-processor-contract#11, a missing shielded list costs an icon - and the - * scheduled refresh retries within the hour. Those are filled best effort, so a database that is - * briefly unreachable at boot does not take the service down over a badge. - * - * The request context is activated for the same reason the scheduled methods have one - the reads - * below need a Hibernate session. - */ - @ActivateRequestContext - void populateCachesAtStartup(@Observes StartupEvent event) { - long start = System.currentTimeMillis(); - logger.info("Populating caches at startup"); - - // required, see above: their absence is a NullPointerException and not a degraded value - this.refreshMarketConfigCache(); - this.refreshExchangeRateCache(); - - // best effort: a miss degrades and the scheduled refresh will retry - this.fillSafely("profiles", this::refreshProfileCache); - this.fillSafely("shielded collections", this::refreshShieldedCollectionsCache); - this.fillSafely("blacklisted collections", this::refreshBlacklistedCollectionsCache); - this.fillSafely("supported assets", this::refreshSupportedAssetsCache); - - logger.infof("Populating caches at startup took %s ms", System.currentTimeMillis() - start); - } - - private void fillSafely(String name, Runnable refresh) { - try { - refresh.run(); - } catch (Exception e) { - logger.errorf( - e, "Could not populate the %s cache at startup, the scheduled refresh will retry", name); - } - } - - @Scheduled(every = "{cache.refresh.exchange_rates}") - public void refreshExchangeRate() { - this.refreshExchangeRateCache(); - } - - @Scheduled(every = "{cache.refresh.profiles}") - public void refreshProfiles() { - this.refreshProfileCache(); - } - - @Scheduled(every = "{cache.refresh.shielded_collections}") - public void refreshShieldedCollections() { - this.refreshShieldedCollectionsCache(); - } - - @Scheduled(every = "{cache.refresh.blacklisted_collections}") - public void refreshBlacklistedCollections() { - this.refreshBlacklistedCollectionsCache(); - } - - @Scheduled(every = "{cache.refresh.market_config}") - public void refreshMarketConfig() { - this.refreshMarketConfigCache(); - } - - @Scheduled(every = "{cache.refresh.supported_assets}") - public void refreshSupportedAssets() { - this.refreshSupportedAssetsCache(); - } - - @Transactional - protected void refreshExchangeRateCache() { - long start = System.currentTimeMillis(); - - List exchangeRateList = ExchangeRateEntity.listAll(); - Map tempCache = - exchangeRateList.stream() - .collect( - keepFirst( - "exchange rates", - ExchangeRateEntity::getTokenSymbol, - ExchangeRateEntity::getUsd)); - exchangeRateCache = tempCache; - - logger.infof( - "Refresh of exchange rates cache took %s ms", (System.currentTimeMillis() - start)); - } - - @Transactional - protected void refreshMarketConfigCache() { - long start = System.currentTimeMillis(); - - marketConfigCache = MarketConfigEntity.findLatest().toModel(); - - logger.infof("Refresh of market config cache took %s ms", (System.currentTimeMillis() - start)); - } - - @Transactional - protected void refreshProfileCache() { - long start = System.currentTimeMillis(); - - List profileList = ProfileBaseView.listAll(); - Map tempCache = - profileList.stream() - .collect( - Collectors.toMap( - ProfileBaseView::getAccount, - ProfileBaseView::toModel, - // an account with several rows means the source view returns more than one, - // which is a data problem to fix at the source - see #11. Until then the - // conflict is resolved towards not verified: one of those rows can be a - // revocation, and a kyc badge is a claim about a real person, so showing one - // that is not true is worse than showing none. Either way the whole cache must - // not be lost over a single row - (first, second) -> { - _Account kept = Boolean.TRUE.equals(first.getHasKYC()) ? second : first; - logger.warnf( - "Profile cache: account %s has several rows in" - + " soonmarket_profile_base_v, resolving to hasKYC = %s", - kept.getName(), kept.getHasKYC()); - return kept; - })); - profileCache = tempCache; - - logger.infof("Refresh of profile cache took %s ms", (System.currentTimeMillis() - start)); - } - - @Transactional - protected void refreshShieldedCollectionsCache() { - long start = System.currentTimeMillis(); - - List collectionList = CollectionAuditEntity.getShieldedCollections(); - Map tmpCollectionShieldedCache = new HashMap<>(); - collectionList.forEach(c -> tmpCollectionShieldedCache.put(c.getCollectionId(), true)); - collectionShieldedCache = tmpCollectionShieldedCache; - - logger.infof( - "Refresh of shielded collections took %s ms", (System.currentTimeMillis() - start)); - } - - @Transactional - protected void refreshBlacklistedCollectionsCache() { - long start = System.currentTimeMillis(); - - List collectionList = CollectionAuditEntity.getBlacklistedCollections(); - Map tmpCollectionBlacklistCache = new HashMap<>(); - collectionList.forEach( - c -> - tmpCollectionBlacklistCache.put( - c.getCollectionId(), - _BlacklistMetadata.builder() - .blacklistDate(BaseMapper.mapDate(c.getBlacklistDate())) - .reason(c.getBlacklistReason()) - .actor(c.getBlacklistActor()) - .build())); - collectionBlacklistedCache = tmpCollectionBlacklistCache; - - logger.infof( - "Refresh of blacklisted collections took %s ms", (System.currentTimeMillis() - start)); - } - - @Transactional - protected void refreshSupportedAssetsCache() { - long start = System.currentTimeMillis(); - - List supportedAssets = SupportedAssetsEntity.listAll(); - Map tempCache = - supportedAssets.stream() - .collect( - keepFirst( - "supported assets", - SupportedAssetsEntity::getToken, - SupportedAssetsEntity::getPrecision)); - supportedAssetsCache = tempCache; - - logger.infof("Refresh of supported assets took %s ms", (System.currentTimeMillis() - start)); - } - - /*- - * toMap that survives a duplicate key instead of throwing. - * - * The two argument Collectors.toMap throws IllegalStateException on a duplicate, which fails the - * whole refresh - and since the cache is only assigned on success, the previous contents stay, - * or nothing at all if it never succeeded once. A single duplicated row then costs the entire - * cache rather than one entry. Keeping the first value and warning about it is the better trade: - * one entry may be wrong, the rest keeps working, and the data problem stays visible in the log. - */ - private static Collector> keepFirst( - String cacheName, Function key, Function value) { - BinaryOperator keepFirstAndWarn = - (first, second) -> { - logger.warnf( - "%s cache: duplicate entry, keeping %s and ignoring %s", cacheName, first, second); - return first; - }; - return Collectors.toMap(key, value, keepFirstAndWarn); - } -} +package com.kryptokrauts.shared; + +import com.kryptokrauts.shared.dao.common.CollectionAuditEntity; +import com.kryptokrauts.shared.dao.common.ExchangeRateEntity; +import com.kryptokrauts.shared.dao.common.MarketConfigEntity; +import com.kryptokrauts.shared.dao.common.ProfileBaseView; +import com.kryptokrauts.shared.dao.common.SupportedAssetsEntity; +import com.kryptokrauts.shared.model.common._Account; +import com.kryptokrauts.shared.model.common._BlacklistMetadata; +import com.kryptokrauts.shared.model.common._MarketConfig; +import io.quarkus.runtime.StartupEvent; +import io.quarkus.scheduler.Scheduled; +import jakarta.enterprise.context.control.ActivateRequestContext; +import jakarta.enterprise.event.Observes; +import jakarta.inject.Singleton; +import jakarta.transaction.Transactional; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; +import org.jboss.logging.Logger; + +@Singleton +public class BaseCache { + + protected static final Logger logger = Logger.getLogger(BaseCache.class); + + private static Map profileCache = new HashMap<>(); + + private static Map exchangeRateCache; + + private static _MarketConfig marketConfigCache; + + private static Map collectionShieldedCache = new HashMap<>(); + + private static Map collectionBlacklistedCache = new HashMap<>(); + + private static Map supportedAssetsCache = new HashMap<>(); + + public static _MarketConfig getMarketConfigCache() { + return marketConfigCache; + } + + public static Map getExchangeRateCache() { + return exchangeRateCache; + } + + public static Boolean isShielded(String collectionId) { + return collectionShieldedCache.containsKey(collectionId); + } + + public static Boolean isBlacklisted(String collectionId) { + return collectionBlacklistedCache.containsKey(collectionId); + } + + public static _Account getAccountFromCache(String account) { + return profileCache.containsKey(account) ? profileCache.get(account) : null; + } + + public static Integer getTokenPrecision(String token) { + if (!supportedAssetsCache.containsKey(token)) { + SupportedAssetsEntity supportedAssets = + SupportedAssetsEntity.find("token = ?1", token).firstResult(); + supportedAssetsCache.put(token, supportedAssets.getPrecision()); + } + return supportedAssetsCache.get(token); + } + + /*- + * fill every cache once at startup. + * + * @Scheduled(every = ...) does not fire at boot, it fires one interval later, so without this + * every cache is empty for that first interval after each deploy. What that costs depends on the + * cache, and the two groups below are treated differently for that reason. + * + * The market config and the exchange rates are dereferenced without a null check in + * BaseMapper.buildPriceInfo, and both start as null rather than empty. So until they are filled, + * every response carrying a price fails with a NullPointerException - for ten minutes in the case + * of the exchange rates and, with cache.refresh.market_config = P1d, for up to a day in the case + * of the market config. Those two are required: failing to start is better than starting a + * service that reports itself healthy and answers every priced request with a 500. + * + * The rest degrade instead of failing - a missing profile costs a KYC badge, see + * kryptokrauts/event-processor-contract#11, a missing shielded list costs an icon - and the + * scheduled refresh retries within the hour. Those are filled best effort, so a database that is + * briefly unreachable at boot does not take the service down over a badge. + * + * The request context is activated for the same reason the scheduled methods have one - the reads + * below need a Hibernate session. + */ + @ActivateRequestContext + void populateCachesAtStartup(@Observes StartupEvent event) { + long start = System.currentTimeMillis(); + logger.info("Populating caches at startup"); + + // required, see above: their absence is a NullPointerException and not a degraded value + this.refreshMarketConfigCache(); + this.refreshExchangeRateCache(); + + // best effort: a miss degrades and the scheduled refresh will retry + this.fillSafely("profiles", this::refreshProfileCache); + this.fillSafely("shielded collections", this::refreshShieldedCollectionsCache); + this.fillSafely("blacklisted collections", this::refreshBlacklistedCollectionsCache); + this.fillSafely("supported assets", this::refreshSupportedAssetsCache); + + logger.infof("Populating caches at startup took %s ms", System.currentTimeMillis() - start); + } + + private void fillSafely(String name, Runnable refresh) { + try { + refresh.run(); + } catch (Exception e) { + logger.errorf( + e, "Could not populate the %s cache at startup, the scheduled refresh will retry", name); + } + } + + @Scheduled(every = "{cache.refresh.exchange_rates}") + public void refreshExchangeRate() { + this.refreshExchangeRateCache(); + } + + @Scheduled(every = "{cache.refresh.profiles}") + public void refreshProfiles() { + this.refreshProfileCache(); + } + + @Scheduled(every = "{cache.refresh.shielded_collections}") + public void refreshShieldedCollections() { + this.refreshShieldedCollectionsCache(); + } + + @Scheduled(every = "{cache.refresh.blacklisted_collections}") + public void refreshBlacklistedCollections() { + this.refreshBlacklistedCollectionsCache(); + } + + @Scheduled(every = "{cache.refresh.market_config}") + public void refreshMarketConfig() { + this.refreshMarketConfigCache(); + } + + @Scheduled(every = "{cache.refresh.supported_assets}") + public void refreshSupportedAssets() { + this.refreshSupportedAssetsCache(); + } + + @Transactional + protected void refreshExchangeRateCache() { + long start = System.currentTimeMillis(); + + List exchangeRateList = ExchangeRateEntity.listAll(); + Map tempCache = + exchangeRateList.stream() + .collect( + keepFirst( + "exchange rates", + ExchangeRateEntity::getTokenSymbol, + ExchangeRateEntity::getUsd)); + exchangeRateCache = tempCache; + + logger.infof( + "Refresh of exchange rates cache took %s ms", (System.currentTimeMillis() - start)); + } + + @Transactional + protected void refreshMarketConfigCache() { + long start = System.currentTimeMillis(); + + marketConfigCache = MarketConfigEntity.findLatest().toModel(); + + logger.infof("Refresh of market config cache took %s ms", (System.currentTimeMillis() - start)); + } + + @Transactional + protected void refreshProfileCache() { + long start = System.currentTimeMillis(); + + List profileList = ProfileBaseView.listAll(); + Map tempCache = + profileList.stream() + .collect( + Collectors.toMap( + ProfileBaseView::getAccount, + ProfileBaseView::toModel, + // an account with several rows means the source view returns more than one, + // which is a data problem to fix at the source - see #11. Until then the + // conflict is resolved towards not verified: one of those rows can be a + // revocation, and a kyc badge is a claim about a real person, so showing one + // that is not true is worse than showing none. Either way the whole cache must + // not be lost over a single row + (first, second) -> { + _Account kept = Boolean.TRUE.equals(first.getHasKYC()) ? second : first; + logger.warnf( + "Profile cache: account %s has several rows in" + + " soonmarket_profile_base_v, resolving to hasKYC = %s", + kept.getName(), kept.getHasKYC()); + return kept; + })); + profileCache = tempCache; + + logger.infof("Refresh of profile cache took %s ms", (System.currentTimeMillis() - start)); + } + + @Transactional + protected void refreshShieldedCollectionsCache() { + long start = System.currentTimeMillis(); + + List collectionList = CollectionAuditEntity.getShieldedCollections(); + Map tmpCollectionShieldedCache = new HashMap<>(); + collectionList.forEach(c -> tmpCollectionShieldedCache.put(c.getCollectionId(), true)); + collectionShieldedCache = tmpCollectionShieldedCache; + + logger.infof( + "Refresh of shielded collections took %s ms", (System.currentTimeMillis() - start)); + } + + @Transactional + protected void refreshBlacklistedCollectionsCache() { + long start = System.currentTimeMillis(); + + List collectionList = CollectionAuditEntity.getBlacklistedCollections(); + Map tmpCollectionBlacklistCache = new HashMap<>(); + collectionList.forEach( + c -> + tmpCollectionBlacklistCache.put( + c.getCollectionId(), + _BlacklistMetadata.builder() + .blacklistDate(BaseMapper.mapDate(c.getBlacklistDate())) + .reason(c.getBlacklistReason()) + .actor(c.getBlacklistActor()) + .build())); + collectionBlacklistedCache = tmpCollectionBlacklistCache; + + logger.infof( + "Refresh of blacklisted collections took %s ms", (System.currentTimeMillis() - start)); + } + + @Transactional + protected void refreshSupportedAssetsCache() { + long start = System.currentTimeMillis(); + + List supportedAssets = SupportedAssetsEntity.listAll(); + Map tempCache = + supportedAssets.stream() + .collect( + keepFirst( + "supported assets", + SupportedAssetsEntity::getToken, + SupportedAssetsEntity::getPrecision)); + supportedAssetsCache = tempCache; + + logger.infof("Refresh of supported assets took %s ms", (System.currentTimeMillis() - start)); + } + + /*- + * toMap that survives a duplicate key instead of throwing. + * + * The two argument Collectors.toMap throws IllegalStateException on a duplicate, which fails the + * whole refresh - and since the cache is only assigned on success, the previous contents stay, + * or nothing at all if it never succeeded once. A single duplicated row then costs the entire + * cache rather than one entry. Keeping the first value and warning about it is the better trade: + * one entry may be wrong, the rest keeps working, and the data problem stays visible in the log. + */ + private static Collector> keepFirst( + String cacheName, Function key, Function value) { + BinaryOperator keepFirstAndWarn = + (first, second) -> { + logger.warnf( + "%s cache: duplicate entry, keeping %s and ignoring %s", cacheName, first, second); + return first; + }; + return Collectors.toMap(key, value, keepFirstAndWarn); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/BaseMapper.java b/src/main/java/com/kryptokrauts/shared/BaseMapper.java index 474490b..2cb56ed 100644 --- a/src/main/java/com/kryptokrauts/shared/BaseMapper.java +++ b/src/main/java/com/kryptokrauts/shared/BaseMapper.java @@ -1,127 +1,127 @@ -package com.kryptokrauts.shared; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.kryptokrauts.shared.model.common._Account; -import com.kryptokrauts.shared.model.common._PriceInfo; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.time.Instant; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import org.apache.commons.lang3.StringUtils; - -public class BaseMapper { - - public static final List ACCOUNT_IDENTIFIER = - List.of( - "owner", "seller", "creator", "buyer", "from", "to", "burnedBy", "bidder", "receiver"); - - public static ObjectMapper objectMapper = new ObjectMapper(); - - public static _Account mapAccount(String name) { - if (StringUtils.isNotBlank(name)) { - _Account account = BaseCache.getAccountFromCache(name); - if (account != null) { - return account; - } else { - return _Account.builder().name(name).build(); - } - } - return null; - } - - public static Date mapDate(Long date) { - if (date != null) { - return Date.from(Instant.ofEpochMilli(date)); - } - return null; - } - - public static _PriceInfo buildPriceInfo(String token, Double price, Double royalty) { - return buildPriceInfo(token, price, royalty, null, null); - } - - public static _PriceInfo buildPriceInfo( - String token, Double price, Double royalty, Double makerMarketFee, Double takerMarketFee) { - return buildPriceInfo(token, price, null, royalty, makerMarketFee, takerMarketFee); - } - - public static _PriceInfo buildPriceInfo( - String token, - Double price, - Double priceUSD, - Double royalty, - Double makerMarketFee, - Double takerMarketFee) { - if (StringUtils.isNotBlank(token) && price != null) { - - Double mmf = - makerMarketFee != null ? makerMarketFee : BaseCache.getMarketConfigCache().getMaker_fee(); - Double tmf = - takerMarketFee != null ? takerMarketFee : BaseCache.getMarketConfigCache().getTaker_fee(); - Double marketFee = mmf + tmf; - - String rawPrice = null; - Integer precision = BaseCache.getTokenPrecision(token); - if (precision != null) { - BigDecimal bd = BigDecimal.valueOf(price); - bd = bd.setScale(precision, RoundingMode.HALF_UP); - rawPrice = String.format(Locale.US, "%." + precision + "f %s", bd, token); - } - - Double royaltyPrice = royalty != null ? royalty * price : null; - Double marketFeePrice = marketFee != null ? marketFee * price : null; - - priceUSD = - roundTo( - priceUSD != null - ? priceUSD - : price - * (BaseCache.getExchangeRateCache().containsKey(token) - ? BaseCache.getExchangeRateCache().get(token) - : 0)); - Double royaltyUSD = royalty != null ? roundTo(priceUSD * royalty) : null; - Double marketFeeUSD = marketFee != null ? roundTo(priceUSD * marketFee) : null; - - // seller receives info - Double sellerReceivedPrice = - roundTo( - price * (1 - (royalty != null ? royalty : 0) - (marketFee != null ? marketFee : 0))); - Double sellerReceivedPriceUSD = - roundTo( - priceUSD - - (royaltyUSD != null ? royaltyUSD : 0) - - (marketFeeUSD != null ? marketFeeUSD : 0)); - - return _PriceInfo.builder() - .paymentAsset(token) - .price(price) - .royalty(royalty) - .priceUSD(priceUSD) - .royaltyUSD(royaltyUSD) - .makerMarketFee(mmf) - .takerMarketFee(tmf) - .rawPrice(rawPrice) - .marketFeeUSD(marketFeeUSD) - .sellerReceivedPrice(sellerReceivedPrice) - .sellerReceivedPriceUSD(sellerReceivedPriceUSD) - .royaltyPrice(royaltyPrice) - .marketFeePrice(marketFeePrice) - .build(); - } - return null; - } - - public static Double roundTo(Double value, int decimals) { - return Math.round(value * Math.pow(10, decimals)) / Double.valueOf(Math.pow(10, decimals)); - } - - public static Double roundTo(Double value) { - return roundTo(value, 2); - } - - public static Integer toZero(Integer value) { - return value != null ? value : 0; - } -} +package com.kryptokrauts.shared; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.kryptokrauts.shared.model.common._Account; +import com.kryptokrauts.shared.model.common._PriceInfo; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import org.apache.commons.lang3.StringUtils; + +public class BaseMapper { + + public static final List ACCOUNT_IDENTIFIER = + List.of( + "owner", "seller", "creator", "buyer", "from", "to", "burnedBy", "bidder", "receiver"); + + public static ObjectMapper objectMapper = new ObjectMapper(); + + public static _Account mapAccount(String name) { + if (StringUtils.isNotBlank(name)) { + _Account account = BaseCache.getAccountFromCache(name); + if (account != null) { + return account; + } else { + return _Account.builder().name(name).build(); + } + } + return null; + } + + public static Date mapDate(Long date) { + if (date != null) { + return Date.from(Instant.ofEpochMilli(date)); + } + return null; + } + + public static _PriceInfo buildPriceInfo(String token, Double price, Double royalty) { + return buildPriceInfo(token, price, royalty, null, null); + } + + public static _PriceInfo buildPriceInfo( + String token, Double price, Double royalty, Double makerMarketFee, Double takerMarketFee) { + return buildPriceInfo(token, price, null, royalty, makerMarketFee, takerMarketFee); + } + + public static _PriceInfo buildPriceInfo( + String token, + Double price, + Double priceUSD, + Double royalty, + Double makerMarketFee, + Double takerMarketFee) { + if (StringUtils.isNotBlank(token) && price != null) { + + Double mmf = + makerMarketFee != null ? makerMarketFee : BaseCache.getMarketConfigCache().getMaker_fee(); + Double tmf = + takerMarketFee != null ? takerMarketFee : BaseCache.getMarketConfigCache().getTaker_fee(); + Double marketFee = mmf + tmf; + + String rawPrice = null; + Integer precision = BaseCache.getTokenPrecision(token); + if (precision != null) { + BigDecimal bd = BigDecimal.valueOf(price); + bd = bd.setScale(precision, RoundingMode.HALF_UP); + rawPrice = String.format(Locale.US, "%." + precision + "f %s", bd, token); + } + + Double royaltyPrice = royalty != null ? royalty * price : null; + Double marketFeePrice = marketFee != null ? marketFee * price : null; + + priceUSD = + roundTo( + priceUSD != null + ? priceUSD + : price + * (BaseCache.getExchangeRateCache().containsKey(token) + ? BaseCache.getExchangeRateCache().get(token) + : 0)); + Double royaltyUSD = royalty != null ? roundTo(priceUSD * royalty) : null; + Double marketFeeUSD = marketFee != null ? roundTo(priceUSD * marketFee) : null; + + // seller receives info + Double sellerReceivedPrice = + roundTo( + price * (1 - (royalty != null ? royalty : 0) - (marketFee != null ? marketFee : 0))); + Double sellerReceivedPriceUSD = + roundTo( + priceUSD + - (royaltyUSD != null ? royaltyUSD : 0) + - (marketFeeUSD != null ? marketFeeUSD : 0)); + + return _PriceInfo.builder() + .paymentAsset(token) + .price(price) + .royalty(royalty) + .priceUSD(priceUSD) + .royaltyUSD(royaltyUSD) + .makerMarketFee(mmf) + .takerMarketFee(tmf) + .rawPrice(rawPrice) + .marketFeeUSD(marketFeeUSD) + .sellerReceivedPrice(sellerReceivedPrice) + .sellerReceivedPriceUSD(sellerReceivedPriceUSD) + .royaltyPrice(royaltyPrice) + .marketFeePrice(marketFeePrice) + .build(); + } + return null; + } + + public static Double roundTo(Double value, int decimals) { + return Math.round(value * Math.pow(10, decimals)) / Double.valueOf(Math.pow(10, decimals)); + } + + public static Double roundTo(Double value) { + return roundTo(value, 2); + } + + public static Integer toZero(Integer value) { + return value != null ? value : 0; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/RandomNumberHolder.java b/src/main/java/com/kryptokrauts/shared/RandomNumberHolder.java index ec8f5ae..4b55201 100644 --- a/src/main/java/com/kryptokrauts/shared/RandomNumberHolder.java +++ b/src/main/java/com/kryptokrauts/shared/RandomNumberHolder.java @@ -1,7 +1,7 @@ -package com.kryptokrauts.shared; - -import java.util.Random; - -public final class RandomNumberHolder { - public static final Random randomNumberGenerator = new Random(); -} +package com.kryptokrauts.shared; + +import java.util.Random; + +public final class RandomNumberHolder { + public static final Random randomNumberGenerator = new Random(); +} diff --git a/src/main/java/com/kryptokrauts/shared/contract/exception/EntityNotYetAvailableException.java b/src/main/java/com/kryptokrauts/shared/contract/exception/EntityNotYetAvailableException.java index 9be791d..f0d17fb 100644 --- a/src/main/java/com/kryptokrauts/shared/contract/exception/EntityNotYetAvailableException.java +++ b/src/main/java/com/kryptokrauts/shared/contract/exception/EntityNotYetAvailableException.java @@ -1,11 +1,11 @@ -package com.kryptokrauts.shared.contract.exception; - -public class EntityNotYetAvailableException extends RuntimeException { - public EntityNotYetAvailableException(String msg) { - super(msg); - } - - public EntityNotYetAvailableException() { - super(); - } -} +package com.kryptokrauts.shared.contract.exception; + +public class EntityNotYetAvailableException extends RuntimeException { + public EntityNotYetAvailableException(String msg) { + super(msg); + } + + public EntityNotYetAvailableException() { + super(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/contract/exception/RetryException.java b/src/main/java/com/kryptokrauts/shared/contract/exception/RetryException.java index aec9627..d7c67d9 100644 --- a/src/main/java/com/kryptokrauts/shared/contract/exception/RetryException.java +++ b/src/main/java/com/kryptokrauts/shared/contract/exception/RetryException.java @@ -1,16 +1,16 @@ -package com.kryptokrauts.shared.contract.exception; - -public class RetryException extends RuntimeException { - - public RetryException(String msg, Exception e) { - super(msg, e); - } - - public RetryException(Exception e) { - super(e); - } - - public RetryException(String msg) { - super(msg); - } -} +package com.kryptokrauts.shared.contract.exception; + +public class RetryException extends RuntimeException { + + public RetryException(String msg, Exception e) { + super(msg, e); + } + + public RetryException(Exception e) { + super(e); + } + + public RetryException(String msg) { + super(msg); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/contract/exception/StacktraceParser.java b/src/main/java/com/kryptokrauts/shared/contract/exception/StacktraceParser.java index 9835e75..75b20b1 100644 --- a/src/main/java/com/kryptokrauts/shared/contract/exception/StacktraceParser.java +++ b/src/main/java/com/kryptokrauts/shared/contract/exception/StacktraceParser.java @@ -1,24 +1,24 @@ -package com.kryptokrauts.shared.contract.exception; - -import java.util.Arrays; -import java.util.stream.Collectors; - -public class StacktraceParser { - - public static String getRelevantLines(Exception ex) { - - String relevantStacktrace = null; - - if (ex.getStackTrace() != null) { - relevantStacktrace = - Arrays.asList(ex.getStackTrace()).stream() - .filter(s -> s.getClassName().contains("kryptokrauts")) - .map( - e -> - String.format( - "%s.%s:%s", e.getClassName(), e.getMethodName(), e.getLineNumber())) - .collect(Collectors.joining("\n")); - } - return relevantStacktrace; - } -} +package com.kryptokrauts.shared.contract.exception; + +import java.util.Arrays; +import java.util.stream.Collectors; + +public class StacktraceParser { + + public static String getRelevantLines(Exception ex) { + + String relevantStacktrace = null; + + if (ex.getStackTrace() != null) { + relevantStacktrace = + Arrays.asList(ex.getStackTrace()).stream() + .filter(s -> s.getClassName().contains("kryptokrauts")) + .map( + e -> + String.format( + "%s.%s:%s", e.getClassName(), e.getMethodName(), e.getLineNumber())) + .collect(Collectors.joining("\n")); + } + return relevantStacktrace; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/contract/handlers/AvroDeserializationFailureHandler.java b/src/main/java/com/kryptokrauts/shared/contract/handlers/AvroDeserializationFailureHandler.java index 7389697..a6b5ffa 100644 --- a/src/main/java/com/kryptokrauts/shared/contract/handlers/AvroDeserializationFailureHandler.java +++ b/src/main/java/com/kryptokrauts/shared/contract/handlers/AvroDeserializationFailureHandler.java @@ -1,51 +1,51 @@ -package com.kryptokrauts.shared.contract.handlers; - -import io.smallrye.common.annotation.Identifier; -import io.smallrye.mutiny.Uni; -import io.smallrye.reactive.messaging.kafka.DeserializationFailureHandler; -import jakarta.enterprise.context.ApplicationScoped; -import java.time.Duration; -import org.apache.avro.specific.SpecificRecordBase; -import org.apache.kafka.common.header.Headers; -import org.jboss.logging.Logger; - -@ApplicationScoped -@Identifier("avro-deserialization-failure-handler") -public class AvroDeserializationFailureHandler - implements DeserializationFailureHandler { - - protected static final Logger logger = Logger.getLogger(AvroDeserializationFailureHandler.class); - - @Override - public SpecificRecordBase handleDeserializationFailure( - String topic, - boolean isKey, - String deserializer, - byte[] data, - Exception exception, - Headers headers) { - - StringBuffer buffer = new StringBuffer(); - headers.forEach(h -> buffer.append(h.key() + ":" + h.value())); - throw new RuntimeException( - String.format("Error deserializing message of type %s: %s", buffer.toString(), data)); - } - - @Override - public SpecificRecordBase decorateDeserialization( - Uni deserialization, - String topic, - boolean isKey, - String deserializer, - byte[] data, - Headers headers) { - - return deserialization - .onFailure() - .retry() - .withBackOff(Duration.ofSeconds(1)) - .atMost(10) - .await() - .atMost(Duration.ofSeconds(60)); - } -} +package com.kryptokrauts.shared.contract.handlers; + +import io.smallrye.common.annotation.Identifier; +import io.smallrye.mutiny.Uni; +import io.smallrye.reactive.messaging.kafka.DeserializationFailureHandler; +import jakarta.enterprise.context.ApplicationScoped; +import java.time.Duration; +import org.apache.avro.specific.SpecificRecordBase; +import org.apache.kafka.common.header.Headers; +import org.jboss.logging.Logger; + +@ApplicationScoped +@Identifier("avro-deserialization-failure-handler") +public class AvroDeserializationFailureHandler + implements DeserializationFailureHandler { + + protected static final Logger logger = Logger.getLogger(AvroDeserializationFailureHandler.class); + + @Override + public SpecificRecordBase handleDeserializationFailure( + String topic, + boolean isKey, + String deserializer, + byte[] data, + Exception exception, + Headers headers) { + + StringBuffer buffer = new StringBuffer(); + headers.forEach(h -> buffer.append(h.key() + ":" + h.value())); + throw new RuntimeException( + String.format("Error deserializing message of type %s: %s", buffer.toString(), data)); + } + + @Override + public SpecificRecordBase decorateDeserialization( + Uni deserialization, + String topic, + boolean isKey, + String deserializer, + byte[] data, + Headers headers) { + + return deserialization + .onFailure() + .retry() + .withBackOff(Duration.ofSeconds(1)) + .atMost(10) + .await() + .atMost(Duration.ofSeconds(60)); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/contract/handlers/AvroSerializationFailureHandler.java b/src/main/java/com/kryptokrauts/shared/contract/handlers/AvroSerializationFailureHandler.java index b29bcc7..b9add4a 100644 --- a/src/main/java/com/kryptokrauts/shared/contract/handlers/AvroSerializationFailureHandler.java +++ b/src/main/java/com/kryptokrauts/shared/contract/handlers/AvroSerializationFailureHandler.java @@ -1,50 +1,50 @@ -package com.kryptokrauts.shared.contract.handlers; - -import io.smallrye.common.annotation.Identifier; -import io.smallrye.mutiny.Uni; -import io.smallrye.reactive.messaging.kafka.SerializationFailureHandler; -import jakarta.enterprise.context.ApplicationScoped; -import java.time.Duration; -import org.apache.avro.specific.SpecificRecordBase; -import org.apache.kafka.common.header.Headers; -import org.jboss.logging.Logger; - -@ApplicationScoped -@Identifier("avro-serialization-failure-handler") -public class AvroSerializationFailureHandler - implements SerializationFailureHandler { - - protected static final Logger logger = Logger.getLogger(AvroSerializationFailureHandler.class); - - @Override - public byte[] handleSerializationFailure( - String topic, - boolean isKey, - String serializer, - SpecificRecordBase data, - Exception exception, - Headers headers) { - - StringBuffer buffer = new StringBuffer(); - headers.forEach(h -> buffer.append(h.key() + ":" + h.value())); - throw new RuntimeException( - String.format("Error serializing of type %s: %s", buffer.toString(), data)); - } - - @Override - public byte[] decorateSerialization( - Uni serialization, - String topic, - boolean isKey, - String serializer, - SpecificRecordBase data, - Headers headers) { - return serialization - .onFailure() - .retry() - .withBackOff(Duration.ofSeconds(1)) - .atMost(10) - .await() - .atMost(Duration.ofSeconds(60)); - } -} +package com.kryptokrauts.shared.contract.handlers; + +import io.smallrye.common.annotation.Identifier; +import io.smallrye.mutiny.Uni; +import io.smallrye.reactive.messaging.kafka.SerializationFailureHandler; +import jakarta.enterprise.context.ApplicationScoped; +import java.time.Duration; +import org.apache.avro.specific.SpecificRecordBase; +import org.apache.kafka.common.header.Headers; +import org.jboss.logging.Logger; + +@ApplicationScoped +@Identifier("avro-serialization-failure-handler") +public class AvroSerializationFailureHandler + implements SerializationFailureHandler { + + protected static final Logger logger = Logger.getLogger(AvroSerializationFailureHandler.class); + + @Override + public byte[] handleSerializationFailure( + String topic, + boolean isKey, + String serializer, + SpecificRecordBase data, + Exception exception, + Headers headers) { + + StringBuffer buffer = new StringBuffer(); + headers.forEach(h -> buffer.append(h.key() + ":" + h.value())); + throw new RuntimeException( + String.format("Error serializing of type %s: %s", buffer.toString(), data)); + } + + @Override + public byte[] decorateSerialization( + Uni serialization, + String topic, + boolean isKey, + String serializer, + SpecificRecordBase data, + Headers headers) { + return serialization + .onFailure() + .retry() + .withBackOff(Duration.ofSeconds(1)) + .atMost(10) + .await() + .atMost(Duration.ofSeconds(60)); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/common/AssetBaseEntity.java b/src/main/java/com/kryptokrauts/shared/dao/common/AssetBaseEntity.java index 2909993..b324843 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/common/AssetBaseEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/common/AssetBaseEntity.java @@ -1,46 +1,46 @@ -package com.kryptokrauts.shared.dao.common; - -import com.kryptokrauts.shared.model.common._Asset; -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "soonmarket_asset_base_v") -public class AssetBaseEntity extends PanacheEntityBase { - - @Id private Long assetId; - - private String assetName; - - private String assetMediaType; - - private String assetMedia; - - private String assetMediaPreview; - - private Long editionSize; - - private Long serial; - - private String owner; - - public static _Asset toModel(Long assetId) { - AssetBaseEntity asset = AssetBaseEntity.find("assetId = ?1", assetId).firstResult(); - if (asset != null) { - return _Asset.builder() - .assetId(asset.getAssetId()) - .assetMedia(asset.getAssetMedia()) - .assetMediaPreview(asset.getAssetMediaPreview()) - .assetMediaType(asset.getAssetMediaType()) - .assetName(asset.getAssetName()) - .editionSize(asset.getEditionSize()) - .serial(asset.getSerial()) - .build(); - } - return _Asset.builder().build(); - } -} +package com.kryptokrauts.shared.dao.common; + +import com.kryptokrauts.shared.model.common._Asset; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "soonmarket_asset_base_v") +public class AssetBaseEntity extends PanacheEntityBase { + + @Id private Long assetId; + + private String assetName; + + private String assetMediaType; + + private String assetMedia; + + private String assetMediaPreview; + + private Long editionSize; + + private Long serial; + + private String owner; + + public static _Asset toModel(Long assetId) { + AssetBaseEntity asset = AssetBaseEntity.find("assetId = ?1", assetId).firstResult(); + if (asset != null) { + return _Asset.builder() + .assetId(asset.getAssetId()) + .assetMedia(asset.getAssetMedia()) + .assetMediaPreview(asset.getAssetMediaPreview()) + .assetMediaType(asset.getAssetMediaType()) + .assetName(asset.getAssetName()) + .editionSize(asset.getEditionSize()) + .serial(asset.getSerial()) + .build(); + } + return _Asset.builder().build(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/common/CollectionAuditEntity.java b/src/main/java/com/kryptokrauts/shared/dao/common/CollectionAuditEntity.java index 5fc6440..d3de890 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/common/CollectionAuditEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/common/CollectionAuditEntity.java @@ -1,44 +1,44 @@ -package com.kryptokrauts.shared.dao.common; - -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import io.quarkus.panache.common.Sort; -import io.quarkus.panache.common.Sort.Direction; -import io.quarkus.panache.common.Sort.NullPrecedence; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import java.util.List; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "soonmarket_collection_audit_info_v") -public class CollectionAuditEntity extends PanacheEntityBase { - - @Id private String collectionId; - - private Boolean shielded; - - private Long shieldingDate; - - private Boolean blacklisted; - - private Long blacklistDate; - - private String blacklistReason; - - private String blacklistActor; - - public static List getShieldedCollections() { - return CollectionAuditEntity.find( - "shielded", Sort.by("shieldingDate", Direction.Descending, NullPrecedence.NULLS_LAST)) - .list(); - } - - public static List getBlacklistedCollections() { - return CollectionAuditEntity.find( - "blacklisted", - Sort.by("blacklistDate", Direction.Descending, NullPrecedence.NULLS_LAST)) - .list(); - } -} +package com.kryptokrauts.shared.dao.common; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import io.quarkus.panache.common.Sort; +import io.quarkus.panache.common.Sort.Direction; +import io.quarkus.panache.common.Sort.NullPrecedence; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.util.List; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "soonmarket_collection_audit_info_v") +public class CollectionAuditEntity extends PanacheEntityBase { + + @Id private String collectionId; + + private Boolean shielded; + + private Long shieldingDate; + + private Boolean blacklisted; + + private Long blacklistDate; + + private String blacklistReason; + + private String blacklistActor; + + public static List getShieldedCollections() { + return CollectionAuditEntity.find( + "shielded", Sort.by("shieldingDate", Direction.Descending, NullPrecedence.NULLS_LAST)) + .list(); + } + + public static List getBlacklistedCollections() { + return CollectionAuditEntity.find( + "blacklisted", + Sort.by("blacklistDate", Direction.Descending, NullPrecedence.NULLS_LAST)) + .list(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/common/CollectionBaseView.java b/src/main/java/com/kryptokrauts/shared/dao/common/CollectionBaseView.java index c9a4858..81f2906 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/common/CollectionBaseView.java +++ b/src/main/java/com/kryptokrauts/shared/dao/common/CollectionBaseView.java @@ -1,50 +1,50 @@ -package com.kryptokrauts.shared.dao.common; - -import com.kryptokrauts.shared.BaseMapper; -import com.kryptokrauts.shared.model.common._Collection; -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "soonmarket_collection_base_v") -public class CollectionBaseView extends PanacheEntityBase { - - @Id private String collectionId; - - private String collectionName; - - private String collectionImage; - - private String creator; - - private Boolean shielded; - - private Boolean blacklisted; - - private Double royalty; - - public _Collection toModel() { - return _Collection.builder() - .collectionId(collectionId) - .collectionImage(collectionImage) - .collectionName(collectionName) - .shielded(shielded) - .blacklisted(blacklisted) - .creator(BaseMapper.mapAccount(creator)) - .royalty(royalty) - .build(); - } - - public static _Collection toModel(String collectionId) { - CollectionBaseView collection = - CollectionBaseView.find("collectionId = ?1", collectionId).firstResult(); - if (collection != null) { - return collection.toModel(); - } - return _Collection.builder().build(); - } -} +package com.kryptokrauts.shared.dao.common; + +import com.kryptokrauts.shared.BaseMapper; +import com.kryptokrauts.shared.model.common._Collection; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "soonmarket_collection_base_v") +public class CollectionBaseView extends PanacheEntityBase { + + @Id private String collectionId; + + private String collectionName; + + private String collectionImage; + + private String creator; + + private Boolean shielded; + + private Boolean blacklisted; + + private Double royalty; + + public _Collection toModel() { + return _Collection.builder() + .collectionId(collectionId) + .collectionImage(collectionImage) + .collectionName(collectionName) + .shielded(shielded) + .blacklisted(blacklisted) + .creator(BaseMapper.mapAccount(creator)) + .royalty(royalty) + .build(); + } + + public static _Collection toModel(String collectionId) { + CollectionBaseView collection = + CollectionBaseView.find("collectionId = ?1", collectionId).firstResult(); + if (collection != null) { + return collection.toModel(); + } + return _Collection.builder().build(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/common/ExchangeRateEntity.java b/src/main/java/com/kryptokrauts/shared/dao/common/ExchangeRateEntity.java index b3c0a20..5b5647a 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/common/ExchangeRateEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/common/ExchangeRateEntity.java @@ -1,21 +1,21 @@ -package com.kryptokrauts.shared.dao.common; - -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "soonmarket_exchange_rate_latest_v") -public class ExchangeRateEntity extends PanacheEntityBase { - - @Id private String tokenSymbol; - - private Double usd; - - public static ExchangeRateEntity findByToken(String token) { - return ExchangeRateEntity.find("tokenSymbol = ?1", token).firstResult(); - } -} +package com.kryptokrauts.shared.dao.common; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "soonmarket_exchange_rate_latest_v") +public class ExchangeRateEntity extends PanacheEntityBase { + + @Id private String tokenSymbol; + + private Double usd; + + public static ExchangeRateEntity findByToken(String token) { + return ExchangeRateEntity.find("tokenSymbol = ?1", token).firstResult(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/common/MarketConfigEntity.java b/src/main/java/com/kryptokrauts/shared/dao/common/MarketConfigEntity.java index 62b8e3d..14dd850 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/common/MarketConfigEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/common/MarketConfigEntity.java @@ -1,66 +1,66 @@ -package com.kryptokrauts.shared.dao.common; - -import com.kryptokrauts.shared.model.common._MarketConfig; -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import io.quarkus.panache.common.Sort; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Entity -@Table(name = "atomicmarket_config") -public class MarketConfigEntity extends PanacheEntityBase { - - @Id private Long id; - - private Long blocknum; - - private Long blockTimestamp; - - private Double makerFee; - - private Double takerFee; - - private String version; - - private Integer auctionMinDurationSeconds; - - private Integer auctionMaxDurationSeconds; - - private Double auctionMinBidIncrease; - - private Integer auctionResetDurationSeconds; - - public Double getMarketFee() { - return makerFee + takerFee; - } - - public static MarketConfigEntity findOrGetNew(String version, Long blocknum) { - MarketConfigEntity entity = - MarketConfigEntity.find("version = ?1 AND blocknum", version, blocknum).firstResult(); - if (entity == null) { - entity = new MarketConfigEntity(); - } - return entity; - } - - public static MarketConfigEntity findLatest() { - return MarketConfigEntity.findAll(Sort.descending("id")).firstResult(); - } - - public _MarketConfig toModel() { - if (this.id != null) { - return _MarketConfig.builder() - .id(this.id) - .maker_fee(this.makerFee) - .taker_fee(this.takerFee) - .auctionMinBidIncrease(this.auctionMinBidIncrease) - .build(); - } - return null; - } -} +package com.kryptokrauts.shared.dao.common; + +import com.kryptokrauts.shared.model.common._MarketConfig; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import io.quarkus.panache.common.Sort; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Entity +@Table(name = "atomicmarket_config") +public class MarketConfigEntity extends PanacheEntityBase { + + @Id private Long id; + + private Long blocknum; + + private Long blockTimestamp; + + private Double makerFee; + + private Double takerFee; + + private String version; + + private Integer auctionMinDurationSeconds; + + private Integer auctionMaxDurationSeconds; + + private Double auctionMinBidIncrease; + + private Integer auctionResetDurationSeconds; + + public Double getMarketFee() { + return makerFee + takerFee; + } + + public static MarketConfigEntity findOrGetNew(String version, Long blocknum) { + MarketConfigEntity entity = + MarketConfigEntity.find("version = ?1 AND blocknum", version, blocknum).firstResult(); + if (entity == null) { + entity = new MarketConfigEntity(); + } + return entity; + } + + public static MarketConfigEntity findLatest() { + return MarketConfigEntity.findAll(Sort.descending("id")).firstResult(); + } + + public _MarketConfig toModel() { + if (this.id != null) { + return _MarketConfig.builder() + .id(this.id) + .maker_fee(this.makerFee) + .taker_fee(this.takerFee) + .auctionMinBidIncrease(this.auctionMinBidIncrease) + .build(); + } + return null; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/common/ProfileBaseView.java b/src/main/java/com/kryptokrauts/shared/dao/common/ProfileBaseView.java index 934f21d..32dcf7d 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/common/ProfileBaseView.java +++ b/src/main/java/com/kryptokrauts/shared/dao/common/ProfileBaseView.java @@ -1,33 +1,33 @@ -package com.kryptokrauts.shared.dao.common; - -import com.kryptokrauts.shared.model.common._Account; -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import io.quarkus.panache.common.Parameters; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Entity -@Table(name = "soonmarket_profile_base_v") -public class ProfileBaseView extends PanacheEntityBase { - - @Id private String account; - - private Boolean hasKyc; - - public _Account toModel() { - if (this.account != null) { - return _Account.builder().name(this.account).hasKYC(this.hasKyc).build(); - } - return null; - } - - public static ProfileBaseView findByAccount(String account) { - return ProfileBaseView.find("account = :account", Parameters.with("account", account)) - .firstResult(); - } -} +package com.kryptokrauts.shared.dao.common; + +import com.kryptokrauts.shared.model.common._Account; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import io.quarkus.panache.common.Parameters; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Entity +@Table(name = "soonmarket_profile_base_v") +public class ProfileBaseView extends PanacheEntityBase { + + @Id private String account; + + private Boolean hasKyc; + + public _Account toModel() { + if (this.account != null) { + return _Account.builder().name(this.account).hasKYC(this.hasKyc).build(); + } + return null; + } + + public static ProfileBaseView findByAccount(String account) { + return ProfileBaseView.find("account = :account", Parameters.with("account", account)) + .firstResult(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/common/SupportedAssetsEntity.java b/src/main/java/com/kryptokrauts/shared/dao/common/SupportedAssetsEntity.java index 51c74d9..853c529 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/common/SupportedAssetsEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/common/SupportedAssetsEntity.java @@ -1,21 +1,21 @@ -package com.kryptokrauts.shared.dao.common; - -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "atomicmarket_token") -public class SupportedAssetsEntity extends PanacheEntityBase { - - @Id private String contract; - - @Id private String token; - - private Integer precision; - - private Integer order; -} +package com.kryptokrauts.shared.dao.common; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "atomicmarket_token") +public class SupportedAssetsEntity extends PanacheEntityBase { + + @Id private String contract; + + @Id private String token; + + private Integer precision; + + private Integer order; +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/embeddables/Price.java b/src/main/java/com/kryptokrauts/shared/dao/embeddables/Price.java index eb4e200..1aa2a03 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/embeddables/Price.java +++ b/src/main/java/com/kryptokrauts/shared/dao/embeddables/Price.java @@ -1,36 +1,36 @@ -package com.kryptokrauts.shared.dao.embeddables; - -import com.kryptokrauts.shared.BaseMapper; -import com.kryptokrauts.shared.model.common._PriceInfo; -import io.quarkus.runtime.annotations.RegisterForReflection; -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@Embeddable -@RegisterForReflection -public class Price { - - private String token; - - private Double price; - - @Column(insertable = false, updatable = false) - private Double royalty; - - public _PriceInfo toModel() { - if (this.token != null) { - return BaseMapper.buildPriceInfo(this.token, this.price, this.royalty); - } - return null; - } -} +package com.kryptokrauts.shared.dao.embeddables; + +import com.kryptokrauts.shared.BaseMapper; +import com.kryptokrauts.shared.model.common._PriceInfo; +import io.quarkus.runtime.annotations.RegisterForReflection; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Embeddable +@RegisterForReflection +public class Price { + + private String token; + + private Double price; + + @Column(insertable = false, updatable = false) + private Double royalty; + + public _PriceInfo toModel() { + if (this.token != null) { + return BaseMapper.buildPriceInfo(this.token, this.price, this.royalty); + } + return null; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/realtime/AuctionBaseEntity.java b/src/main/java/com/kryptokrauts/shared/dao/realtime/AuctionBaseEntity.java index 95ee672..bf39798 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/realtime/AuctionBaseEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/realtime/AuctionBaseEntity.java @@ -1,42 +1,42 @@ -package com.kryptokrauts.shared.dao.realtime; - -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "soonmarket_auction_base_v") -public class AuctionBaseEntity extends PanacheEntityBase { - - @Id private Long auctionId; - - @Id private Long assetId; - - private String token; - - private Double collectionFee; - - private Double currentBid; - - private Boolean bundle; - - private Integer bundleSize; - - private String collectionId; - - private Integer index; - - private String highestBidder; - - public static AuctionBaseEntity findByAuctionId(Long auctionId) { - return AuctionBaseEntity.find("auctionId = ?1 AND index=1", auctionId).firstResult(); - } - - public static Long findNFTByAuctionId(Long auctionId) { - AuctionBaseEntity auction = AuctionBaseEntity.findByAuctionId(auctionId); - return auction != null ? auction.getAssetId() : null; - } -} +package com.kryptokrauts.shared.dao.realtime; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "soonmarket_auction_base_v") +public class AuctionBaseEntity extends PanacheEntityBase { + + @Id private Long auctionId; + + @Id private Long assetId; + + private String token; + + private Double collectionFee; + + private Double currentBid; + + private Boolean bundle; + + private Integer bundleSize; + + private String collectionId; + + private Integer index; + + private String highestBidder; + + public static AuctionBaseEntity findByAuctionId(Long auctionId) { + return AuctionBaseEntity.find("auctionId = ?1 AND index=1", auctionId).firstResult(); + } + + public static Long findNFTByAuctionId(Long auctionId) { + AuctionBaseEntity auction = AuctionBaseEntity.findByAuctionId(auctionId); + return auction != null ? auction.getAssetId() : null; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/realtime/BuyofferBaseEntity.java b/src/main/java/com/kryptokrauts/shared/dao/realtime/BuyofferBaseEntity.java index 36f0dfc..f411aa7 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/realtime/BuyofferBaseEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/realtime/BuyofferBaseEntity.java @@ -1,47 +1,47 @@ -package com.kryptokrauts.shared.dao.realtime; - -import com.kryptokrauts.shared.dao.embeddables.Price; -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "soonmarket_buyoffer_v") -public class BuyofferBaseEntity extends PanacheEntityBase { - - @Id private Long buyofferId; - - @Id private Long assetId; - - private Boolean bundle; - - private Integer bundleSize; - - private String collectionId; - - // to - private String buyer; - - // from - private String seller; - - private Price price; - - private String memo; - - private String declineMemo; - - private Integer index; - - public static BuyofferBaseEntity findByBuyofferId(Long buyofferId) { - return BuyofferBaseEntity.find("buyofferId = ?1 AND index=1", buyofferId).firstResult(); - } - - public static Long findNFTByBuyofferId(Long buyofferId) { - BuyofferBaseEntity buyoffer = BuyofferBaseEntity.findByBuyofferId(buyofferId); - return buyoffer != null ? buyoffer.getAssetId() : null; - } -} +package com.kryptokrauts.shared.dao.realtime; + +import com.kryptokrauts.shared.dao.embeddables.Price; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "soonmarket_buyoffer_v") +public class BuyofferBaseEntity extends PanacheEntityBase { + + @Id private Long buyofferId; + + @Id private Long assetId; + + private Boolean bundle; + + private Integer bundleSize; + + private String collectionId; + + // to + private String buyer; + + // from + private String seller; + + private Price price; + + private String memo; + + private String declineMemo; + + private Integer index; + + public static BuyofferBaseEntity findByBuyofferId(Long buyofferId) { + return BuyofferBaseEntity.find("buyofferId = ?1 AND index=1", buyofferId).firstResult(); + } + + public static Long findNFTByBuyofferId(Long buyofferId) { + BuyofferBaseEntity buyoffer = BuyofferBaseEntity.findByBuyofferId(buyofferId); + return buyoffer != null ? buyoffer.getAssetId() : null; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/realtime/ListingBaseEntity.java b/src/main/java/com/kryptokrauts/shared/dao/realtime/ListingBaseEntity.java index 0e28c01..66d8678 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/realtime/ListingBaseEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/realtime/ListingBaseEntity.java @@ -1,38 +1,38 @@ -package com.kryptokrauts.shared.dao.realtime; - -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "atomicmarket_sale") -public class ListingBaseEntity extends PanacheEntityBase { - - @Id private Long saleId; - - private Long primaryAssetId; - - private Double price; - - private String token; - - private Double collectionFee; - - private Boolean bundle; - - private Integer bundleSize; - - private String collectionId; - - public static ListingBaseEntity findByListingId(Long listingId) { - return ListingBaseEntity.find("saleId = ?1", listingId).firstResult(); - } - - public static Long findNFTBySaleId(Long saleId) { - ListingBaseEntity listing = ListingBaseEntity.findByListingId(saleId); - return listing != null ? listing.getPrimaryAssetId() : null; - } -} +package com.kryptokrauts.shared.dao.realtime; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "atomicmarket_sale") +public class ListingBaseEntity extends PanacheEntityBase { + + @Id private Long saleId; + + private Long primaryAssetId; + + private Double price; + + private String token; + + private Double collectionFee; + + private Boolean bundle; + + private Integer bundleSize; + + private String collectionId; + + public static ListingBaseEntity findByListingId(Long listingId) { + return ListingBaseEntity.find("saleId = ?1", listingId).firstResult(); + } + + public static Long findNFTBySaleId(Long saleId) { + ListingBaseEntity listing = ListingBaseEntity.findByListingId(saleId); + return listing != null ? listing.getPrimaryAssetId() : null; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/realtime/NotificationEntity.java b/src/main/java/com/kryptokrauts/shared/dao/realtime/NotificationEntity.java index 3caf1e8..bca0a93 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/realtime/NotificationEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/realtime/NotificationEntity.java @@ -1,56 +1,56 @@ -package com.kryptokrauts.shared.dao.realtime; - -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Entity -@Table(name = "soonmarket_notification") -public class NotificationEntity extends PanacheEntityBase { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - private Long globalSequence; - - private String actionType; - - private String account; - - private Long blockTimestamp; - - private Long blocknum; - - private Long actionId; - - private Boolean acknowledged; - - private Long acknowledgedDate; - - public static NotificationEntity findById( - Long globalSequence, String actionType, String account) { - return NotificationEntity.find( - "globalSequence = ?1 AND actionType = ?2 AND account =?3", - globalSequence, - actionType, - account) - .firstResult(); - } - - public static NotificationEntity findOrGetNew( - Long globalSequence, String actionType, String account) { - NotificationEntity entity = NotificationEntity.findById(globalSequence, actionType, account); - if (entity == null) { - entity = new NotificationEntity(); - } - return entity; - } -} +package com.kryptokrauts.shared.dao.realtime; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Entity +@Table(name = "soonmarket_notification") +public class NotificationEntity extends PanacheEntityBase { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private Long globalSequence; + + private String actionType; + + private String account; + + private Long blockTimestamp; + + private Long blocknum; + + private Long actionId; + + private Boolean acknowledged; + + private Long acknowledgedDate; + + public static NotificationEntity findById( + Long globalSequence, String actionType, String account) { + return NotificationEntity.find( + "globalSequence = ?1 AND actionType = ?2 AND account =?3", + globalSequence, + actionType, + account) + .firstResult(); + } + + public static NotificationEntity findOrGetNew( + Long globalSequence, String actionType, String account) { + NotificationEntity entity = NotificationEntity.findById(globalSequence, actionType, account); + if (entity == null) { + entity = new NotificationEntity(); + } + return entity; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/realtime/OpenListingBaseEntity.java b/src/main/java/com/kryptokrauts/shared/dao/realtime/OpenListingBaseEntity.java index fee9c30..337ff2a 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/realtime/OpenListingBaseEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/realtime/OpenListingBaseEntity.java @@ -1,31 +1,31 @@ -package com.kryptokrauts.shared.dao.realtime; - -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "soonmarket_listing_open_v") -public class OpenListingBaseEntity extends PanacheEntityBase { - - @Id private Long listingId; - - private Long assetId; - - private Double listingRoyalty; - - private Boolean bundle; - - private Integer bundleSize; - - private String collectionId; - - private Integer index; - - public static OpenListingBaseEntity findByListingId(Long listingId) { - return OpenListingBaseEntity.find("listingId = ?1 AND index = 1", listingId).firstResult(); - } -} +package com.kryptokrauts.shared.dao.realtime; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "soonmarket_listing_open_v") +public class OpenListingBaseEntity extends PanacheEntityBase { + + @Id private Long listingId; + + private Long assetId; + + private Double listingRoyalty; + + private Boolean bundle; + + private Integer bundleSize; + + private String collectionId; + + private Integer index; + + public static OpenListingBaseEntity findByListingId(Long listingId) { + return OpenListingBaseEntity.find("listingId = ?1 AND index = 1", listingId).firstResult(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/realtime/TaskEntity.java b/src/main/java/com/kryptokrauts/shared/dao/realtime/TaskEntity.java index ab87990..5699223 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/realtime/TaskEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/realtime/TaskEntity.java @@ -1,65 +1,65 @@ -package com.kryptokrauts.shared.dao.realtime; - -import com.kryptokrauts.shared.enums.TaskType; -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import lombok.Getter; - -@Getter -@Entity(name = "soonmarket_open_task_v") -public class TaskEntity extends PanacheEntityBase { - - @Id private String id; - - private String account; - - private Long blockTimestamp; - - private Long actionId; - - private String taskType; - - private Boolean bundle; - - private Integer bundleSize; - - private Double price; - - private String token; - - /** asset info */ - private Long assetId; - - private String assetName; - - private String assetMediaType; - - private String assetMedia; - - private String assetMediaPreview; - - private Long editionSize; - - private Long serial; - - /** collection info */ - private String collectionId; - - private String collectionName; - - private String collectionImage; - - private Boolean shielded; - - private Boolean blacklisted; - - public static TaskEntity findById(Long actionId, TaskType actionType, String account) { - return TaskEntity.find( - "actionId = ?1 AND taskType = ?2 AND account =?3", - actionId, - actionType.toString(), - account) - .firstResult(); - } -} +package com.kryptokrauts.shared.dao.realtime; + +import com.kryptokrauts.shared.enums.TaskType; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import lombok.Getter; + +@Getter +@Entity(name = "soonmarket_open_task_v") +public class TaskEntity extends PanacheEntityBase { + + @Id private String id; + + private String account; + + private Long blockTimestamp; + + private Long actionId; + + private String taskType; + + private Boolean bundle; + + private Integer bundleSize; + + private Double price; + + private String token; + + /** asset info */ + private Long assetId; + + private String assetName; + + private String assetMediaType; + + private String assetMedia; + + private String assetMediaPreview; + + private Long editionSize; + + private Long serial; + + /** collection info */ + private String collectionId; + + private String collectionName; + + private String collectionImage; + + private Boolean shielded; + + private Boolean blacklisted; + + public static TaskEntity findById(Long actionId, TaskType actionType, String account) { + return TaskEntity.find( + "actionId = ?1 AND taskType = ?2 AND account =?3", + actionId, + actionType.toString(), + account) + .firstResult(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/dao/realtime/TransferEntity.java b/src/main/java/com/kryptokrauts/shared/dao/realtime/TransferEntity.java index a0f9892..76f86e7 100644 --- a/src/main/java/com/kryptokrauts/shared/dao/realtime/TransferEntity.java +++ b/src/main/java/com/kryptokrauts/shared/dao/realtime/TransferEntity.java @@ -1,29 +1,29 @@ -package com.kryptokrauts.shared.dao.realtime; - -import io.quarkus.hibernate.orm.panache.PanacheEntityBase; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import lombok.Getter; - -@Getter -@Entity -@Table(name = "atomicassets_transfer") -public class TransferEntity extends PanacheEntityBase { - - @Id private Long transferId; - - private Long primaryAssetId; - - private String sender; - - private String receiver; - - private String collectionId; - - private Boolean bundle; - - public static TransferEntity findByTransferId(Long transferId) { - return TransferEntity.find("transferId = ?1", transferId).firstResult(); - } -} +package com.kryptokrauts.shared.dao.realtime; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter +@Entity +@Table(name = "atomicassets_transfer") +public class TransferEntity extends PanacheEntityBase { + + @Id private Long transferId; + + private Long primaryAssetId; + + private String sender; + + private String receiver; + + private String collectionId; + + private Boolean bundle; + + public static TransferEntity findByTransferId(Long transferId) { + return TransferEntity.find("transferId = ?1", transferId).firstResult(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/enums/MarketType.java b/src/main/java/com/kryptokrauts/shared/enums/MarketType.java index e52b596..37ac549 100644 --- a/src/main/java/com/kryptokrauts/shared/enums/MarketType.java +++ b/src/main/java/com/kryptokrauts/shared/enums/MarketType.java @@ -1,9 +1,9 @@ -package com.kryptokrauts.shared.enums; - -public enum MarketType { - auction, - listing, - buyoffer, - otc, - transfer -} +package com.kryptokrauts.shared.enums; + +public enum MarketType { + auction, + listing, + buyoffer, + otc, + transfer +} diff --git a/src/main/java/com/kryptokrauts/shared/enums/NotificationContext.java b/src/main/java/com/kryptokrauts/shared/enums/NotificationContext.java index d41c391..713c03b 100644 --- a/src/main/java/com/kryptokrauts/shared/enums/NotificationContext.java +++ b/src/main/java/com/kryptokrauts/shared/enums/NotificationContext.java @@ -1,6 +1,6 @@ -package com.kryptokrauts.shared.enums; - -public enum NotificationContext { - notification, - task; -} +package com.kryptokrauts.shared.enums; + +public enum NotificationContext { + notification, + task; +} diff --git a/src/main/java/com/kryptokrauts/shared/enums/NotificationType.java b/src/main/java/com/kryptokrauts/shared/enums/NotificationType.java index f028782..58c6976 100644 --- a/src/main/java/com/kryptokrauts/shared/enums/NotificationType.java +++ b/src/main/java/com/kryptokrauts/shared/enums/NotificationType.java @@ -1,15 +1,15 @@ -package com.kryptokrauts.shared.enums; - -public enum NotificationType { - offer_received, - offer_declined, - offer_accepted, - auction_outbid, - nft_received, - royalty_decreased, - royalty_received, - royalty_received_auction, - royalty_received_buyoffer, - royalty_received_listing, - listing_sold -} +package com.kryptokrauts.shared.enums; + +public enum NotificationType { + offer_received, + offer_declined, + offer_accepted, + auction_outbid, + nft_received, + royalty_decreased, + royalty_received, + royalty_received_auction, + royalty_received_buyoffer, + royalty_received_listing, + listing_sold +} diff --git a/src/main/java/com/kryptokrauts/shared/enums/TaskType.java b/src/main/java/com/kryptokrauts/shared/enums/TaskType.java index ea5779b..5f7533a 100644 --- a/src/main/java/com/kryptokrauts/shared/enums/TaskType.java +++ b/src/main/java/com/kryptokrauts/shared/enums/TaskType.java @@ -1,9 +1,9 @@ -package com.kryptokrauts.shared.enums; - -public enum TaskType { - auction_won_claim_nfts, - auction_sold_claim_funds, - auction_end_zero_bids, - invalid_listing, - invalid_offer -} +package com.kryptokrauts.shared.enums; + +public enum TaskType { + auction_won_claim_nfts, + auction_sold_claim_funds, + auction_end_zero_bids, + invalid_listing, + invalid_offer +} diff --git a/src/main/java/com/kryptokrauts/shared/model/_BaseModel.java b/src/main/java/com/kryptokrauts/shared/model/_BaseModel.java index 9e959a8..1134d55 100644 --- a/src/main/java/com/kryptokrauts/shared/model/_BaseModel.java +++ b/src/main/java/com/kryptokrauts/shared/model/_BaseModel.java @@ -1,25 +1,25 @@ -package com.kryptokrauts.shared.model; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.kryptokrauts.shared.RandomNumberHolder; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _BaseModel { - - public static final ObjectMapper objectMapper = new ObjectMapper(); - - private Long uiid; - - public Long getUiid() { - return Math.abs(RandomNumberHolder.randomNumberGenerator.nextLong()); - } -} +package com.kryptokrauts.shared.model; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.kryptokrauts.shared.RandomNumberHolder; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _BaseModel { + + public static final ObjectMapper objectMapper = new ObjectMapper(); + + private Long uiid; + + public Long getUiid() { + return Math.abs(RandomNumberHolder.randomNumberGenerator.nextLong()); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/model/common/_Account.java b/src/main/java/com/kryptokrauts/shared/model/common/_Account.java index 21cf937..7f39288 100644 --- a/src/main/java/com/kryptokrauts/shared/model/common/_Account.java +++ b/src/main/java/com/kryptokrauts/shared/model/common/_Account.java @@ -1,31 +1,31 @@ -package com.kryptokrauts.shared.model.common; - -import com.kryptokrauts.shared.model._BaseModel; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@Getter -@Setter -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -@SuperBuilder -public class _Account extends _BaseModel { - - private String name; - - private Boolean image; - - private Boolean hasKYC; - - public String getImage() { - if (this.image == null || this.image == false) { - return "https://media.soon.market/images/profile_placeholder.png"; - } - return "https://media.soon.market/images/" + this.name; - } -} +package com.kryptokrauts.shared.model.common; + +import com.kryptokrauts.shared.model._BaseModel; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@Getter +@Setter +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +public class _Account extends _BaseModel { + + private String name; + + private Boolean image; + + private Boolean hasKYC; + + public String getImage() { + if (this.image == null || this.image == false) { + return "https://media.soon.market/images/profile_placeholder.png"; + } + return "https://media.soon.market/images/" + this.name; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/model/common/_Asset.java b/src/main/java/com/kryptokrauts/shared/model/common/_Asset.java index 7aaebbb..f56548b 100644 --- a/src/main/java/com/kryptokrauts/shared/model/common/_Asset.java +++ b/src/main/java/com/kryptokrauts/shared/model/common/_Asset.java @@ -1,38 +1,38 @@ -package com.kryptokrauts.shared.model.common; - -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.kryptokrauts.shared.model._BaseModel; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@JsonPropertyOrder(alphabetic = true) -@Getter -@Setter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _Asset extends _BaseModel { - - private Long assetId; - - private Long templateId; - - private String assetName; - - private String assetMediaType; - - private String assetMedia; - - private String assetMediaPreview; - - private Long editionSize; - - private Long serial; - - private _Account owner; -} +package com.kryptokrauts.shared.model.common; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.kryptokrauts.shared.model._BaseModel; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@JsonPropertyOrder(alphabetic = true) +@Getter +@Setter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _Asset extends _BaseModel { + + private Long assetId; + + private Long templateId; + + private String assetName; + + private String assetMediaType; + + private String assetMedia; + + private String assetMediaPreview; + + private Long editionSize; + + private Long serial; + + private _Account owner; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/common/_BlacklistMetadata.java b/src/main/java/com/kryptokrauts/shared/model/common/_BlacklistMetadata.java index 91ed373..f6926e5 100644 --- a/src/main/java/com/kryptokrauts/shared/model/common/_BlacklistMetadata.java +++ b/src/main/java/com/kryptokrauts/shared/model/common/_BlacklistMetadata.java @@ -1,25 +1,25 @@ -package com.kryptokrauts.shared.model.common; - -import com.kryptokrauts.shared.model._BaseModel; -import io.quarkus.runtime.annotations.RegisterForReflection; -import java.util.Date; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@Getter -@Setter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _BlacklistMetadata extends _BaseModel { - - private Date blacklistDate; - - private String reason; - - private String actor; -} +package com.kryptokrauts.shared.model.common; + +import com.kryptokrauts.shared.model._BaseModel; +import io.quarkus.runtime.annotations.RegisterForReflection; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@Getter +@Setter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _BlacklistMetadata extends _BaseModel { + + private Date blacklistDate; + + private String reason; + + private String actor; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/common/_Collection.java b/src/main/java/com/kryptokrauts/shared/model/common/_Collection.java index c049a1c..d37d6b6 100644 --- a/src/main/java/com/kryptokrauts/shared/model/common/_Collection.java +++ b/src/main/java/com/kryptokrauts/shared/model/common/_Collection.java @@ -1,44 +1,44 @@ -package com.kryptokrauts.shared.model.common; - -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.kryptokrauts.shared.model._BaseModel; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@JsonPropertyOrder(alphabetic = true) -@Getter -@Setter -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -@SuperBuilder -public class _Collection extends _BaseModel { - private String collectionId; - - private String collectionName; - - private String collectionImage; - - // private String category; - - private _Account creator; - - private Double royalty; - - // private Boolean hasKYC; - - private Boolean shielded; - - private Boolean blacklisted; - - public Double getRoyalty() { - if (this.royalty != null) { - return this.royalty * 100; - } - return null; - } -} +package com.kryptokrauts.shared.model.common; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.kryptokrauts.shared.model._BaseModel; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@JsonPropertyOrder(alphabetic = true) +@Getter +@Setter +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +public class _Collection extends _BaseModel { + private String collectionId; + + private String collectionName; + + private String collectionImage; + + // private String category; + + private _Account creator; + + private Double royalty; + + // private Boolean hasKYC; + + private Boolean shielded; + + private Boolean blacklisted; + + public Double getRoyalty() { + if (this.royalty != null) { + return this.royalty * 100; + } + return null; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/model/common/_MarketConfig.java b/src/main/java/com/kryptokrauts/shared/model/common/_MarketConfig.java index 85ee093..e4ebb34 100644 --- a/src/main/java/com/kryptokrauts/shared/model/common/_MarketConfig.java +++ b/src/main/java/com/kryptokrauts/shared/model/common/_MarketConfig.java @@ -1,29 +1,29 @@ -package com.kryptokrauts.shared.model.common; - -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@Builder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _MarketConfig { - - private Long id; - - private Double maker_fee; - - private Double taker_fee; - - private Double auctionMinBidIncrease; - - public Double getMarketFee() { - return this.maker_fee + this.taker_fee; - } -} +package com.kryptokrauts.shared.model.common; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@Builder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _MarketConfig { + + private Long id; + + private Double maker_fee; + + private Double taker_fee; + + private Double auctionMinBidIncrease; + + public Double getMarketFee() { + return this.maker_fee + this.taker_fee; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/model/common/_PriceInfo.java b/src/main/java/com/kryptokrauts/shared/model/common/_PriceInfo.java index c1d61c9..383caad 100644 --- a/src/main/java/com/kryptokrauts/shared/model/common/_PriceInfo.java +++ b/src/main/java/com/kryptokrauts/shared/model/common/_PriceInfo.java @@ -1,53 +1,53 @@ -package com.kryptokrauts.shared.model.common; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.kryptokrauts.shared.model._BaseModel; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@JsonInclude(Include.NON_NULL) -@Getter -@Setter -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -@SuperBuilder -public class _PriceInfo extends _BaseModel { - - private String paymentAsset; - - private Double price; - - private Double priceUSD; - - private Double sellerReceivedPrice; - - private Double sellerReceivedPriceUSD; - - private Double royalty; - - private Double royaltyPrice; - - private Double royaltyUSD; - - private Double makerMarketFee; - - private Double takerMarketFee; - - private Double marketFeePrice; - - private Double marketFeeUSD; - - private Double makerMarketFeeUSD; - - private Double takerMarketFeeUSD; - - private String rawPrice; - - private Boolean bundle; -} +package com.kryptokrauts.shared.model.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.kryptokrauts.shared.model._BaseModel; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@JsonInclude(Include.NON_NULL) +@Getter +@Setter +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +public class _PriceInfo extends _BaseModel { + + private String paymentAsset; + + private Double price; + + private Double priceUSD; + + private Double sellerReceivedPrice; + + private Double sellerReceivedPriceUSD; + + private Double royalty; + + private Double royaltyPrice; + + private Double royaltyUSD; + + private Double makerMarketFee; + + private Double takerMarketFee; + + private Double marketFeePrice; + + private Double marketFeeUSD; + + private Double makerMarketFeeUSD; + + private Double takerMarketFeeUSD; + + private String rawPrice; + + private Boolean bundle; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/_Notification.java b/src/main/java/com/kryptokrauts/shared/model/realtime/_Notification.java index d25bec9..7cc7b8f 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/_Notification.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/_Notification.java @@ -1,31 +1,31 @@ -package com.kryptokrauts.shared.model.realtime; - -import com.kryptokrauts.shared.enums.NotificationType; -import com.kryptokrauts.shared.model._BaseModel; -import com.kryptokrauts.shared.model.common._Collection; -import io.quarkus.runtime.annotations.RegisterForReflection; -import java.util.Date; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _Notification extends _BaseModel { - - private Long notificationId; - - private Date receivedDate; - - private boolean acknowlegded; - - private Date acknowlegdedDate; - - private NotificationType type; - - private _Collection collection; -} +package com.kryptokrauts.shared.model.realtime; + +import com.kryptokrauts.shared.enums.NotificationType; +import com.kryptokrauts.shared.model._BaseModel; +import com.kryptokrauts.shared.model.common._Collection; +import io.quarkus.runtime.annotations.RegisterForReflection; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _Notification extends _BaseModel { + + private Long notificationId; + + private Date receivedDate; + + private boolean acknowlegded; + + private Date acknowlegdedDate; + + private NotificationType type; + + private _Collection collection; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/_Task.java b/src/main/java/com/kryptokrauts/shared/model/realtime/_Task.java index db75e98..12bab59 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/_Task.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/_Task.java @@ -1,33 +1,33 @@ -package com.kryptokrauts.shared.model.realtime; - -import com.kryptokrauts.shared.enums.MarketType; -import com.kryptokrauts.shared.model._BaseModel; -import com.kryptokrauts.shared.model.common._Asset; -import com.kryptokrauts.shared.model.common._Collection; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@Getter -@Setter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public abstract class _Task extends _BaseModel { - - private _Collection collection; - - private _Asset asset; - - private Boolean bundle; - - private Integer bundleSize; - - private String type; - - public abstract MarketType getMarketType(); -} +package com.kryptokrauts.shared.model.realtime; + +import com.kryptokrauts.shared.enums.MarketType; +import com.kryptokrauts.shared.model._BaseModel; +import com.kryptokrauts.shared.model.common._Asset; +import com.kryptokrauts.shared.model.common._Collection; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@Getter +@Setter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public abstract class _Task extends _BaseModel { + + private _Collection collection; + + private _Asset asset; + + private Boolean bundle; + + private Integer bundleSize; + + private String type; + + public abstract MarketType getMarketType(); +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_AuctionOutbidNotification.java b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_AuctionOutbidNotification.java index fcde8e6..41a3234 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_AuctionOutbidNotification.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_AuctionOutbidNotification.java @@ -1,31 +1,31 @@ -package com.kryptokrauts.shared.model.realtime.notification; - -import com.kryptokrauts.shared.model.common._Account; -import com.kryptokrauts.shared.model.common._Asset; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Notification; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@Getter -@Setter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _AuctionOutbidNotification extends _Notification { - - private Long auctionId; - - private _PriceInfo currentBid; - - private _Asset asset; - - private Integer bundleSize; - - private _Account bidder; -} +package com.kryptokrauts.shared.model.realtime.notification; + +import com.kryptokrauts.shared.model.common._Account; +import com.kryptokrauts.shared.model.common._Asset; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Notification; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@Getter +@Setter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _AuctionOutbidNotification extends _Notification { + + private Long auctionId; + + private _PriceInfo currentBid; + + private _Asset asset; + + private Integer bundleSize; + + private _Account bidder; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_ListingSoldNotification.java b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_ListingSoldNotification.java index c93449b..d65f6ec 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_ListingSoldNotification.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_ListingSoldNotification.java @@ -1,24 +1,24 @@ -package com.kryptokrauts.shared.model.realtime.notification; - -import com.kryptokrauts.shared.model.common._Asset; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Notification; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _ListingSoldNotification extends _Notification { - - private _Asset asset; - - private _PriceInfo priceInfo; - - private Integer bundleSize; -} +package com.kryptokrauts.shared.model.realtime.notification; + +import com.kryptokrauts.shared.model.common._Asset; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Notification; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _ListingSoldNotification extends _Notification { + + private _Asset asset; + + private _PriceInfo priceInfo; + + private Integer bundleSize; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_OfferNotification.java b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_OfferNotification.java index c59bd44..820571b 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_OfferNotification.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_OfferNotification.java @@ -1,35 +1,35 @@ -package com.kryptokrauts.shared.model.realtime.notification; - -import com.kryptokrauts.shared.model.common._Account; -import com.kryptokrauts.shared.model.common._Asset; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Notification; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@Getter -@Setter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _OfferNotification extends _Notification { - - private Long buyofferId; - - private _PriceInfo price; - - private _Asset asset; - - private Integer bundleSize; - - private _Account seller; - - private _Account buyer; - - private String message; -} +package com.kryptokrauts.shared.model.realtime.notification; + +import com.kryptokrauts.shared.model.common._Account; +import com.kryptokrauts.shared.model.common._Asset; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Notification; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@Getter +@Setter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _OfferNotification extends _Notification { + + private Long buyofferId; + + private _PriceInfo price; + + private _Asset asset; + + private Integer bundleSize; + + private _Account seller; + + private _Account buyer; + + private String message; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_RoyaltyDecreasedNotification.java b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_RoyaltyDecreasedNotification.java index 0b024ae..8ba4f03 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_RoyaltyDecreasedNotification.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_RoyaltyDecreasedNotification.java @@ -1,20 +1,20 @@ -package com.kryptokrauts.shared.model.realtime.notification; - -import com.kryptokrauts.shared.model.realtime._Notification; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _RoyaltyDecreasedNotification extends _Notification { - - private Double oldValue; - - private Double newValue; -} +package com.kryptokrauts.shared.model.realtime.notification; + +import com.kryptokrauts.shared.model.realtime._Notification; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _RoyaltyDecreasedNotification extends _Notification { + + private Double oldValue; + + private Double newValue; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_RoyaltyReceivedNotification.java b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_RoyaltyReceivedNotification.java index d1956f5..d83b7f5 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_RoyaltyReceivedNotification.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_RoyaltyReceivedNotification.java @@ -1,26 +1,26 @@ -package com.kryptokrauts.shared.model.realtime.notification; - -import com.kryptokrauts.shared.model.common._Asset; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Notification; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _RoyaltyReceivedNotification extends _Notification { - - private _PriceInfo royaltyAmount; - - private _Asset asset; - - private Boolean bundle; - - private String marketType; -} +package com.kryptokrauts.shared.model.realtime.notification; + +import com.kryptokrauts.shared.model.common._Asset; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Notification; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _RoyaltyReceivedNotification extends _Notification { + + private _PriceInfo royaltyAmount; + + private _Asset asset; + + private Boolean bundle; + + private String marketType; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_TransferNotification.java b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_TransferNotification.java index 2aeb225..3a5ecf0 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_TransferNotification.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/notification/_TransferNotification.java @@ -1,27 +1,27 @@ -package com.kryptokrauts.shared.model.realtime.notification; - -import com.kryptokrauts.shared.model.common._Account; -import com.kryptokrauts.shared.model.common._Asset; -import com.kryptokrauts.shared.model.realtime._Notification; - -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _TransferNotification extends _Notification { - - private Long transferId; - - private _Asset asset; - - private _Account from; - - private Boolean bundle; -} +package com.kryptokrauts.shared.model.realtime.notification; + +import com.kryptokrauts.shared.model.common._Account; +import com.kryptokrauts.shared.model.common._Asset; +import com.kryptokrauts.shared.model.realtime._Notification; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _TransferNotification extends _Notification { + + private Long transferId; + + private _Asset asset; + + private _Account from; + + private Boolean bundle; +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/task/_AuctionEndClaimNFTs.java b/src/main/java/com/kryptokrauts/shared/model/realtime/task/_AuctionEndClaimNFTs.java index f312fdb..5d18d13 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/task/_AuctionEndClaimNFTs.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/task/_AuctionEndClaimNFTs.java @@ -1,27 +1,27 @@ -package com.kryptokrauts.shared.model.realtime.task; - -import com.kryptokrauts.shared.enums.MarketType; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Task; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _AuctionEndClaimNFTs extends _Task { - - private Long auctionId; - - private _PriceInfo winningBid; - - @Override - public MarketType getMarketType() { - return MarketType.auction; - } -} +package com.kryptokrauts.shared.model.realtime.task; + +import com.kryptokrauts.shared.enums.MarketType; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Task; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _AuctionEndClaimNFTs extends _Task { + + private Long auctionId; + + private _PriceInfo winningBid; + + @Override + public MarketType getMarketType() { + return MarketType.auction; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/task/_AuctionEndZeroBids.java b/src/main/java/com/kryptokrauts/shared/model/realtime/task/_AuctionEndZeroBids.java index 2816a6d..e3abe51 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/task/_AuctionEndZeroBids.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/task/_AuctionEndZeroBids.java @@ -1,27 +1,27 @@ -package com.kryptokrauts.shared.model.realtime.task; - -import com.kryptokrauts.shared.enums.MarketType; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Task; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _AuctionEndZeroBids extends _Task { - - private _PriceInfo startingBid; - - private Long auctionId; - - @Override - public MarketType getMarketType() { - return MarketType.auction; - } -} +package com.kryptokrauts.shared.model.realtime.task; + +import com.kryptokrauts.shared.enums.MarketType; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Task; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _AuctionEndZeroBids extends _Task { + + private _PriceInfo startingBid; + + private Long auctionId; + + @Override + public MarketType getMarketType() { + return MarketType.auction; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/task/_InvalidListing.java b/src/main/java/com/kryptokrauts/shared/model/realtime/task/_InvalidListing.java index 645461e..d76f04b 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/task/_InvalidListing.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/task/_InvalidListing.java @@ -1,27 +1,27 @@ -package com.kryptokrauts.shared.model.realtime.task; - -import com.kryptokrauts.shared.enums.MarketType; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Task; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _InvalidListing extends _Task { - - private Long listingId; - - private _PriceInfo price; - - @Override - public MarketType getMarketType() { - return MarketType.listing; - } -} +package com.kryptokrauts.shared.model.realtime.task; + +import com.kryptokrauts.shared.enums.MarketType; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Task; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _InvalidListing extends _Task { + + private Long listingId; + + private _PriceInfo price; + + @Override + public MarketType getMarketType() { + return MarketType.listing; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/model/realtime/task/_InvalidOffer.java b/src/main/java/com/kryptokrauts/shared/model/realtime/task/_InvalidOffer.java index 9b6442a..c79d87c 100644 --- a/src/main/java/com/kryptokrauts/shared/model/realtime/task/_InvalidOffer.java +++ b/src/main/java/com/kryptokrauts/shared/model/realtime/task/_InvalidOffer.java @@ -1,27 +1,27 @@ -package com.kryptokrauts.shared.model.realtime.task; - -import com.kryptokrauts.shared.enums.MarketType; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Task; -import io.quarkus.runtime.annotations.RegisterForReflection; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@RegisterForReflection -@AllArgsConstructor -@NoArgsConstructor -public class _InvalidOffer extends _Task { - - private Long buyofferId; - - private _PriceInfo price; - - @Override - public MarketType getMarketType() { - return MarketType.buyoffer; - } -} +package com.kryptokrauts.shared.model.realtime.task; + +import com.kryptokrauts.shared.enums.MarketType; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Task; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@RegisterForReflection +@AllArgsConstructor +@NoArgsConstructor +public class _InvalidOffer extends _Task { + + private Long buyofferId; + + private _PriceInfo price; + + @Override + public MarketType getMarketType() { + return MarketType.buyoffer; + } +} diff --git a/src/main/java/com/kryptokrauts/shared/service/NotificationTransformService.java b/src/main/java/com/kryptokrauts/shared/service/NotificationTransformService.java index 1466a1d..856f9c6 100644 --- a/src/main/java/com/kryptokrauts/shared/service/NotificationTransformService.java +++ b/src/main/java/com/kryptokrauts/shared/service/NotificationTransformService.java @@ -1,180 +1,180 @@ -package com.kryptokrauts.shared.service; - -import org.apache.commons.lang3.StringUtils; - -import com.kryptokrauts.shared.BaseMapper; -import com.kryptokrauts.shared.dao.common.AssetBaseEntity; -import com.kryptokrauts.shared.dao.common.CollectionBaseView; -import com.kryptokrauts.shared.dao.realtime.AuctionBaseEntity; -import com.kryptokrauts.shared.dao.realtime.BuyofferBaseEntity; -import com.kryptokrauts.shared.dao.realtime.ListingBaseEntity; -import com.kryptokrauts.shared.dao.realtime.NotificationEntity; -import com.kryptokrauts.shared.dao.realtime.OpenListingBaseEntity; -import com.kryptokrauts.shared.dao.realtime.TransferEntity; -import com.kryptokrauts.shared.enums.NotificationType; -import com.kryptokrauts.shared.model.common._Asset; -import com.kryptokrauts.shared.model.common._Collection; -import com.kryptokrauts.shared.model.common._PriceInfo; -import com.kryptokrauts.shared.model.realtime._Notification; -import com.kryptokrauts.shared.model.realtime.notification._AuctionOutbidNotification; -import com.kryptokrauts.shared.model.realtime.notification._ListingSoldNotification; -import com.kryptokrauts.shared.model.realtime.notification._OfferNotification; -import com.kryptokrauts.shared.model.realtime.notification._RoyaltyDecreasedNotification; -import com.kryptokrauts.shared.model.realtime.notification._RoyaltyReceivedNotification; -import com.kryptokrauts.shared.model.realtime.notification._TransferNotification; - -import jakarta.enterprise.context.ApplicationScoped; - -@ApplicationScoped -public class NotificationTransformService { - - public _Notification toModel(NotificationEntity entity) { - if (entity.getActionId() != null && StringUtils.isNotBlank(entity.getActionType())) { - return switch (entity.getActionType()) { - case "offer_declined" -> toOfferNotification(entity, true); - case "offer_received" -> toOfferNotification(entity, false); - case "offer_accepted" -> toOfferNotification(entity, false); - case "auction_outbid" -> toAuctionOutbidNotification(entity); - case "nft_received" -> toTransferNotification(entity); - case "royalty_decreased" -> toRoyaltyDecreasedNotification(entity); - case "royalty_received_listing" -> toRoyaltyReceivedNotification(entity, "listing"); - case "royalty_received_buyoffer" -> toRoyaltyReceivedNotification(entity, "buyoffer"); - case "royalty_received_auction" -> toRoyaltyReceivedNotification(entity, "auction"); - case "listing_sold" -> toListingSoldNotification(entity); - default -> null; - }; - } - return null; - } - - private _OfferNotification toOfferNotification( - NotificationEntity entity, boolean useDeclineMemo) { - BuyofferBaseEntity buyoffer = BuyofferBaseEntity.findByBuyofferId(entity.getActionId()); - return _OfferNotification.builder() - .acknowlegded(entity.getAcknowledged()) - .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) - .asset(AssetBaseEntity.toModel(buyoffer.getAssetId())) - .bundleSize(buyoffer.getBundleSize()) - .buyer(BaseMapper.mapAccount(buyoffer.getBuyer())) - .seller(BaseMapper.mapAccount(buyoffer.getSeller())) - .collection(CollectionBaseView.toModel(buyoffer.getCollectionId())) - .notificationId(entity.getId()) - .buyofferId(entity.getActionId()) - .price(buyoffer.getPrice().toModel()) - .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) - .type(NotificationType.valueOf(entity.getActionType())) - .message(useDeclineMemo ? buyoffer.getDeclineMemo() : buyoffer.getMemo()) - .build(); - } - - private _TransferNotification toTransferNotification(NotificationEntity entity) { - TransferEntity transfer = TransferEntity.findByTransferId(entity.getActionId()); - return _TransferNotification.builder() - .acknowlegded(entity.getAcknowledged()) - .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) - .asset(AssetBaseEntity.toModel(transfer.getPrimaryAssetId())) - .bundle(transfer.getBundle()) - .from(BaseMapper.mapAccount(transfer.getSender())) - .collection(CollectionBaseView.toModel(transfer.getCollectionId())) - .notificationId(entity.getId()) - .transferId(transfer.getTransferId()) - .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) - .type(NotificationType.nft_received) - .build(); - } - - private _RoyaltyDecreasedNotification toRoyaltyDecreasedNotification(NotificationEntity entity) { - OpenListingBaseEntity listing = OpenListingBaseEntity.findById(entity.getActionId()); - _Collection collection = CollectionBaseView.toModel(listing.getCollectionId()); - return _RoyaltyDecreasedNotification.builder() - .acknowlegded(entity.getAcknowledged()) - .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) - .collection(collection) - .notificationId(entity.getId()) - .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) - .oldValue(listing.getListingRoyalty()) - .newValue(collection.getRoyalty()) - .type(NotificationType.royalty_decreased) - .build(); - } - - private _RoyaltyReceivedNotification toRoyaltyReceivedNotification( - NotificationEntity entity, String type) { - _PriceInfo priceInfo = null; - boolean bundle = false; - CollectionBaseView collection = null; - _Asset asset = null; - if ("listing".equals(type)) { - ListingBaseEntity listing = ListingBaseEntity.findByListingId(entity.getActionId()); - priceInfo = - BaseMapper.buildPriceInfo( - listing.getToken(), listing.getPrice(), listing.getCollectionFee()); - bundle = listing.getBundle(); - collection = CollectionBaseView.findById(listing.getCollectionId()); - asset = AssetBaseEntity.toModel(listing.getPrimaryAssetId()); - } else if ("buyoffer".equals(type)) { - BuyofferBaseEntity buyoffer = BuyofferBaseEntity.findByBuyofferId(entity.getActionId()); - priceInfo = buyoffer.getPrice().toModel(); - bundle = buyoffer.getBundle(); - collection = CollectionBaseView.findById(buyoffer.getCollectionId()); - asset = AssetBaseEntity.toModel(buyoffer.getAssetId()); - } else if ("auction".equals(type)) { - AuctionBaseEntity auction = AuctionBaseEntity.findByAuctionId(entity.getActionId()); - priceInfo = - BaseMapper.buildPriceInfo( - auction.getToken(), auction.getCurrentBid(), auction.getCollectionFee()); - bundle = auction.getBundle(); - collection = CollectionBaseView.findById(auction.getCollectionId()); - asset = AssetBaseEntity.toModel(auction.getAssetId()); - } - - return _RoyaltyReceivedNotification.builder() - .acknowlegded(entity.getAcknowledged()) - .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) - .collection(collection.toModel()) - .asset(asset) - .notificationId(entity.getId()) - .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) - .bundle(bundle) - .royaltyAmount(priceInfo) - .type(NotificationType.royalty_received) - .marketType(type) - .build(); - } - - private _ListingSoldNotification toListingSoldNotification(NotificationEntity entity) { - ListingBaseEntity listing = ListingBaseEntity.findByListingId(entity.getActionId()); - return _ListingSoldNotification.builder() - .acknowlegded(entity.getAcknowledged()) - .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) - .asset(AssetBaseEntity.toModel(listing.getPrimaryAssetId())) - .bundleSize(listing.getBundleSize()) - .collection(CollectionBaseView.toModel(listing.getCollectionId())) - .notificationId(entity.getId()) - .priceInfo( - BaseMapper.buildPriceInfo( - listing.getToken(), listing.getPrice(), listing.getCollectionFee())) - .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) - .type(NotificationType.listing_sold) - .build(); - } - - private _AuctionOutbidNotification toAuctionOutbidNotification(NotificationEntity entity) { - AuctionBaseEntity auction = AuctionBaseEntity.findByAuctionId(entity.getActionId()); - return _AuctionOutbidNotification.builder() - .acknowlegded(entity.getAcknowledged()) - .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) - .asset(AssetBaseEntity.toModel(auction.getAssetId())) - .bundleSize(auction.getBundleSize()) - .bidder(BaseMapper.mapAccount(auction.getHighestBidder())) - .collection(CollectionBaseView.toModel(auction.getCollectionId())) - .notificationId(entity.getId()) - .auctionId(entity.getActionId()) - .currentBid( - BaseMapper.buildPriceInfo( - auction.getToken(), auction.getCurrentBid(), auction.getCollectionFee())) - .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) - .type(NotificationType.auction_outbid) - .build(); - } -} +package com.kryptokrauts.shared.service; + +import org.apache.commons.lang3.StringUtils; + +import com.kryptokrauts.shared.BaseMapper; +import com.kryptokrauts.shared.dao.common.AssetBaseEntity; +import com.kryptokrauts.shared.dao.common.CollectionBaseView; +import com.kryptokrauts.shared.dao.realtime.AuctionBaseEntity; +import com.kryptokrauts.shared.dao.realtime.BuyofferBaseEntity; +import com.kryptokrauts.shared.dao.realtime.ListingBaseEntity; +import com.kryptokrauts.shared.dao.realtime.NotificationEntity; +import com.kryptokrauts.shared.dao.realtime.OpenListingBaseEntity; +import com.kryptokrauts.shared.dao.realtime.TransferEntity; +import com.kryptokrauts.shared.enums.NotificationType; +import com.kryptokrauts.shared.model.common._Asset; +import com.kryptokrauts.shared.model.common._Collection; +import com.kryptokrauts.shared.model.common._PriceInfo; +import com.kryptokrauts.shared.model.realtime._Notification; +import com.kryptokrauts.shared.model.realtime.notification._AuctionOutbidNotification; +import com.kryptokrauts.shared.model.realtime.notification._ListingSoldNotification; +import com.kryptokrauts.shared.model.realtime.notification._OfferNotification; +import com.kryptokrauts.shared.model.realtime.notification._RoyaltyDecreasedNotification; +import com.kryptokrauts.shared.model.realtime.notification._RoyaltyReceivedNotification; +import com.kryptokrauts.shared.model.realtime.notification._TransferNotification; + +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class NotificationTransformService { + + public _Notification toModel(NotificationEntity entity) { + if (entity.getActionId() != null && StringUtils.isNotBlank(entity.getActionType())) { + return switch (entity.getActionType()) { + case "offer_declined" -> toOfferNotification(entity, true); + case "offer_received" -> toOfferNotification(entity, false); + case "offer_accepted" -> toOfferNotification(entity, false); + case "auction_outbid" -> toAuctionOutbidNotification(entity); + case "nft_received" -> toTransferNotification(entity); + case "royalty_decreased" -> toRoyaltyDecreasedNotification(entity); + case "royalty_received_listing" -> toRoyaltyReceivedNotification(entity, "listing"); + case "royalty_received_buyoffer" -> toRoyaltyReceivedNotification(entity, "buyoffer"); + case "royalty_received_auction" -> toRoyaltyReceivedNotification(entity, "auction"); + case "listing_sold" -> toListingSoldNotification(entity); + default -> null; + }; + } + return null; + } + + private _OfferNotification toOfferNotification( + NotificationEntity entity, boolean useDeclineMemo) { + BuyofferBaseEntity buyoffer = BuyofferBaseEntity.findByBuyofferId(entity.getActionId()); + return _OfferNotification.builder() + .acknowlegded(entity.getAcknowledged()) + .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) + .asset(AssetBaseEntity.toModel(buyoffer.getAssetId())) + .bundleSize(buyoffer.getBundleSize()) + .buyer(BaseMapper.mapAccount(buyoffer.getBuyer())) + .seller(BaseMapper.mapAccount(buyoffer.getSeller())) + .collection(CollectionBaseView.toModel(buyoffer.getCollectionId())) + .notificationId(entity.getId()) + .buyofferId(entity.getActionId()) + .price(buyoffer.getPrice().toModel()) + .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) + .type(NotificationType.valueOf(entity.getActionType())) + .message(useDeclineMemo ? buyoffer.getDeclineMemo() : buyoffer.getMemo()) + .build(); + } + + private _TransferNotification toTransferNotification(NotificationEntity entity) { + TransferEntity transfer = TransferEntity.findByTransferId(entity.getActionId()); + return _TransferNotification.builder() + .acknowlegded(entity.getAcknowledged()) + .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) + .asset(AssetBaseEntity.toModel(transfer.getPrimaryAssetId())) + .bundle(transfer.getBundle()) + .from(BaseMapper.mapAccount(transfer.getSender())) + .collection(CollectionBaseView.toModel(transfer.getCollectionId())) + .notificationId(entity.getId()) + .transferId(transfer.getTransferId()) + .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) + .type(NotificationType.nft_received) + .build(); + } + + private _RoyaltyDecreasedNotification toRoyaltyDecreasedNotification(NotificationEntity entity) { + OpenListingBaseEntity listing = OpenListingBaseEntity.findById(entity.getActionId()); + _Collection collection = CollectionBaseView.toModel(listing.getCollectionId()); + return _RoyaltyDecreasedNotification.builder() + .acknowlegded(entity.getAcknowledged()) + .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) + .collection(collection) + .notificationId(entity.getId()) + .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) + .oldValue(listing.getListingRoyalty()) + .newValue(collection.getRoyalty()) + .type(NotificationType.royalty_decreased) + .build(); + } + + private _RoyaltyReceivedNotification toRoyaltyReceivedNotification( + NotificationEntity entity, String type) { + _PriceInfo priceInfo = null; + boolean bundle = false; + CollectionBaseView collection = null; + _Asset asset = null; + if ("listing".equals(type)) { + ListingBaseEntity listing = ListingBaseEntity.findByListingId(entity.getActionId()); + priceInfo = + BaseMapper.buildPriceInfo( + listing.getToken(), listing.getPrice(), listing.getCollectionFee()); + bundle = listing.getBundle(); + collection = CollectionBaseView.findById(listing.getCollectionId()); + asset = AssetBaseEntity.toModel(listing.getPrimaryAssetId()); + } else if ("buyoffer".equals(type)) { + BuyofferBaseEntity buyoffer = BuyofferBaseEntity.findByBuyofferId(entity.getActionId()); + priceInfo = buyoffer.getPrice().toModel(); + bundle = buyoffer.getBundle(); + collection = CollectionBaseView.findById(buyoffer.getCollectionId()); + asset = AssetBaseEntity.toModel(buyoffer.getAssetId()); + } else if ("auction".equals(type)) { + AuctionBaseEntity auction = AuctionBaseEntity.findByAuctionId(entity.getActionId()); + priceInfo = + BaseMapper.buildPriceInfo( + auction.getToken(), auction.getCurrentBid(), auction.getCollectionFee()); + bundle = auction.getBundle(); + collection = CollectionBaseView.findById(auction.getCollectionId()); + asset = AssetBaseEntity.toModel(auction.getAssetId()); + } + + return _RoyaltyReceivedNotification.builder() + .acknowlegded(entity.getAcknowledged()) + .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) + .collection(collection.toModel()) + .asset(asset) + .notificationId(entity.getId()) + .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) + .bundle(bundle) + .royaltyAmount(priceInfo) + .type(NotificationType.royalty_received) + .marketType(type) + .build(); + } + + private _ListingSoldNotification toListingSoldNotification(NotificationEntity entity) { + ListingBaseEntity listing = ListingBaseEntity.findByListingId(entity.getActionId()); + return _ListingSoldNotification.builder() + .acknowlegded(entity.getAcknowledged()) + .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) + .asset(AssetBaseEntity.toModel(listing.getPrimaryAssetId())) + .bundleSize(listing.getBundleSize()) + .collection(CollectionBaseView.toModel(listing.getCollectionId())) + .notificationId(entity.getId()) + .priceInfo( + BaseMapper.buildPriceInfo( + listing.getToken(), listing.getPrice(), listing.getCollectionFee())) + .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) + .type(NotificationType.listing_sold) + .build(); + } + + private _AuctionOutbidNotification toAuctionOutbidNotification(NotificationEntity entity) { + AuctionBaseEntity auction = AuctionBaseEntity.findByAuctionId(entity.getActionId()); + return _AuctionOutbidNotification.builder() + .acknowlegded(entity.getAcknowledged()) + .acknowlegdedDate(BaseMapper.mapDate(entity.getAcknowledgedDate())) + .asset(AssetBaseEntity.toModel(auction.getAssetId())) + .bundleSize(auction.getBundleSize()) + .bidder(BaseMapper.mapAccount(auction.getHighestBidder())) + .collection(CollectionBaseView.toModel(auction.getCollectionId())) + .notificationId(entity.getId()) + .auctionId(entity.getActionId()) + .currentBid( + BaseMapper.buildPriceInfo( + auction.getToken(), auction.getCurrentBid(), auction.getCollectionFee())) + .receivedDate(BaseMapper.mapDate(entity.getBlockTimestamp())) + .type(NotificationType.auction_outbid) + .build(); + } +} diff --git a/src/main/java/com/kryptokrauts/shared/service/TaskTransformService.java b/src/main/java/com/kryptokrauts/shared/service/TaskTransformService.java index 479ccc8..101f70d 100644 --- a/src/main/java/com/kryptokrauts/shared/service/TaskTransformService.java +++ b/src/main/java/com/kryptokrauts/shared/service/TaskTransformService.java @@ -1,101 +1,101 @@ -package com.kryptokrauts.shared.service; - -import com.kryptokrauts.shared.BaseMapper; -import com.kryptokrauts.shared.dao.realtime.TaskEntity; -import com.kryptokrauts.shared.model.common._Asset; -import com.kryptokrauts.shared.model.common._Collection; -import com.kryptokrauts.shared.model.realtime._Task; -import com.kryptokrauts.shared.model.realtime.task._AuctionEndClaimNFTs; -import com.kryptokrauts.shared.model.realtime.task._AuctionEndZeroBids; -import com.kryptokrauts.shared.model.realtime.task._InvalidListing; -import com.kryptokrauts.shared.model.realtime.task._InvalidOffer; -import jakarta.enterprise.context.ApplicationScoped; -import org.apache.commons.lang3.StringUtils; - -@ApplicationScoped -public class TaskTransformService { - - public _Task toModel(TaskEntity task) { - if (task.getId() != null && StringUtils.isNotBlank(task.getTaskType())) { - return switch (task.getTaskType()) { - case "auction_won_claim_nfts" -> toAuctionEndTask(task); - case "auction_sold_claim_funds" -> toAuctionEndTask(task); - case "auction_end_zero_bids" -> toAuctionZeroBids(task); - case "invalid_listing" -> toInvalidListing(task); - case "invalid_offer" -> toInvalidOffer(task); - default -> null; - }; - } - return null; - } - - private _AuctionEndClaimNFTs toAuctionEndTask(TaskEntity task) { - return _AuctionEndClaimNFTs.builder() - .asset(toAsset(task)) - .auctionId(task.getActionId()) - .bundleSize(task.getBundleSize()) - .bundle(task.getBundle()) - .collection(toCollection(task)) - .type(task.getTaskType()) - .winningBid(BaseMapper.buildPriceInfo(task.getToken(), task.getPrice(), null)) - .build(); - } - - private _AuctionEndZeroBids toAuctionZeroBids(TaskEntity task) { - return _AuctionEndZeroBids.builder() - .asset(toAsset(task)) - .auctionId(task.getActionId()) - .bundleSize(task.getBundleSize()) - .bundle(task.getBundle()) - .collection(toCollection(task)) - .type(task.getTaskType()) - .startingBid(BaseMapper.buildPriceInfo(task.getToken(), task.getPrice(), null)) - .build(); - } - - private _InvalidListing toInvalidListing(TaskEntity task) { - return _InvalidListing.builder() - .asset(toAsset(task)) - .listingId(task.getActionId()) - .bundleSize(task.getBundleSize()) - .bundle(task.getBundle()) - .collection(toCollection(task)) - .type(task.getTaskType()) - .price(BaseMapper.buildPriceInfo(task.getToken(), task.getPrice(), null)) - .build(); - } - - private _InvalidOffer toInvalidOffer(TaskEntity task) { - return _InvalidOffer.builder() - .asset(toAsset(task)) - .buyofferId(task.getActionId()) - .bundleSize(task.getBundleSize()) - .bundle(task.getBundle()) - .collection(toCollection(task)) - .type(task.getTaskType()) - .price(BaseMapper.buildPriceInfo(task.getToken(), task.getPrice(), null)) - .build(); - } - - private _Collection toCollection(TaskEntity task) { - return _Collection.builder() - .blacklisted(task.getBlacklisted()) - .collectionId(task.getCollectionId()) - .collectionImage(task.getCollectionImage()) - .collectionName(task.getCollectionName()) - .shielded(task.getShielded()) - .build(); - } - - private _Asset toAsset(TaskEntity task) { - return _Asset.builder() - .assetId(task.getAssetId()) - .assetMedia(task.getAssetMedia()) - .assetMediaPreview(task.getAssetMediaPreview()) - .assetMediaType(task.getAssetMediaType()) - .assetName(task.getAssetName()) - .editionSize(task.getEditionSize()) - .serial(task.getSerial()) - .build(); - } -} +package com.kryptokrauts.shared.service; + +import com.kryptokrauts.shared.BaseMapper; +import com.kryptokrauts.shared.dao.realtime.TaskEntity; +import com.kryptokrauts.shared.model.common._Asset; +import com.kryptokrauts.shared.model.common._Collection; +import com.kryptokrauts.shared.model.realtime._Task; +import com.kryptokrauts.shared.model.realtime.task._AuctionEndClaimNFTs; +import com.kryptokrauts.shared.model.realtime.task._AuctionEndZeroBids; +import com.kryptokrauts.shared.model.realtime.task._InvalidListing; +import com.kryptokrauts.shared.model.realtime.task._InvalidOffer; +import jakarta.enterprise.context.ApplicationScoped; +import org.apache.commons.lang3.StringUtils; + +@ApplicationScoped +public class TaskTransformService { + + public _Task toModel(TaskEntity task) { + if (task.getId() != null && StringUtils.isNotBlank(task.getTaskType())) { + return switch (task.getTaskType()) { + case "auction_won_claim_nfts" -> toAuctionEndTask(task); + case "auction_sold_claim_funds" -> toAuctionEndTask(task); + case "auction_end_zero_bids" -> toAuctionZeroBids(task); + case "invalid_listing" -> toInvalidListing(task); + case "invalid_offer" -> toInvalidOffer(task); + default -> null; + }; + } + return null; + } + + private _AuctionEndClaimNFTs toAuctionEndTask(TaskEntity task) { + return _AuctionEndClaimNFTs.builder() + .asset(toAsset(task)) + .auctionId(task.getActionId()) + .bundleSize(task.getBundleSize()) + .bundle(task.getBundle()) + .collection(toCollection(task)) + .type(task.getTaskType()) + .winningBid(BaseMapper.buildPriceInfo(task.getToken(), task.getPrice(), null)) + .build(); + } + + private _AuctionEndZeroBids toAuctionZeroBids(TaskEntity task) { + return _AuctionEndZeroBids.builder() + .asset(toAsset(task)) + .auctionId(task.getActionId()) + .bundleSize(task.getBundleSize()) + .bundle(task.getBundle()) + .collection(toCollection(task)) + .type(task.getTaskType()) + .startingBid(BaseMapper.buildPriceInfo(task.getToken(), task.getPrice(), null)) + .build(); + } + + private _InvalidListing toInvalidListing(TaskEntity task) { + return _InvalidListing.builder() + .asset(toAsset(task)) + .listingId(task.getActionId()) + .bundleSize(task.getBundleSize()) + .bundle(task.getBundle()) + .collection(toCollection(task)) + .type(task.getTaskType()) + .price(BaseMapper.buildPriceInfo(task.getToken(), task.getPrice(), null)) + .build(); + } + + private _InvalidOffer toInvalidOffer(TaskEntity task) { + return _InvalidOffer.builder() + .asset(toAsset(task)) + .buyofferId(task.getActionId()) + .bundleSize(task.getBundleSize()) + .bundle(task.getBundle()) + .collection(toCollection(task)) + .type(task.getTaskType()) + .price(BaseMapper.buildPriceInfo(task.getToken(), task.getPrice(), null)) + .build(); + } + + private _Collection toCollection(TaskEntity task) { + return _Collection.builder() + .blacklisted(task.getBlacklisted()) + .collectionId(task.getCollectionId()) + .collectionImage(task.getCollectionImage()) + .collectionName(task.getCollectionName()) + .shielded(task.getShielded()) + .build(); + } + + private _Asset toAsset(TaskEntity task) { + return _Asset.builder() + .assetId(task.getAssetId()) + .assetMedia(task.getAssetMedia()) + .assetMediaPreview(task.getAssetMediaPreview()) + .assetMediaType(task.getAssetMediaType()) + .assetName(task.getAssetName()) + .editionSize(task.getEditionSize()) + .serial(task.getSerial()) + .build(); + } +}