diff --git a/pom.xml b/pom.xml
index 9adf1a9..d895020 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,7 @@
io.quarkus.platform
3.21.2
true
+ 4.5.0
1.9.0
3.5.2
@@ -42,6 +43,11 @@
steamworks4j-server
${steamworks.version}
+
+ com.auth0
+ java-jwt
+ ${jwt.version}
+
io.quarkus
quarkus-rest
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/BaseEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/BaseEndpoints.java
new file mode 100644
index 0000000..07076ba
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/BaseEndpoints.java
@@ -0,0 +1,31 @@
+package ch.gtache.elderscrollslegends.service;
+
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.ws.rs.NotAuthorizedException;
+
+import java.util.Objects;
+
+public class BaseEndpoints {
+
+ private final AccountService accountService;
+
+ protected BaseEndpoints(final AccountService accountService) {
+ this.accountService = Objects.requireNonNull(accountService);
+ }
+
+ protected AccountService accountService() {
+ return accountService;
+ }
+
+ protected String authenticateOrThrow(final String bearerToken) {
+ if (bearerToken == null || !bearerToken.startsWith("Bearer ")) {
+ throw new NotAuthorizedException("Invalid token", "Bearer");
+ }
+ final var token = bearerToken.replace("Bearer ", "");
+ final var steamID = accountService.getSteamIDFromToken(token);
+ if (steamID == null) {
+ throw new NotAuthorizedException("Invalid token", "Bearer");
+ }
+ return steamID;
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/BaseService.java b/src/main/java/ch/gtache/elderscrollslegends/service/BaseService.java
new file mode 100644
index 0000000..c55d945
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/BaseService.java
@@ -0,0 +1,17 @@
+package ch.gtache.elderscrollslegends.service;
+
+import javax.sql.DataSource;
+import java.util.Objects;
+
+public class BaseService {
+
+ private final DataSource dataSource;
+
+ protected BaseService(final DataSource dataSource) {
+ this.dataSource = Objects.requireNonNull(dataSource);
+ }
+
+ protected DataSource dataSource() {
+ return dataSource;
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/Card.java b/src/main/java/ch/gtache/elderscrollslegends/service/Card.java
new file mode 100644
index 0000000..e712277
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/Card.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service;
+
+public record Card(int hash) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/CardService.java b/src/main/java/ch/gtache/elderscrollslegends/service/CardService.java
new file mode 100644
index 0000000..13fb2e0
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/CardService.java
@@ -0,0 +1,20 @@
+package ch.gtache.elderscrollslegends.service;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+public class CardService extends BaseService {
+
+ @Inject
+ CardService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ public Card getCard(final int hash) {
+ // TODO
+ return new Card(hash);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/ClassService.java b/src/main/java/ch/gtache/elderscrollslegends/service/ClassService.java
new file mode 100644
index 0000000..aab758f
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/ClassService.java
@@ -0,0 +1,20 @@
+package ch.gtache.elderscrollslegends.service;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+public class ClassService extends BaseService {
+
+ @Inject
+ ClassService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ public Clazz getClass(final int hash) {
+ // TODO
+ return new Clazz(hash);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/Clazz.java b/src/main/java/ch/gtache/elderscrollslegends/service/Clazz.java
new file mode 100644
index 0000000..5a6c50c
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/Clazz.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service;
+
+public record Clazz(int hash) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/DeckService.java b/src/main/java/ch/gtache/elderscrollslegends/service/DeckService.java
new file mode 100644
index 0000000..6a32478
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/DeckService.java
@@ -0,0 +1,20 @@
+package ch.gtache.elderscrollslegends.service;
+
+import ch.gtache.elderscrollslegends.service.inventory.Deck;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+public class DeckService extends BaseService {
+
+ @Inject
+ DeckService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ public Deck getDeck(final String steamID, final long deckID) {
+ return null;
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/Main.java b/src/main/java/ch/gtache/elderscrollslegends/service/Main.java
index 44a0934..5ba6a6d 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/Main.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/Main.java
@@ -1,12 +1,25 @@
package ch.gtache.elderscrollslegends.service;
-import com.codedisaster.steamworks.*;
+import com.codedisaster.steamworks.SteamAPI;
+import com.codedisaster.steamworks.SteamAuth;
+import com.codedisaster.steamworks.SteamAuthTicket;
+import com.codedisaster.steamworks.SteamException;
+import com.codedisaster.steamworks.SteamGameServer;
+import com.codedisaster.steamworks.SteamGameServerAPI;
+import com.codedisaster.steamworks.SteamGameServerCallback;
+import com.codedisaster.steamworks.SteamID;
+import com.codedisaster.steamworks.SteamResult;
+import com.codedisaster.steamworks.SteamUser;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.HexFormat;
-public class Main {
+public final class Main {
+
+ private Main() {
+
+ }
public static void main(String[] args) throws SteamException, InterruptedException {
SteamGameServerAPI.loadLibraries();
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/Providers.java b/src/main/java/ch/gtache/elderscrollslegends/service/Providers.java
new file mode 100644
index 0000000..d138eea
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/Providers.java
@@ -0,0 +1,21 @@
+package ch.gtache.elderscrollslegends.service;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.Produces;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import java.time.Duration;
+
+@ApplicationScoped
+class Providers {
+
+ Providers() {
+
+ }
+
+ @Produces
+ @ApplicationScoped
+ static Duration providesTimeToLive(@ConfigProperty(name = "jwt.token.ttl.seconds") final int ttl) {
+ return Duration.ofSeconds(ttl);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/account/ABTestingSet.java b/src/main/java/ch/gtache/elderscrollslegends/service/account/ABTestingSet.java
deleted file mode 100644
index c4ffdff..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/account/ABTestingSet.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.account;
-
-public record ABTestingSet(String setKey, String groupKey) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/account/AccountEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/account/AccountEndpoints.java
index f03826e..aa4d03e 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/account/AccountEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/account/AccountEndpoints.java
@@ -1,10 +1,10 @@
package ch.gtache.elderscrollslegends.service.account;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
import ch.gtache.elderscrollslegends.service.SteamService;
import ch.gtache.elderscrollslegends.service.account.auth.AuthBNETGamecodeRequest;
import ch.gtache.elderscrollslegends.service.account.auth.AuthBNETSteamRequest;
import ch.gtache.elderscrollslegends.service.account.auth.AuthResult;
-import ch.gtache.elderscrollslegends.service.account.auth.LogoutSteamRequest;
import ch.gtache.elderscrollslegends.service.account.check.CheckEmailRequest;
import ch.gtache.elderscrollslegends.service.account.check.CheckEmailResponse;
import ch.gtache.elderscrollslegends.service.account.check.CheckEmailResponseBody;
@@ -27,17 +27,16 @@ import java.util.List;
import static java.util.Objects.requireNonNull;
@Path("/account")
-public class AccountEndpoints {
+public class AccountEndpoints extends BaseEndpoints {
private static final Logger logger = Logger.getLogger(AccountEndpoints.class);
private final SteamService steamService;
- private final AccountService accountService;
@Inject
- AccountEndpoints(final SteamService steamService, final AccountService accountService) {
+ AccountEndpoints(final AccountService accountService, final SteamService steamService) {
+ super(accountService);
this.steamService = requireNonNull(steamService);
- this.accountService = requireNonNull(accountService);
}
@POST
@@ -49,7 +48,7 @@ public class AccountEndpoints {
try {
if (steamService.authenticate(request.sessionTicket(), request.steamId())) {
logger.info("SteamLogin succeeded for " + request);
- final var data = accountService.authenticate(request.steamId());
+ final var data = accountService().authenticate(request.steamId());
return new AuthResult(data, 0, null, List.of());
} else {
return new AuthResult(null, 2, "SteamLogin failed", List.of());
@@ -63,9 +62,11 @@ public class AccountEndpoints {
@POST
@Path("bnetSteamLogout")
@Consumes("application/json")
- public void steamLogout(final LogoutSteamRequest request) {
- logger.info("SteamLogout called : " + request);
- steamService.endAuthSession(request.steamId());
+ public void steamLogout(@HeaderParam("Authorization") final String authentication) {
+ logger.info("SteamLogout called");
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("SteamLogout called by " + steamID);
+ steamService.endAuthSession(steamID);
}
@POST
@@ -74,7 +75,7 @@ public class AccountEndpoints {
@Produces("application/json")
public AuthResult gamecodeLogin(final AuthBNETGamecodeRequest request) {
logger.info("GamecodeLogin called : " + request);
- return null;
+ return new AuthResult(null, 1, "GamecodeLogin not implemented", List.of());
}
@POST
@@ -83,7 +84,7 @@ public class AccountEndpoints {
@Produces("application/json")
public CheckUsernameResponse checkUsername(final CheckUsernameRequest request) {
logger.info("CheckUsername called : " + request);
- if (accountService.exists(request.username())) {
+ if (accountService().exists(request.username())) {
return new CheckUsernameResponse(new CheckUsernameResponseBody(true, true, 0));
} else {
return new CheckUsernameResponse(new CheckUsernameResponseBody(false, false, 1));
@@ -96,7 +97,7 @@ public class AccountEndpoints {
@Produces("application/json")
public CheckEmailResponse checkEmail(final CheckEmailRequest request) {
logger.info("CheckEmail called : " + request);
- if (accountService.exists(request.email())) {
+ if (accountService().exists(request.email())) {
return new CheckEmailResponse(new CheckEmailResponseBody(true, 0));
} else {
return new CheckEmailResponse(new CheckEmailResponseBody(false, 1));
@@ -107,10 +108,13 @@ public class AccountEndpoints {
@Path("bnetRefreshSession")
@Consumes("application/json")
@Produces("application/json")
- public RefreshSessionResponse refreshSession(final RefreshSessionRequest request) {
+ public RefreshSessionResponse refreshSession(@HeaderParam("Authorization") final String authentication,
+ final RefreshSessionRequest request) {
logger.info("RefreshSession called : " + request);
- final var token = accountService.refresh(request.bnetKeyPlatform());
- final var timeToRefresh = Duration.between(java.time.Instant.now(), token.expirationTimestamp()).getSeconds();
+ final var steamID = authenticateOrThrow(authentication);
+ final var token = accountService().refreshToken(steamID);
+ final var timeToRefresh = Duration.between(java.time.Instant.now(), token.expirationTimestamp())
+ .minus(Duration.ofMinutes(5)).getSeconds();
return new RefreshSessionResponse((int) timeToRefresh, token.token());
}
@@ -121,7 +125,8 @@ public class AccountEndpoints {
public LegalDocumentsResponse getLegalDocumentsForUser(@HeaderParam("Authorization") final String authentication,
final GetLegalDocumentsForUserRequest request) {
logger.info("GetLegalDocumentsForUser called : " + request);
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ return new LegalDocumentsResponse(List.of());
}
@POST
@@ -130,6 +135,7 @@ public class AccountEndpoints {
public void acceptLegalDocument(@HeaderParam("Authorization") final String authentication,
final AcceptLegalDocumentRequest request) {
logger.info("acceptLegalDocument called : " + request);
+ authenticateOrThrow(authentication);
}
@POST
@@ -138,6 +144,6 @@ public class AccountEndpoints {
@Produces("application/json")
public LegalDocumentsResponse getAllLegalDocuments(final GetAllLegalDocumentsRequest request) {
logger.info("GetAllLegalDocuments called : " + request);
- return null;
+ return new LegalDocumentsResponse(List.of());
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/account/AccountService.java b/src/main/java/ch/gtache/elderscrollslegends/service/account/AccountService.java
index 4357eda..4358d65 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/account/AccountService.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/account/AccountService.java
@@ -1,5 +1,6 @@
package ch.gtache.elderscrollslegends.service.account;
+import ch.gtache.elderscrollslegends.service.BaseService;
import ch.gtache.elderscrollslegends.service.SteamService;
import ch.gtache.elderscrollslegends.service.Token;
import ch.gtache.elderscrollslegends.service.account.auth.AuthData;
@@ -15,24 +16,25 @@ import java.util.List;
import static java.util.Objects.requireNonNull;
@ApplicationScoped
-public class AccountService {
+public class AccountService extends BaseService {
+
private static final Logger logger = Logger.getLogger(AccountService.class);
+ private final JWTService jwtService;
private final SteamService steamService;
- private final DataSource dataSource;
@Inject
- AccountService(final SteamService steamService, final DataSource dataSource) {
+ AccountService(final DataSource dataSource, final JWTService jwtService, final SteamService steamService) {
+ super(dataSource);
+ this.jwtService = requireNonNull(jwtService);
this.steamService = requireNonNull(steamService);
- this.dataSource = requireNonNull(dataSource);
}
-
- public AuthData authenticate(final String steamID) {
+ AuthData authenticate(final String steamID) {
if (!exists(steamID)) {
final var longId = Long.parseLong(steamID);
final var name = steamService.getName(steamID);
- try (final var connection = dataSource.getConnection();
+ try (final var connection = dataSource().getConnection();
final var statement = connection.prepareStatement("INSERT INTO player (steam_id, name) VALUES (?, ?)")) {
statement.setLong(1, longId);
statement.setString(2, name);
@@ -43,14 +45,14 @@ public class AccountService {
}
}
updateNameIfNeeded(steamID);
- final var token = getOrCreateToken(steamID);
+ final var token = jwtService.createToken(steamID);
return getAuthData(steamID, token);
}
private void updateNameIfNeeded(final String steamID) {
final var longId = Long.parseLong(steamID);
final var name = steamService.getName(steamID);
- try (final var connection = dataSource.getConnection();
+ try (final var connection = dataSource().getConnection();
final var statement = connection.prepareStatement("UPDATE player SET name=? WHERE steam_id=?")) {
statement.setString(1, name);
statement.setLong(2, longId);
@@ -60,47 +62,19 @@ public class AccountService {
}
}
- private Token getOrCreateToken(final String steamID) {
- final var longId = Long.parseLong(steamID);
- try (final var connection = dataSource.getConnection();
- final var statement = connection.prepareStatement("SELECT token, expiration FROM token WHERE player_id=(SELECT id FROM player WHERE steam_id=?)")) {
- statement.setLong(1, longId);
- try (final var rs = statement.executeQuery()) {
- if (rs.next()) {
- final var token = rs.getString(1);
- final var expiration = rs.getTimestamp(2).toInstant();
- if (expiration.isAfter(java.time.Instant.now())) {
- return new Token(token, expiration);
- }
- }
- }
- } catch (final SQLException e) {
- logger.error("Error checking for player " + steamID, e);
- }
- try (final var connection = dataSource.getConnection();
- final var statement = connection.prepareStatement("INSERT INTO token (player_id) VALUES ((SELECT id FROM player WHERE steam_id=?)) RETURNING token, expiration")) {
- statement.setLong(1, longId);
- try (final var rs = statement.executeQuery()) {
- return rs.next() ? new Token(rs.getString(1), rs.getTimestamp(2).toInstant()) : null;
- }
- } catch (final SQLException e) {
- logger.error("Error inserting player " + steamID, e);
- }
- return null;
- }
-
private AuthData getAuthData(final String steamID, final Token token) {
if (token != null) {
final var longId = Long.parseLong(steamID);
- try (final var connection = dataSource.getConnection();
- final var statement = connection.prepareStatement("SELECT 1 FROM player WHERE steam_id=?")) {
+ try (final var connection = dataSource().getConnection();
+ final var statement = connection.prepareStatement("SELECT name FROM player WHERE steam_id=?")) {
statement.setLong(1, longId);
try (final var rs = statement.executeQuery()) {
if (rs.next()) {
final var uuid = token.token();
+ final var name = rs.getString(1);
final var timeToRefresh = Duration.between(java.time.Instant.now(), token.expirationTimestamp()).getSeconds();
- return new AuthData(uuid, "", "", "", "", steamID, steamID, steamID,
- "", steamID, "CH", false, false, (int) timeToRefresh,
+ return new AuthData(uuid, "", "steam", "", uuid, steamID, steamID, steamID,
+ "", name, "US", false, false, (int) timeToRefresh,
5, 5, false, "", "",
0, List.of(), false);
}
@@ -112,9 +86,9 @@ public class AccountService {
return null;
}
- public boolean exists(final String steamID) {
+ boolean exists(final String steamID) {
final var longId = Long.parseLong(steamID);
- try (final var connection = dataSource.getConnection();
+ try (final var connection = dataSource().getConnection();
final var statement = connection.prepareStatement("SELECT 1 FROM player WHERE steam_id=?")) {
statement.setLong(1, longId);
try (final var rs = statement.executeQuery()) {
@@ -126,19 +100,11 @@ public class AccountService {
return false;
}
- public Token refresh(final String steamID) {
- if (exists(steamID)) {
- final var longId = Long.parseLong(steamID);
- try (final var connection = dataSource.getConnection();
- final var statement = connection.prepareStatement("DELETE FROM token WHERE player_id=(SELECT id FROM player WHERE steam_id=?)")) {
- statement.setLong(1, longId);
- statement.executeUpdate();
- } catch (final SQLException e) {
- logger.error("Error checking for player " + steamID, e);
- }
- return getOrCreateToken(steamID);
- } else {
- return null;
- }
+ Token refreshToken(final String steamID) {
+ return jwtService.createToken(steamID);
+ }
+
+ public String getSteamIDFromToken(final String token) {
+ return jwtService.getSteamID(token);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/account/JWTService.java b/src/main/java/ch/gtache/elderscrollslegends/service/account/JWTService.java
new file mode 100644
index 0000000..f4c49c4
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/account/JWTService.java
@@ -0,0 +1,62 @@
+package ch.gtache.elderscrollslegends.service.account;
+
+import ch.gtache.elderscrollslegends.service.Token;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.JWTVerificationException;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.Objects;
+
+@ApplicationScoped
+class JWTService {
+ private static final Logger logger = Logger.getLogger(JWTService.class.getName());
+
+ private static final String ISSUER = "TESL";
+
+ private final Duration timeToLive;
+ private final Algorithm algorithm;
+ private final JWTVerifier verifier;
+
+ @Inject
+ JWTService(@ConfigProperty(name = "jwt.hs256.key.secret") final String key, final Duration timeToLive) {
+ this.timeToLive = Objects.requireNonNull(timeToLive);
+ this.algorithm = Algorithm.HMAC256(key);
+ this.verifier = JWT.require(algorithm).withIssuer(ISSUER).build();
+ }
+
+ public String getSteamID(final String token) {
+ try {
+ final var decoded = verifier.verify(token);
+ return decoded.getSubject();
+ } catch (final JWTVerificationException e) {
+ logger.warn("Invalid token " + token, e);
+ return null;
+ }
+ }
+
+ public boolean isValid(final String token) {
+ try {
+ verifier.verify(token);
+ return true;
+ } catch (final JWTVerificationException e) {
+ return false;
+ }
+ }
+
+ Token createToken(final String steamID) {
+ final var expiration = Instant.now().plus(timeToLive);
+ final var token = JWT.create()
+ .withSubject(steamID)
+ .withIssuer(ISSUER)
+ .withIssuedAt(Instant.now())
+ .withExpiresAt(expiration).sign(algorithm);
+ return new Token(token, expiration);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/account/auth/LogoutSteamRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/account/auth/ABTestingSet.java
similarity index 53%
rename from src/main/java/ch/gtache/elderscrollslegends/service/account/auth/LogoutSteamRequest.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/account/auth/ABTestingSet.java
index cc7024e..9e9859e 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/account/auth/LogoutSteamRequest.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/account/auth/ABTestingSet.java
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.account.auth;
-public record LogoutSteamRequest(String steamId) {
+record ABTestingSet(String setKey, String groupKey) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/account/auth/AuthData.java b/src/main/java/ch/gtache/elderscrollslegends/service/account/auth/AuthData.java
index ecee705..cd3f144 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/account/auth/AuthData.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/account/auth/AuthData.java
@@ -1,7 +1,5 @@
package ch.gtache.elderscrollslegends.service.account.auth;
-import ch.gtache.elderscrollslegends.service.account.ABTestingSet;
-
import java.util.List;
public record AuthData(String token,
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/account/transfer/LegalDocEntry.java b/src/main/java/ch/gtache/elderscrollslegends/service/account/transfer/LegalDocEntry.java
index 10a1235..28e85b0 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/account/transfer/LegalDocEntry.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/account/transfer/LegalDocEntry.java
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.account.transfer;
-public record LegalDocEntry(String doctype, String full_name, int id, String url) {
+record LegalDocEntry(String doctype, String full_name, int id, String url) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/account/transfer/TransferResponse_Phase0.java b/src/main/java/ch/gtache/elderscrollslegends/service/account/transfer/TransferResponse_Phase0.java
index a19c60d..aa238a7 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/account/transfer/TransferResponse_Phase0.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/account/transfer/TransferResponse_Phase0.java
@@ -1,10 +1,10 @@
package ch.gtache.elderscrollslegends.service.account.transfer;
-import ch.gtache.elderscrollslegends.service.inventory.SelectedItem;
+import ch.gtache.elderscrollslegends.service.inventory.InventorySelectedItem;
import ch.gtache.elderscrollslegends.service.profile.ProfileStruct;
import java.util.List;
record TransferResponse_Phase0(List items, String buid, String sessionToken, boolean hasTeslUserData,
- ProfileStruct profile, List categories) {
+ ProfileStruct profile, List categories) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalysticsEventPayload.java b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalysticsEventPayload.java
deleted file mode 100644
index 00e527b..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalysticsEventPayload.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.analytics;
-
-public record AnalysticsEventPayload(AnalyticsEventType eventType, String data) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEndpoints.java
index da83206..0e053ab 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEndpoints.java
@@ -1,5 +1,8 @@
package ch.gtache.elderscrollslegends.service.analytics;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
@@ -7,32 +10,42 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import org.jboss.logging.Logger;
+import java.util.Objects;
+
@Path("/analytics")
-public class AnalyticsEndpoints {
+public class AnalyticsEndpoints extends BaseEndpoints {
private static final Logger logger = Logger.getLogger(AnalyticsEndpoints.class);
+ private final AnalyticsService analyticsService;
+
+ @Inject
+ AnalyticsEndpoints(final AccountService accountService, final AnalyticsService analyticsService) {
+ super(accountService);
+ this.analyticsService = Objects.requireNonNull(analyticsService);
+ }
@POST
@Path("/clientEvent")
public void newAnalytics(@HeaderParam("Authorization") final String authentication,
final AnalyticsEvent analyticsEvent) {
- logger.info("Report analytics called by " + authentication + " : " + analyticsEvent);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("Report analytics called by " + steamID + " : " + analyticsEvent);
+ analyticsService.newAnalytics(steamID, analyticsEvent);
}
@POST
@Path("/clientEventPA")
- public void newAnalyticsPA(@HeaderParam("Authorization") final String authentication,
- final AnalyticsEvent analyticsEvent) {
- logger.info("Report analyticsPA called by " + authentication + " : " + analyticsEvent);
- //Do nothing
+ public void newAnalyticsPA(final AnalyticsEvent analyticsEvent) {
+ logger.info("Report analyticsPA called : " + analyticsEvent);
+ analyticsService.newAnalytics(analyticsEvent);
}
@GET
@Path("/reportingConfig")
@Produces("application/json")
- public FetchResponse getReportingConfig(@HeaderParam("Authorization") final String authentication) {
- logger.info("ReportingConfig called by " + authentication);
- return null;
+ public AnalyticsFetchResponse getReportingConfig(@HeaderParam("Authorization") final String authentication) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("ReportingConfig called by " + steamID);
+ return new AnalyticsFetchResponse(true);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEvent.java b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEvent.java
index f24fada..513b7a3 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEvent.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEvent.java
@@ -2,5 +2,5 @@ package ch.gtache.elderscrollslegends.service.analytics;
import java.util.List;
-public record AnalyticsEvent(int platformId, int clientVersion, String eventData, List events) {
+public record AnalyticsEvent(int platformId, int clientVersion, String eventData, List events) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEventPayload.java b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEventPayload.java
new file mode 100644
index 0000000..c52d9aa
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsEventPayload.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.analytics;
+
+public record AnalyticsEventPayload(AnalyticsEventType eventType, String data) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsFetchResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsFetchResponse.java
new file mode 100644
index 0000000..d7c087c
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsFetchResponse.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.analytics;
+
+public record AnalyticsFetchResponse(boolean enableReporting) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsService.java b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsService.java
new file mode 100644
index 0000000..50d09a2
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/AnalyticsService.java
@@ -0,0 +1,24 @@
+package ch.gtache.elderscrollslegends.service.analytics;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class AnalyticsService extends BaseService {
+
+ @Inject
+ AnalyticsService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ void newAnalytics(final AnalyticsEvent analyticsEvent) {
+
+ }
+
+ void newAnalytics(final String steamID, final AnalyticsEvent analyticsEvent) {
+
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/FetchResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/analytics/FetchResponse.java
deleted file mode 100644
index dceeb1d..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/analytics/FetchResponse.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.analytics;
-
-public record FetchResponse(boolean enableReporting) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/arena/ArenaEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/arena/ArenaEndpoints.java
index f26e9a9..652a85c 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/arena/ArenaEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/arena/ArenaEndpoints.java
@@ -1,57 +1,95 @@
package ch.gtache.elderscrollslegends.service.arena;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.CardService;
+import ch.gtache.elderscrollslegends.service.ClassService;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import static java.util.Objects.requireNonNull;
@Path("/arena")
-public class ArenaEndpoints {
+public class ArenaEndpoints extends BaseEndpoints {
+ private static final Logger logger = Logger.getLogger(ArenaEndpoints.class);
+ private final ArenaService arenaService;
+ private final CardService cardService;
+ private final ClassService classService;
+
+ @Inject
+ ArenaEndpoints(final AccountService accountService, final ArenaService arenaService,
+ final CardService cardService, final ClassService classService) {
+ super(accountService);
+ this.arenaService = requireNonNull(arenaService);
+ this.cardService = requireNonNull(cardService);
+ this.classService = requireNonNull(classService);
+ }
- @Path("purchaseArena")
@POST
+ @Path("purchaseArena")
@Consumes("application/json")
@Produces("application/json")
public FetchArenaInstancesResult purchaseArena(@HeaderParam("Authorization") final String authentication,
final PurchaseArenaRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("purchaseArena called by " + steamID + " : " + request);
+ arenaService.purchaseArena(steamID, request.arenaType(), request.currencyType());
+ final var data = arenaService.getArenaClientData(steamID);
+ return new FetchArenaInstancesResult(data);
}
- @Path("resignArena")
@POST
+ @Path("resignArena")
@Consumes("application/json")
@Produces("application/json")
public ResignArenaResult resignArena(@HeaderParam("Authorization") final String authentication,
final ResignArenaRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("resignArena called by " + steamID + " : " + request);
+ arenaService.resignArena(steamID, request.arenaType());
+ return new ResignArenaResult();
}
- @Path("selectCard")
@POST
+ @Path("selectCard")
@Consumes("application/json")
@Produces("application/json")
public SelectCardResult selectCard(@HeaderParam("Authorization") final String authentication,
final SelectCardRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("selectCard called by " + steamID + " : " + request);
+ final var card = cardService.getCard(request.cardTypeHash());
+ arenaService.selectCard(steamID, request.arenaType(), card);
+ return new SelectCardResult(arenaService.getArenaClientData(steamID));
}
- @Path("selectClassType")
@POST
+ @Path("selectClassType")
@Consumes("application/json")
@Produces("application/json")
public SelectClassResult selectClassType(@HeaderParam("Authorization") final String authentication,
final SelectClassRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("selectClassType called by " + steamID + " : " + request);
+ final var clazz = classService.getClass(request.classTypeHash());
+ arenaService.selectClass(steamID, request.arenaType(), clazz);
+ return new SelectClassResult(arenaService.getArenaClientData(steamID));
}
- @Path("fetchActiveArenaInstances")
@GET
+ @Path("fetchActiveArenaInstances")
@Consumes("application/json")
@Produces("application/json")
- public FetchArenaInstancesResult fetchActiveArenaInstances() {
- return null;
+ public FetchArenaInstancesResult fetchActiveArenaInstances(@HeaderParam("Authorization") final String authentication) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetchActiveArenaInstances called by " + steamID);
+ return new FetchArenaInstancesResult(arenaService.getArenaClientData(steamID));
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/arena/ArenaService.java b/src/main/java/ch/gtache/elderscrollslegends/service/arena/ArenaService.java
new file mode 100644
index 0000000..24dc82c
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/arena/ArenaService.java
@@ -0,0 +1,36 @@
+package ch.gtache.elderscrollslegends.service.arena;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import ch.gtache.elderscrollslegends.service.Card;
+import ch.gtache.elderscrollslegends.service.Clazz;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+@ApplicationScoped
+class ArenaService extends BaseService {
+
+ @Inject
+ ArenaService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ public void purchaseArena(final String steamID, final ArenaType arenaType,
+ final ArenaPurchaseCurrencyType currencyType) {
+ }
+
+ public void resignArena(final String steamID, final ArenaType arenaType) {
+ }
+
+ public ArenaClientDataStruct getArenaClientData(final String steamID) {
+ return new ArenaClientDataStruct(0, 0, List.of());
+ }
+
+ void selectCard(final String steamID, final ArenaType arenaType, final Card card) {
+ }
+
+ void selectClass(final String steamID, final ArenaType arenaType, final Clazz clazz) {
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/arena/PurchaseArenaResult.java b/src/main/java/ch/gtache/elderscrollslegends/service/arena/PurchaseArenaResult.java
deleted file mode 100644
index 2aea4ca..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/arena/PurchaseArenaResult.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.arena;
-
-public record PurchaseArenaResult(ArenaClientDataStruct clientData) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/CampaignEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/CampaignEndpoints.java
index d0c583f..3fdc896 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/CampaignEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/CampaignEndpoints.java
@@ -1,5 +1,8 @@
package ch.gtache.elderscrollslegends.service.campaign;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
@@ -8,18 +11,28 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import org.jboss.logging.Logger;
+import java.util.Objects;
+
@Path("/campaign")
-public class CampaignEndpoints {
+public class CampaignEndpoints extends BaseEndpoints {
private static final Logger logger = Logger.getLogger(CampaignEndpoints.class);
+ private final CampaignService campaignService;
+
+ @Inject
+ CampaignEndpoints(final AccountService accountService, final CampaignService campaignService) {
+ super(accountService);
+ this.campaignService = Objects.requireNonNull(campaignService);
+ }
@POST
@Path("checkCampaignProgress")
@Consumes("application/json")
public void checkCampaignProgress(@HeaderParam("Authorization") final String authentication,
final CheckCampaignRequest request) {
- logger.info("CheckCampaignProgress called by " + authentication + " : " + request);
- //TODO
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("CheckCampaignProgress called by " + steamID + " : " + request);
+ campaignService.getCampaign(steamID, request.campaignId(), request.isMastery());
}
@POST
@@ -28,8 +41,8 @@ public class CampaignEndpoints {
@Produces("application/json")
public void debugAddNextChapter(@HeaderParam("Authorization") final String authentication,
final DebugAddNextChapterRequest request) {
- logger.info("DebugAddNextChapter called by " + authentication + " : " + request);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("DebugAddNextChapter called by " + steamID + " : " + request);
}
@POST
@@ -38,9 +51,8 @@ public class CampaignEndpoints {
@Produces("application/json")
public void debugAddNextEvent(@HeaderParam("Authorization") final String authentication,
final DebugAddNextEventRequest request) {
-
- logger.info("DebugAddNextEvent called by " + authentication + " : " + request);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("DebugAddNextEvent called by " + steamID + " : " + request);
}
@POST
@@ -49,9 +61,9 @@ public class CampaignEndpoints {
@Produces("application/json")
public SetChapterDialogResult setChapterDialogStatus(@HeaderParam("Authorization") final String authentication,
final SetChapterDialogStatusRequest request) {
- logger.info("SetChapterDialogStatus called by " + authentication + " : " + request);
- //TODO
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("SetChapterDialogStatus called by " + steamID + " : " + request);
+ return new SetChapterDialogResult(campaignService.getRewards(steamID, request));
}
@POST
@@ -60,17 +72,17 @@ public class CampaignEndpoints {
@Produces("application/json")
public SetChapterEventResult setChapterEventChoice(@HeaderParam("Authorization") final String authentication,
final SetChapterEventChoiceRequest request) {
- logger.info("SetChapterEventChoice called by " + authentication + " : " + request);
- //TODO
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("SetChapterEventChoice called by " + steamID + " : " + request);
+ return new SetChapterEventResult(campaignService.getRewards(steamID, request));
}
@GET
@Path("list")
@Produces("application/json")
public ListCampaignsResponse getList(@HeaderParam("Authorization") final String authentication) {
- logger.info("List called by " + authentication);
- //TODO
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("List called by " + steamID);
+ return new ListCampaignsResponse(campaignService.getCampaigns(steamID));
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/CampaignService.java b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/CampaignService.java
new file mode 100644
index 0000000..a50ad8b
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/CampaignService.java
@@ -0,0 +1,34 @@
+package ch.gtache.elderscrollslegends.service.campaign;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import ch.gtache.elderscrollslegends.service.reward.RewardDescription;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+@ApplicationScoped
+class CampaignService extends BaseService {
+
+ @Inject
+ CampaignService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ UserCampaignData getCampaign(final String steamID, final int id, final boolean mastery) {
+ return null;
+ }
+
+ List getCampaigns(final String steamID) {
+ return List.of();
+ }
+
+ List getRewards(final String steamID, final SetChapterEventChoiceRequest request) {
+ return List.of();
+ }
+
+ List getRewards(final String steamID, final SetChapterDialogStatusRequest request) {
+ return List.of();
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/ListCampaignsResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/ListCampaignsResponse.java
index 2935d9c..65d55ea 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/ListCampaignsResponse.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/ListCampaignsResponse.java
@@ -1,4 +1,6 @@
package ch.gtache.elderscrollslegends.service.campaign;
-public record ListCampaignsResponse(UserCampaignData campaignDatas) {
+import java.util.List;
+
+public record ListCampaignsResponse(List campaignDatas) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/SetChapterEventChoiceRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/SetChapterEventChoiceRequest.java
index 1ab0159..251ac4b 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/SetChapterEventChoiceRequest.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/SetChapterEventChoiceRequest.java
@@ -1,5 +1,6 @@
package ch.gtache.elderscrollslegends.service.campaign;
public record SetChapterEventChoiceRequest(int campaignId, int actId, int chapterId, int cinematicId,
- boolean isMastery, DialogModalType modalType, UserCampaignChoice choiceType) {
+ boolean isMastery, DialogModalType modalType,
+ UserCampaignChoice choiceType) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/UserCampaignData.java b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/UserCampaignData.java
index 7da29e1..79ca504 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/campaign/UserCampaignData.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/campaign/UserCampaignData.java
@@ -3,5 +3,5 @@ package ch.gtache.elderscrollslegends.service.campaign;
import java.util.List;
public record UserCampaignData(int campaignId, boolean isActive, int lastPlayedActIndex, int lastPlayedChapterIndex,
- int lastPlayedChapterEventINdex, List actData, List ownedActs) {
+ int lastPlayedChapterEventIndex, List actData, List ownedActs) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/chat/ChatEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/chat/ChatEndpoints.java
index a4cecbe..5ba2375 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/chat/ChatEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/chat/ChatEndpoints.java
@@ -1,18 +1,35 @@
package ch.gtache.elderscrollslegends.service.chat;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
+import org.jboss.logging.Logger;
+
+import java.util.Objects;
@Path("/chat")
-public class ChatEndpoints {
+public class ChatEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(ChatEndpoints.class);
+ private final ChatService chatService;
+
+ @Inject
+ ChatEndpoints(final AccountService accountService, final ChatService chatService) {
+ super(accountService);
+ this.chatService = Objects.requireNonNull(chatService);
+ }
- @Path("sendChatMessage")
@POST
+ @Path("sendChatMessage")
@Consumes("application/json")
public void sendChatMessage(@HeaderParam("Authorization") final String authentication,
final OutgoingMessage message) {
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("SendChatMessage called by " + steamID + " : " + message);
+ chatService.sendMessage(steamID, message.toBuid(), message.message());
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/chat/ChatService.java b/src/main/java/ch/gtache/elderscrollslegends/service/chat/ChatService.java
new file mode 100644
index 0000000..aa9bbbf
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/chat/ChatService.java
@@ -0,0 +1,20 @@
+package ch.gtache.elderscrollslegends.service.chat;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class ChatService extends BaseService {
+
+ @Inject
+ ChatService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ void sendMessage(final String senderID, final String receiverID, final String message) {
+
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftResult.java b/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftResult.java
new file mode 100644
index 0000000..01c2a84
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftResult.java
@@ -0,0 +1,7 @@
+package ch.gtache.elderscrollslegends.service.crafting;
+
+import ch.gtache.elderscrollslegends.service.Card;
+
+record CraftResult(Card card, int totalGems, int regularRemaining, int premiumRemaining) {
+
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftingEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftingEndpoints.java
index 726f8bf..bea168f 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftingEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftingEndpoints.java
@@ -1,38 +1,71 @@
package ch.gtache.elderscrollslegends.service.crafting;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.CardService;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import java.util.Objects;
@Path("/crafting")
-public class CraftingEndpoints {
+public class CraftingEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(CraftingEndpoints.class);
+
+ private final CraftingService craftingService;
+ private final CardService cardService;
+
+ @Inject
+ CraftingEndpoints(final AccountService accountService, final CraftingService craftingService,
+ final CardService cardService) {
+ super(accountService);
+ this.craftingService = Objects.requireNonNull(craftingService);
+ this.cardService = Objects.requireNonNull(cardService);
+ }
- @Path("soulTrapExtras")
@POST
+ @Path("soulTrapExtras")
@Consumes("application/json")
@Produces("application/json")
public SoulTrapExtrasResponse soulTrapExtras(@HeaderParam("Authorization") final String authentication,
final SoulTrapExtrasRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("SoulTrapExtras called by " + steamID + " : " + request);
+ final var soulTrapped = craftingService.soulTrap(steamID, request.priority());
+ return new SoulTrapExtrasResponse(soulTrapped);
}
- @Path("sell")
@POST
+ @Path("sell")
@Consumes("application/json")
@Produces("application/json")
public CraftingResponse sell(@HeaderParam("Authorization") final String authentication,
final CraftingRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("Sell called by " + steamID + " : " + request);
+ final var card = cardService.getCard(request.typeHash());
+ final var result = craftingService.sell(steamID, card, request.amount(), request.isPremium());
+ return new CraftingResponse(card.hash(), result.totalGems(), result.regularRemaining(),
+ result.premiumRemaining(), false);
}
- @Path("purchase")
@POST
+ @Path("purchase")
@Consumes("application/json")
@Produces("application/json")
public CraftingResponse purchase(@HeaderParam("Authorization") final String authentication,
final CraftingRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("Purchase called by " + steamID + " : " + request);
+ final var card = cardService.getCard(request.typeHash());
+ final var result = craftingService.purchase(steamID, card, request.amount(), request.isPremium());
+ return new CraftingResponse(card.hash(), result.totalGems(), result.regularRemaining(),
+ result.premiumRemaining(), false);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftingService.java b/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftingService.java
new file mode 100644
index 0000000..6433ece
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/crafting/CraftingService.java
@@ -0,0 +1,29 @@
+package ch.gtache.elderscrollslegends.service.crafting;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import ch.gtache.elderscrollslegends.service.Card;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class CraftingService extends BaseService {
+
+ @Inject
+ CraftingService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ int soulTrap(final String steamID, final String priority) {
+ return 0;
+ }
+
+ CraftResult sell(final String steamID, final Card card, final int amount, final boolean premium) {
+ return new CraftResult(card, 0, 0, 0);
+ }
+
+ CraftResult purchase(final String steamID, final Card card, final int amount, final boolean premium) {
+ return new CraftResult(card, 0, 0, 0);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/AcceptDailyRewardResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/AcceptDailyRewardResponse.java
new file mode 100644
index 0000000..fcb568e
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/AcceptDailyRewardResponse.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.dailyreward;
+
+public record AcceptDailyRewardResponse(AcceptDailyRewardResult result) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/AcceptDailyRewardResult.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/AcceptDailyRewardResult.java
new file mode 100644
index 0000000..9983319
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/AcceptDailyRewardResult.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.dailyreward;
+
+import java.util.List;
+
+public record AcceptDailyRewardResult(int xp, int gold, int gems, List items) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyItemType.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyItemType.java
new file mode 100644
index 0000000..a4f224b
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyItemType.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.dailyreward;
+
+public record DailyItemType(String type, int typeId, int count, boolean isPremium) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardDescription.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardDescription.java
new file mode 100644
index 0000000..af700a6
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardDescription.java
@@ -0,0 +1,5 @@
+package ch.gtache.elderscrollslegends.service.dailyreward;
+
+public record DailyRewardDescription(String scheduleKey, PreRewardedVisibilityType preRewardedVisibility,
+ String displayKey, int amount, boolean delivered, boolean deliveredToday) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardsEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardsEndpoints.java
new file mode 100644
index 0000000..d583e9a
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardsEndpoints.java
@@ -0,0 +1,47 @@
+package ch.gtache.elderscrollslegends.service.dailyreward;
+
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import java.util.Objects;
+
+@Path("/dailyrewards")
+public class DailyRewardsEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(DailyRewardsEndpoints.class);
+
+ private final DailyRewardsService dailyRewardsService;
+
+ @Inject
+ DailyRewardsEndpoints(final AccountService accountService, final DailyRewardsService dailyRewardsService) {
+ super(accountService);
+ this.dailyRewardsService = Objects.requireNonNull(dailyRewardsService);
+ }
+
+ @GET
+ @Path("list")
+ @Produces("application/json")
+ public ListDailyRewardsResponse list(@HeaderParam("Authorization") final String authentication) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("List called by " + steamID);
+ final var rewards = dailyRewardsService.listRewards(steamID);
+ return new ListDailyRewardsResponse(rewards);
+ }
+
+ @POST
+ @Path("acceptReward")
+ @Produces("application/json")
+ public AcceptDailyRewardResponse acceptReward(@HeaderParam("Authorization") final String authentication) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("AcceptReward called by " + steamID);
+ final var result = dailyRewardsService.acceptReward(steamID);
+ return new AcceptDailyRewardResponse(result);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardsService.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardsService.java
new file mode 100644
index 0000000..7d9d2a3
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/DailyRewardsService.java
@@ -0,0 +1,25 @@
+package ch.gtache.elderscrollslegends.service.dailyreward;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+@ApplicationScoped
+class DailyRewardsService extends BaseService {
+
+ @Inject
+ DailyRewardsService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ List listRewards(final String steamID) {
+ return List.of();
+ }
+
+ AcceptDailyRewardResult acceptReward(final String steamID) {
+ return new AcceptDailyRewardResult(0, 0, 0, List.of());
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/ListDailyRewardsResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/ListDailyRewardsResponse.java
new file mode 100644
index 0000000..b1c481e
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/ListDailyRewardsResponse.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.dailyreward;
+
+import java.util.List;
+
+public record ListDailyRewardsResponse(List rewards) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/PreRewardedVisibilityType.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/PreRewardedVisibilityType.java
similarity index 62%
rename from src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/PreRewardedVisibilityType.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/PreRewardedVisibilityType.java
index 85ae6b9..af241ea 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/PreRewardedVisibilityType.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/dailyreward/PreRewardedVisibilityType.java
@@ -1,4 +1,4 @@
-package ch.gtache.elderscrollslegends.service.dailyrewards;
+package ch.gtache.elderscrollslegends.service.dailyreward;
public enum PreRewardedVisibilityType {
Unknown,
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/AcceptRewardResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/AcceptRewardResponse.java
deleted file mode 100644
index 8dab525..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/AcceptRewardResponse.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.dailyrewards;
-
-public record AcceptRewardResponse(AcceptRewardResult result) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/AcceptRewardResult.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/AcceptRewardResult.java
deleted file mode 100644
index 6fa2073..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/AcceptRewardResult.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package ch.gtache.elderscrollslegends.service.dailyrewards;
-
-import java.util.List;
-
-public record AcceptRewardResult(int xp, int gold, int gems, List items) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/DailyRewardsEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/DailyRewardsEndpoints.java
deleted file mode 100644
index 492d008..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/DailyRewardsEndpoints.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ch.gtache.elderscrollslegends.service.dailyrewards;
-
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.HeaderParam;
-import jakarta.ws.rs.POST;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.Produces;
-
-@Path("/dailyrewards")
-public class DailyRewardsEndpoints {
-
- @Path("list")
- @GET
- @Produces("application/json")
- public ListRewardsResponse list(@HeaderParam("Authorization") final String authentication) {
- return null;
- }
-
- @Path("acceptReward")
- @POST
- @Produces("application/json")
- public AcceptRewardResponse acceptReward(@HeaderParam("Authorization") final String authentication) {
- return null;
- }
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/ItemType.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/ItemType.java
deleted file mode 100644
index d48e8bb..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/ItemType.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.dailyrewards;
-
-public record ItemType(String type, int typeId, int count, boolean isPremium) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/ListRewardsResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/ListRewardsResponse.java
deleted file mode 100644
index e78712a..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/ListRewardsResponse.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package ch.gtache.elderscrollslegends.service.dailyrewards;
-
-import java.util.List;
-
-public record ListRewardsResponse(List rewards) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/RewardDescription.java b/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/RewardDescription.java
deleted file mode 100644
index b390234..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/dailyrewards/RewardDescription.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package ch.gtache.elderscrollslegends.service.dailyrewards;
-
-public record RewardDescription(String scheduleKey, PreRewardedVisibilityType preRewardedVisibility,
- String displayKey, int amount, boolean delivered, boolean deliveredToday) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/error/ErrorEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/error/ErrorEndpoints.java
index 8decd8f..0149907 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/error/ErrorEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/error/ErrorEndpoints.java
@@ -1,5 +1,8 @@
package ch.gtache.elderscrollslegends.service.error;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
@@ -8,21 +11,29 @@ import org.jboss.logging.Logger;
@Path("/errorreporting")
-public class ErrorEndpoints {
+public class ErrorEndpoints extends BaseEndpoints {
private static final Logger logger = Logger.getLogger(ErrorEndpoints.class);
+ private final ErrorService errorService;
+
+ @Inject
+ ErrorEndpoints(final AccountService accountService, final ErrorService errorService) {
+ super(accountService);
+ this.errorService = errorService;
+ }
+
@POST
@Path("reportError")
public void reportError(@HeaderParam("Authorization") final String authentication,
final ErrorReport errorReport) {
logger.info("Report error called by " + authentication + " : " + errorReport);
- //Do nothing
+ errorService.reportError(errorReport.report());
}
@GET
@Path("reportingConfig")
public FetchResponse getReportingConfig(@HeaderParam("Authorization") final String authentication) {
logger.info("ReportingConfig called by " + authentication);
- return null;
+ return new FetchResponse(true);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/error/ErrorService.java b/src/main/java/ch/gtache/elderscrollslegends/service/error/ErrorService.java
new file mode 100644
index 0000000..16098b9
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/error/ErrorService.java
@@ -0,0 +1,20 @@
+package ch.gtache.elderscrollslegends.service.error;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class ErrorService extends BaseService {
+
+ @Inject
+ ErrorService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ void reportError(final String report) {
+
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/events/Event.java b/src/main/java/ch/gtache/elderscrollslegends/service/events/Event.java
new file mode 100644
index 0000000..7c7129d
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/events/Event.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.events;
+
+public record Event(long id) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/events/EventLeaderboard.java b/src/main/java/ch/gtache/elderscrollslegends/service/events/EventLeaderboard.java
new file mode 100644
index 0000000..b765780
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/events/EventLeaderboard.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.events;
+
+import java.util.List;
+
+public record EventLeaderboard(Event event, long totalPages, long userPage, List entries) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/events/EventsEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/events/EventsEndpoints.java
index 102fc9b..69cb36e 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/events/EventsEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/events/EventsEndpoints.java
@@ -1,20 +1,44 @@
package ch.gtache.elderscrollslegends.service.events;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.DeckService;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import static java.util.Objects.requireNonNull;
@Path("events")
-public class EventsEndpoints {
+public class EventsEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(EventsEndpoints.class);
+
+ private final EventsService eventsService;
+ private final DeckService deckService;
+
+ @Inject
+ EventsEndpoints(final AccountService accountService, final EventsService eventsService,
+ final DeckService deckService) {
+ super(accountService);
+ this.eventsService = requireNonNull(eventsService);
+ this.deckService = requireNonNull(deckService);
+ }
@POST
@Path("finalizeEvent")
@Consumes("application/json")
public void finalizeEvent(@HeaderParam("Authorization") final String authentication,
final FinalizeEventRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("finalizeEvent called by " + steamID + " : " + request);
+ final var event = eventsService.getEvent(request.eventId());
+ eventsService.finalizeEvent(steamID, event);
}
@POST
@@ -22,6 +46,10 @@ public class EventsEndpoints {
@Consumes("application/json")
public void finalizeEventRun(@HeaderParam("Authorization") final String authentication,
final FinalizeEventRunRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("finalizeEventRun called by " + steamID + " : " + request);
+ final var event = eventsService.getEvent(request.eventId());
+ eventsService.finalizeEventRun(steamID, event);
}
@POST
@@ -30,7 +58,12 @@ public class EventsEndpoints {
@Produces("application/json")
public GetEventLeaderboardResponse getEventLeaderboard(@HeaderParam("Authorization") final String authentication,
final GetEventLeaderboardRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("getEventLeaderboard called by " + steamID + " : " + request);
+ final var event = eventsService.getEvent(request.eventId());
+ final var leaderboard = eventsService.getEventLeaderboard(steamID, event);
+ return new GetEventLeaderboardResponse(event.id(), leaderboard.totalPages(),
+ leaderboard.userPage(), leaderboard.entries());
}
@POST
@@ -39,7 +72,11 @@ public class EventsEndpoints {
@Produces("application/json")
public PurchaseEventResult purchaseEvent(@HeaderParam("Authorization") final String authentication,
final PurchaseEventRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("purchaseEvent called by " + steamID + " : " + request);
+ final var event = eventsService.getEvent(request.eventId());
+ eventsService.purchaseEvent(steamID, event, request.purchaseType());
+ return new PurchaseEventResult();
}
@POST
@@ -48,7 +85,11 @@ public class EventsEndpoints {
@Produces("application/json")
public PurchaseEventRunResult purchaseEventRun(@HeaderParam("Authorization") final String authentication,
final PurchaseEventRunRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("purchaseEvent called by " + steamID + " : " + request);
+ final var event = eventsService.getEvent(request.eventId());
+ eventsService.purchaseEventRun(steamID, event, request.purchaseType());
+ return new PurchaseEventRunResult();
}
@POST
@@ -56,6 +97,11 @@ public class EventsEndpoints {
@Consumes("application/json")
public void selectExplicitDeck(@HeaderParam("Authorization") final String authentication,
final SelectExplicitDeckRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("selectExplicitDeck called by " + steamID + " : " + request);
+ final var event = eventsService.getEvent(request.eventId());
+ final var deck = deckService.getDeck(steamID, request.deckTypeHash());
+ eventsService.selectExplicitDeck(steamID, event, deck);
}
@POST
@@ -64,13 +110,20 @@ public class EventsEndpoints {
@Produces("application/json")
public UpdateEventLeaderboardRankResponse getEventLeaderboardRank(@HeaderParam("Authorization") final String authentication,
final UpdateEventLeaderboardRankRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("getEventLeaderboardRank called by " + steamID + " : " + request);
+ final var event = eventsService.getEvent(request.eventId());
+ final var ranking = eventsService.updateEventLeaderboardRank(steamID, event);
+ return new UpdateEventLeaderboardRankResponse(event.id(), ranking);
}
@GET
@Path("fetch")
@Produces("application/json")
public ListEventsResponse fetchEvents(@HeaderParam("Authorization") final String authentication) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetchEvents called by " + steamID);
+ final var events = eventsService.getEvents(steamID);
+ return new ListEventsResponse(events);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/events/EventsService.java b/src/main/java/ch/gtache/elderscrollslegends/service/events/EventsService.java
new file mode 100644
index 0000000..155baa5
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/events/EventsService.java
@@ -0,0 +1,54 @@
+package ch.gtache.elderscrollslegends.service.events;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import ch.gtache.elderscrollslegends.service.inventory.Deck;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+@ApplicationScoped
+class EventsService extends BaseService {
+
+ @Inject
+ EventsService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ Event getEvent(final long id) {
+ return new Event(id);
+ }
+
+ void finalizeEvent(final String steamID, final Event event) {
+
+ }
+
+ void finalizeEventRun(final String steamID, final Event event) {
+
+ }
+
+ EventLeaderboard getEventLeaderboard(final String steamID, final Event event) {
+ return new EventLeaderboard(event, 0, 0, List.of());
+ }
+
+ void purchaseEvent(final String steamID, final Event event, final PurchaseType purchaseType) {
+
+ }
+
+ void purchaseEventRun(final String steamID, final Event event, final PurchaseType purchaseType) {
+
+ }
+
+ void selectExplicitDeck(final String steamID, final Event event, final Deck deck) {
+
+ }
+
+ long updateEventLeaderboardRank(final String steamID, final Event event) {
+ return 0;
+ }
+
+ EventDescriptionStruct getEvents(final String steamID) {
+ return null;
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/BlockedItem.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/BlockedItem.java
new file mode 100644
index 0000000..3e5fb31
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/BlockedItem.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+public record BlockedItem(String buid, String username, String service_account_id, String platform) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/BlockedResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/BlockedResponse.java
new file mode 100644
index 0000000..112faad
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/BlockedResponse.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+import java.util.List;
+
+public record BlockedResponse(List blocked, int total_count, int start_keys) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsEndpoints.java
index 2569ffe..1710539 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsEndpoints.java
@@ -1,14 +1,45 @@
package ch.gtache.elderscrollslegends.service.friends;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
+import org.jboss.logging.Logger;
+
+import java.util.List;
@Path("/beam/social/v3/friends")
-public class FriendsEndpoints {
+public class FriendsEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(FriendsEndpoints.class);
+
+ private final FriendsService friendsService;
+
+ @Inject
+ FriendsEndpoints(final AccountService accountService, final FriendsService friendsService) {
+ super(accountService);
+ this.friendsService = friendsService;
+ }
+
+ @GET
+ @Consumes("application/json")
+ @Produces("application/json")
+ public FriendsResponse get(@HeaderParam("Authorization") final String authentication,
+ @QueryParam("product_id") final String productId,
+ @QueryParam("start_keys") final int startKeys,
+ @QueryParam("size") final int size,
+ @QueryParam("language") final String language,
+ @QueryParam("detail") final String detail) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("get called by " + steamID + " : " + productId + " ; " + startKeys + " ; " + size + " ; " + language + " ; " + detail);
+ return new FriendsResponse(List.of(), 0, 0);
+ }
@POST
@Path("/unfriend")
@@ -16,7 +47,27 @@ public class FriendsEndpoints {
@Produces("application/json")
public ActionResponse unfriend(@HeaderParam("Authorization") final String authentication,
final ActionBody request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("unfriend called by " + steamID + " : " + request);
+ for (final var buid : request.buids()) {
+ friendsService.unfriend(steamID, buid);
+ }
+ return new ActionResponse(List.of());
+ }
+
+ @GET
+ @Path("/block")
+ @Consumes("application/json")
+ @Produces("application/json")
+ public BlockedResponse getBlocked(@HeaderParam("Authorization") final String authentication,
+ @QueryParam("product_id") final String productId,
+ @QueryParam("start_keys") final int startKeys,
+ @QueryParam("size") final int size,
+ @QueryParam("language") final String language,
+ @QueryParam("detail") final String detail) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("getBlocked called by " + steamID + " : " + productId + " ; " + startKeys + " ; " + size + " ; " + language + " ; " + detail);
+ return new BlockedResponse(List.of(), 0, 0);
}
@POST
@@ -25,7 +76,12 @@ public class FriendsEndpoints {
@Produces("application/json")
public ActionResponse block(@HeaderParam("Authorization") final String authentication,
final ActionBody request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("block called by " + steamID + " : " + request);
+ for (final var buid : request.buids()) {
+ friendsService.block(steamID, buid);
+ }
+ return new ActionResponse(List.of());
}
@POST
@@ -34,17 +90,46 @@ public class FriendsEndpoints {
@Produces("application/json")
public ActionResponse unblock(@HeaderParam("Authorization") final String authentication,
final ActionBody request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("unblock called by " + steamID + " : " + request);
+ for (final var buid : request.buids()) {
+ friendsService.unblock(steamID, buid);
+ }
+ return new ActionResponse(List.of());
+ }
+
+ /**
+ * Sends a friend request
+ *
+ * @param authentication
+ * @param startKeys
+ * @param size
+ * @return
+ */
+ @GET
+ @Path("/requests")
+ @Consumes("application/json")
+ @Produces("application/json")
+ public RequestsResponse getRequests(@HeaderParam("Authorization") final String authentication,
+ @QueryParam("start_keys") final int startKeys,
+ @QueryParam("size") final int size) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("getRequests called by " + steamID + " : " + startKeys + " ; " + size);
+ return new RequestsResponse(List.of(), 0);
}
@POST
@Path("/requests")
@Consumes("application/json")
@Produces("application/json")
- public ActionResponse getRequests(@HeaderParam("Authorization") final String authentication,
- @QueryParam("size") final int size,
- final ActionBody request) {
- return null;
+ public ActionResponse requests(@HeaderParam("Authorization") final String authentication,
+ final ActionBody requests) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("requests called by " + steamID);
+ for (final var buid : requests.buids()) {
+ friendsService.sendRequest(steamID, buid);
+ }
+ return new ActionResponse(List.of());
}
@POST
@@ -53,7 +138,12 @@ public class FriendsEndpoints {
@Produces("application/json")
public ActionResponse cancelRequest(@HeaderParam("Authorization") final String authentication,
final ActionBody request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("cancelRequest called by " + steamID + " : " + request);
+ for (final var buid : request.buids()) {
+ friendsService.cancelRequest(steamID, buid);
+ }
+ return new ActionResponse(List.of());
}
@POST
@@ -62,7 +152,12 @@ public class FriendsEndpoints {
@Produces("application/json")
public ActionResponse acceptRequest(@HeaderParam("Authorization") final String authentication,
final ActionBody request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("acceptRequest called by " + steamID + " : " + request);
+ for (final var buid : request.buids()) {
+ friendsService.acceptRequest(steamID, buid);
+ }
+ return new ActionResponse(List.of());
}
@POST
@@ -71,28 +166,39 @@ public class FriendsEndpoints {
@Produces("application/json")
public ActionResponse rejectRequest(@HeaderParam("Authorization") final String authentication,
final ActionBody request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("rejectRequest called by " + steamID + " : " + request);
+ for (final var buid : request.buids()) {
+ friendsService.rejectRequest(steamID, buid);
+ }
+ return new ActionResponse(List.of());
}
- @POST
+ @GET
@Path("/requests/sent")
@Consumes("application/json")
@Produces("application/json")
- public ActionResponse getSentRequests(@HeaderParam("Authorization") final String authentication,
- @QueryParam("size") final int size,
- final ActionBody request) {
- return null;
+ public SentRequestsResponse getSentRequests(@HeaderParam("Authorization") final String authentication,
+ @QueryParam("start_keys") final int startKeys,
+ @QueryParam("size") final int size,
+ final ActionBody request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("getSentRequests called by " + steamID + " : " + startKeys + " ; " + size + " ; " + request);
+ return new SentRequestsResponse(List.of(), 0);
}
@POST
@Path("/search")
@Consumes("application/json")
@Produces("application/json")
- public ActionResponse search(@HeaderParam("Authorization") final String authentication,
+ public SearchResponse search(@HeaderParam("Authorization") final String authentication,
@QueryParam("search_term") final String searchTerm,
+ @QueryParam("start_keys") final int startKeys,
@QueryParam("size") final int size,
final ActionBody request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("search called by " + steamID + " : " + searchTerm + " ; " + startKeys + " ; " + size + " ; " + request);
+ return new SearchResponse(List.of(), 0);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsItem.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsItem.java
new file mode 100644
index 0000000..5025245
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsItem.java
@@ -0,0 +1,5 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+public record FriendsItem(String buid, String username, boolean blocked, String firends_since,
+ String service_account_id, String friendship_type, Presence presence) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsResponse.java
new file mode 100644
index 0000000..cfb275b
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsResponse.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+import java.util.List;
+
+public record FriendsResponse(List friend_list, int total_count, int start_keys) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsService.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsService.java
new file mode 100644
index 0000000..715c4e3
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/FriendsService.java
@@ -0,0 +1,52 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class FriendsService extends BaseService {
+
+ @Inject
+ FriendsService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ void unfriend(final String steamID, final String buid) {
+
+ }
+
+ void block(final String steamID, final String buid) {
+
+ }
+
+ void unblock(final String steamID, final String buid) {
+
+ }
+
+ void cancelRequest(final String steamID, final String buid) {
+
+ }
+
+ void acceptRequest(final String steamID, final String buid) {
+
+ }
+
+ void rejectRequest(final String steamID, final String buid) {
+
+ }
+
+ Object getRequests(final String steamID, final int size) {
+ return null;
+ }
+
+ void sendRequest(final String steamID, final String buid) {
+
+ }
+
+ Object getSentRequests(final String steamID) {
+ return null;
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/Presence.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/Presence.java
new file mode 100644
index 0000000..0fb5825
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/Presence.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+import java.util.List;
+
+public record Presence(String status, String first_party_status, List status_info) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/PresenceStatusInfo.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/PresenceStatusInfo.java
new file mode 100644
index 0000000..dffbec4
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/PresenceStatusInfo.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+public record PresenceStatusInfo(String last_activity_timestamp, String product_id, String platform,
+ String main_game_status, String player_status, String custom_data,
+ Status idle_status, Status offline_status) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/Requester.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/Requester.java
new file mode 100644
index 0000000..bfb4285
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/Requester.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+public record Requester(String buid, String username, String avatar) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/RequestsItem.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/RequestsItem.java
new file mode 100644
index 0000000..24baecf
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/RequestsItem.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+public record RequestsItem(String request_date, Requester requester) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/RequestsResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/RequestsResponse.java
new file mode 100644
index 0000000..f82a7c1
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/RequestsResponse.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+import java.util.List;
+
+public record RequestsResponse(List requests_list, int start_keys) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/SearchResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/SearchResponse.java
new file mode 100644
index 0000000..31fbeb3
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/SearchResponse.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+import java.util.List;
+
+public record SearchResponse(List result, int start_keys) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/SentRequestsResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/SentRequestsResponse.java
new file mode 100644
index 0000000..54259f1
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/SentRequestsResponse.java
@@ -0,0 +1,6 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+import java.util.List;
+
+public record SentRequestsResponse(List requests_list, int start_keys) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/friends/Status.java b/src/main/java/ch/gtache/elderscrollslegends/service/friends/Status.java
new file mode 100644
index 0000000..582ccfe
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/friends/Status.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.friends;
+
+public record Status(int seconds, String timestamp, String text) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/GenericInventoryEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/GenericInventoryEndpoints.java
index 41d8c4c..521ddf1 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/GenericInventoryEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/GenericInventoryEndpoints.java
@@ -1,23 +1,42 @@
package ch.gtache.elderscrollslegends.service.inventory;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
+import org.jboss.logging.Logger;
+
+import java.util.Objects;
@Path("/genericinventory")
-public class GenericInventoryEndpoints {
+public class GenericInventoryEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(GenericInventoryEndpoints.class.getName());
+
+ private final GenericsInventoryService genericsInventoryService;
+
+ GenericInventoryEndpoints(final AccountService accountService,
+ final GenericsInventoryService genericsInventoryService) {
+ super(accountService);
+ this.genericsInventoryService = Objects.requireNonNull(genericsInventoryService);
+ }
@GET
@Path("fetch")
- public FetchResponse fetch(@HeaderParam("Authorization") final String authentication) {
- return null;
+ public InventoryFetchResponse fetch(@HeaderParam("Authorization") final String authentication) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetch called by " + steamID);
+ return new InventoryFetchResponse(genericsInventoryService.getInventory(steamID));
}
@POST
@Path("setSelected")
public void setSelected(@HeaderParam("Authorization") final String authentication,
- final SetSelectedRequest request) {
-
+ final InventorySetSelectedRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("setSelected called by " + steamID);
+ genericsInventoryService.setSelected(steamID, request.category(), request.itemKey());
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/GenericsInventoryService.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/GenericsInventoryService.java
new file mode 100644
index 0000000..3bcca6a
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/GenericsInventoryService.java
@@ -0,0 +1,25 @@
+package ch.gtache.elderscrollslegends.service.inventory;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+@ApplicationScoped
+class GenericsInventoryService extends BaseService {
+
+ @Inject
+ GenericsInventoryService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ List getInventory(final String steamID) {
+ return List.of();
+ }
+
+ void setSelected(final String steamID, final String category, final String itemKey) {
+
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventoryEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventoryEndpoints.java
index fccdae4..370a5d1 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventoryEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventoryEndpoints.java
@@ -38,8 +38,8 @@ public class InventoryEndpoints {
@Path("saveDeck_v2")
@Consumes("application/json")
@Produces("application/json")
- public SaveResult saveDeck(@HeaderParam("Authorization") final String authentication,
- final Deck request) {
+ public InventorySaveResult saveDeck(@HeaderParam("Authorization") final String authentication,
+ final Deck request) {
return null;
}
@@ -47,8 +47,8 @@ public class InventoryEndpoints {
@Path("setSeens")
@Consumes("application/json")
@Produces("application/json")
- public SaveResult setSeens(@HeaderParam("Authorization") final String authentication,
- final SetSeens request) {
+ public InventorySaveResult setSeens(@HeaderParam("Authorization") final String authentication,
+ final InventorySetSeens request) {
return null;
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/FetchResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventoryFetchResponse.java
similarity index 54%
rename from src/main/java/ch/gtache/elderscrollslegends/service/inventory/FetchResponse.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventoryFetchResponse.java
index ec9ef59..aac0bce 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/FetchResponse.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventoryFetchResponse.java
@@ -2,5 +2,5 @@ package ch.gtache.elderscrollslegends.service.inventory;
import java.util.List;
-public record FetchResponse(List categories) {
+public record InventoryFetchResponse(List categories) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SaveResult.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySaveResult.java
similarity index 53%
rename from src/main/java/ch/gtache/elderscrollslegends/service/inventory/SaveResult.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySaveResult.java
index 4f8e9e7..b0811fb 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SaveResult.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySaveResult.java
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.inventory;
-public record SaveResult(boolean success) {
+public record InventorySaveResult(boolean success) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySeenEntry.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySeenEntry.java
new file mode 100644
index 0000000..f605ebd
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySeenEntry.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.inventory;
+
+public record InventorySeenEntry(int cardTypeHash, boolean isPremium, boolean isRegular) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySelectedItem.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySelectedItem.java
new file mode 100644
index 0000000..dc54ecc
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySelectedItem.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.inventory;
+
+public record InventorySelectedItem(String category, String selected) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SetSeens.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySetSeens.java
similarity index 55%
rename from src/main/java/ch/gtache/elderscrollslegends/service/inventory/SetSeens.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySetSeens.java
index 46afeb0..4ffaade 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SetSeens.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySetSeens.java
@@ -2,5 +2,5 @@ package ch.gtache.elderscrollslegends.service.inventory;
import java.util.List;
-public record SetSeens(List entries) {
+public record InventorySetSeens(List entries) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySetSelectedRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySetSelectedRequest.java
new file mode 100644
index 0000000..a208e29
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/InventorySetSelectedRequest.java
@@ -0,0 +1,4 @@
+package ch.gtache.elderscrollslegends.service.inventory;
+
+public record InventorySetSelectedRequest(String category, String itemKey) {
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SeenEntry.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SeenEntry.java
deleted file mode 100644
index 0946eda..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SeenEntry.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.inventory;
-
-public record SeenEntry(int cardTypeHash, boolean isPremium, boolean isRegular) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SelectedItem.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SelectedItem.java
deleted file mode 100644
index b50dc65..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SelectedItem.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.inventory;
-
-public record SelectedItem(String category, String selected) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SetSelectedRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SetSelectedRequest.java
deleted file mode 100644
index b45aa1b..0000000
--- a/src/main/java/ch/gtache/elderscrollslegends/service/inventory/SetSelectedRequest.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ch.gtache.elderscrollslegends.service.inventory;
-
-public record SetSelectedRequest(String category, String itemKey) {
-}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/matching/MatchingEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/matching/MatchingEndpoints.java
index b7bc8f3..3bc5e7f 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/matching/MatchingEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/matching/MatchingEndpoints.java
@@ -1,20 +1,38 @@
package ch.gtache.elderscrollslegends.service.matching;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import java.util.Objects;
@Path("matching")
-public class MatchingEndpoints {
+public class MatchingEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(MatchingEndpoints.class.getName());
+
+ private final MatchingService matchingService;
+
+ @Inject
+ MatchingEndpoints(final AccountService accountService, final MatchingService matchingService) {
+ super(accountService);
+ this.matchingService = Objects.requireNonNull(matchingService);
+ }
@GET
@Path("reserve")
@Produces("application/json")
public ClientMatchReserveRequestResult reserve(@HeaderParam("Authorization") final String authentication) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("reserve called by " + steamID);
+ return new ClientMatchReserveRequestResult("", MatchErrorType.InternalError);
}
@POST
@@ -23,7 +41,9 @@ public class MatchingEndpoints {
@Produces("application/json")
public ClientMatchRequestResult add(@HeaderParam("Authorization") final String authentication,
final ClientMatchRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("add called by " + steamID + " : " + request);
+ return new ClientMatchRequestResult("", "", Integer.MAX_VALUE, Integer.MAX_VALUE);
}
@POST
@@ -31,6 +51,9 @@ public class MatchingEndpoints {
@Consumes("application/json")
public void cancel(@HeaderParam("Authorization") final String authentication,
final ClientMatchCancelRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("cancel called by " + steamID + " : " + request);
+ matchingService.cancel(steamID, request.requestId(), request.friendBuid());
}
@POST
@@ -38,6 +61,9 @@ public class MatchingEndpoints {
@Consumes("application/json")
public void respondChallenge(@HeaderParam("Authorization") final String authentication,
final ClientChallengeRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("respondChallenge called by " + steamID + " : " + request);
+ matchingService.respondChallenge(steamID, request.friendBuid(), request.type());
}
@POST
@@ -46,20 +72,25 @@ public class MatchingEndpoints {
@Produces("application/json")
public RefreshResult refresh(@HeaderParam("Authorization") final String authentication,
final RefreshRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("refresh called by " + steamID + " : " + request);
+ return new RefreshResult(Integer.MAX_VALUE, null);
}
@GET
@Path("rejoin")
@Produces("application/json")
public ClientMatchRejoinResult rejoin(@HeaderParam("Authorization") final String authentication) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("rejoin called by " + steamID);
+ return new ClientMatchRejoinResult(null);
}
@GET
@Path("rejoindeny")
public void rejoinDeny(@HeaderParam("Authorization") final String authentication) {
-
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("rejoinDeny called by " + steamID);
}
@POST
@@ -68,7 +99,10 @@ public class MatchingEndpoints {
@Produces("application/json")
public ClientOpponentBuidResult requestOpponent(@HeaderParam("Authorization") final String authentication,
final ClientOpponentBuidRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("requestOpponent called by " + steamID + " : " + request);
+ final var opponentID = matchingService.requestOpponent(steamID, request.friendBuid());
+ return new ClientOpponentBuidResult(opponentID);
}
@POST
@@ -77,7 +111,9 @@ public class MatchingEndpoints {
@Produces("application/json")
public ClientSpectateRequestResult spectate(@HeaderParam("Authorization") final String authentication,
final ClientSpectateRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("spectate called by " + steamID + " : " + request);
+ return new ClientSpectateRequestResult("", null);
}
@POST
@@ -86,8 +122,8 @@ public class MatchingEndpoints {
@Produces("application/json")
public ClientSpectateRequestResult dualSpectate(@HeaderParam("Authorization") final String authentication,
final ClientSpectateRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("dualspectate called by " + steamID + " : " + request);
+ return new ClientSpectateRequestResult("", null);
}
-
-
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/matching/MatchingService.java b/src/main/java/ch/gtache/elderscrollslegends/service/matching/MatchingService.java
new file mode 100644
index 0000000..474127a
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/matching/MatchingService.java
@@ -0,0 +1,32 @@
+package ch.gtache.elderscrollslegends.service.matching;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class MatchingService extends BaseService {
+
+ @Inject
+ MatchingService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ Object reserve(final String steamID) {
+ return null;
+ }
+
+ void cancel(final String steamID, final String requestID, final String friendID) {
+
+ }
+
+ void respondChallenge(final String steamID, final String friendID, final String type) {
+
+ }
+
+ String requestOpponent(final String steamID, final String friendID) {
+ return null;
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/packages/PackagesEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/packages/PackagesEndpoints.java
index ab5aa4d..bec2848 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/packages/PackagesEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/packages/PackagesEndpoints.java
@@ -1,20 +1,35 @@
package ch.gtache.elderscrollslegends.service.packages;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import java.util.List;
@Path("packages")
-public class PackagesEndpoints {
+public class PackagesEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(PackagesEndpoints.class);
+
+ @Inject
+ PackagesEndpoints(final AccountService accountService, final PackagesService packagesService) {
+ super(accountService);
+ }
@GET
@Path("list")
@Produces("application/json")
public ListPackagesResponse list(@HeaderParam("Authorization") final String authentication) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("list called by " + steamID);
+ return new ListPackagesResponse(0, List.of());
}
@POST
@@ -23,7 +38,9 @@ public class PackagesEndpoints {
@Produces("application/json")
public DeliverResponse deliver(@HeaderParam("Authorization") final String authentication,
final DeliverRequest deliverRequest) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("deliver called by " + steamID + " : " + deliverRequest);
+ return new DeliverResponse(new Delivered(0, 0, List.of()));
}
@POST
@@ -32,6 +49,8 @@ public class PackagesEndpoints {
@Produces("application/json")
public MassPackOpeningResponse massPackOpening(@HeaderParam("Authorization") final String authentication,
final MassPackOpeningRequest massPackOpeningRequest) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("massPackOpening called by " + steamID + " : " + massPackOpeningRequest);
+ return new MassPackOpeningResponse(0, List.of());
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/packages/PackagesService.java b/src/main/java/ch/gtache/elderscrollslegends/service/packages/PackagesService.java
new file mode 100644
index 0000000..cc86c62
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/packages/PackagesService.java
@@ -0,0 +1,16 @@
+package ch.gtache.elderscrollslegends.service.packages;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class PackagesService extends BaseService {
+
+ @Inject
+ PackagesService(final DataSource dataSource) {
+ super(dataSource);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/presence/PresenceEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/presence/PresenceEndpoints.java
index 3771801..1212801 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/presence/PresenceEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/presence/PresenceEndpoints.java
@@ -1,13 +1,24 @@
package ch.gtache.elderscrollslegends.service.presence;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
@Path("/beam/presence/v1")
-public class PresenceEndpoints {
+public class PresenceEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(PresenceEndpoints.class);
+
+ @Inject
+ PresenceEndpoints(final AccountService accountService, final PresenceService presenceService) {
+ super(accountService);
+ }
@POST
@Path("presence")
@@ -15,6 +26,8 @@ public class PresenceEndpoints {
@Produces("application/json")
public PostPresenceResponse presence(@HeaderParam("Authorization") final String authentication,
final PostPresenceBody postPresenceBody) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("presence called by " + steamID + " : " + postPresenceBody);
+ return new PostPresenceResponse("", 0, new PresenceResponse(0));
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/presence/PresenceService.java b/src/main/java/ch/gtache/elderscrollslegends/service/presence/PresenceService.java
new file mode 100644
index 0000000..d82ee01
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/presence/PresenceService.java
@@ -0,0 +1,16 @@
+package ch.gtache.elderscrollslegends.service.presence;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class PresenceService extends BaseService {
+
+ @Inject
+ PresenceService(final DataSource dataSource) {
+ super(dataSource);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileEndpoints.java
index 2eaf4e0..8cee71b 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileEndpoints.java
@@ -1,5 +1,7 @@
package ch.gtache.elderscrollslegends.service.profile;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
@@ -11,59 +13,60 @@ import java.util.List;
import java.util.Objects;
@Path("/profile")
-public class ProfileEndpoints {
+public class ProfileEndpoints extends BaseEndpoints {
private static final Logger logger = Logger.getLogger(ProfileEndpoints.class);
private final ProfileService profileService;
@Inject
- ProfileEndpoints(final ProfileService profileService) {
+ ProfileEndpoints(final AccountService accountService, final ProfileService profileService) {
+ super(accountService);
this.profileService = Objects.requireNonNull(profileService);
}
@POST
@Path("/doE3Reset")
public void doE3Reset(@HeaderParam("Authorization") final String authentication) {
- logger.info("doE3Reset called by " + authentication);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("doE3Reset called by " + steamID);
}
@POST
@Path("/requestOptOut")
public void requestOptOut(@HeaderParam("Authorization") final String authentication) {
- logger.info("requestOptOut called by " + authentication);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("requestOptOut called by " + steamID);
}
@POST
@Path("/requestOptIn")
public void requestOptIn(@HeaderParam("Authorization") final String authentication) {
- logger.info("requestOptIn called by " + authentication);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("requestOptIn called by " + steamID);
}
@POST
@Path("/setOnboardingProgress")
public void setOnboardingProgress(@HeaderParam("Authorization") final String authentication,
final SetOnboardingProgressRequest request) {
- logger.info("setOnboardingProgress called by " + authentication + " : " + request);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("setOnboardingProgress called by " + steamID + " : " + request);
}
@GET
@Path("/setSeen")
public String setSeen(@HeaderParam("Authorization") final String authentication) {
- logger.info("setSeen called by " + authentication);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("setSeen called by " + steamID);
return null;
}
@GET
@Path("/doSeasonRollover")
public String doSeasonRollover(@HeaderParam("Authorization") final String authentication) {
- logger.info("doSeasonRollover called by " + authentication);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("doSeasonRollover called by " + steamID);
return null;
}
@@ -71,8 +74,9 @@ public class ProfileEndpoints {
@Path("getProfileForBuid")
public ProfileForBuidResponse getProfileForBuid(@HeaderParam("Authorization") final String authentication,
final GetProfileForBuidRequest request) {
- logger.info("getProfileForBuid called by " + authentication + " : " + request);
- final var profile = profileService.getProfile(request.buid());
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("getProfileForBuid called by " + steamID + " : " + request);
+ final var profile = profileService.getProfile(steamID, request.buid());
return new ProfileForBuidResponse(profile, List.of());
}
@@ -80,14 +84,15 @@ public class ProfileEndpoints {
@Path("logMatchStart")
public void logMatchStart(@HeaderParam("Authorization") final String authentication,
final MatchStartLogData request) {
- logger.info("logMatchStart called by " + authentication + " : " + request);
- //Do nothing
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("logMatchStart called by " + steamID + " : " + request);
}
@GET
@Path("/fetch")
public FetchProfileResponse getFetch(@HeaderParam("Authorization") final String authentication) {
- logger.info("fetch called by " + authentication);
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetch called by " + steamID);
+ return new FetchProfileResponse(profileService.getProfile(steamID, steamID));
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileForBuidResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileForBuidResponse.java
index e2a28ef..b00c83c 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileForBuidResponse.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileForBuidResponse.java
@@ -1,8 +1,8 @@
package ch.gtache.elderscrollslegends.service.profile;
-import ch.gtache.elderscrollslegends.service.inventory.SelectedItem;
+import ch.gtache.elderscrollslegends.service.inventory.InventorySelectedItem;
import java.util.List;
-public record ProfileForBuidResponse(ProfileStruct profile, List categories) {
+public record ProfileForBuidResponse(ProfileStruct profile, List categories) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileService.java b/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileService.java
index a3845a6..571e152 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileService.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/profile/ProfileService.java
@@ -1,22 +1,21 @@
package ch.gtache.elderscrollslegends.service.profile;
+import ch.gtache.elderscrollslegends.service.BaseService;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import javax.sql.DataSource;
-import java.util.Objects;
@ApplicationScoped
-public class ProfileService {
+public class ProfileService extends BaseService {
- private final DataSource dataSource;
@Inject
ProfileService(final DataSource dataSource) {
- this.dataSource = Objects.requireNonNull(dataSource);
+ super(dataSource);
}
- ProfileStruct getProfile(final String steamID) {
+ ProfileStruct getProfile(final String steamID, final String profileID) {
return null;//new ProfileStruct(name, level, gold, gems, xp, tickets, onboardingProgressFlags, dailyGold, dailyGems, ratins, maxRatings, collectionStats, seasonRollovers);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/pubsub/PubSubAuthEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/pubsub/PubSubAuthEndpoints.java
index 5a12098..67764ea 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/pubsub/PubSubAuthEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/pubsub/PubSubAuthEndpoints.java
@@ -1,16 +1,35 @@
package ch.gtache.elderscrollslegends.service.pubsub;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import java.util.Objects;
@Path("pubsubauth")
-public class PubSubAuthEndpoints {
+public class PubSubAuthEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(PubSubAuthEndpoints.class);
+
+ private final PubSubService pubSubService;
+
+ @Inject
+ PubSubAuthEndpoints(final AccountService accountService, final PubSubService pubSubService) {
+ super(accountService);
+ this.pubSubService = Objects.requireNonNull(pubSubService);
+ }
@GET
@Produces("application/json")
public PubSubResponse get(@HeaderParam("Authorization") final String authentication) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("get called by " + steamID);
+ final var chatRooms = pubSubService.getChatRooms(steamID);
+ return new PubSubResponse(authentication.replace("Bearer ", ""), chatRooms);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/pubsub/PubSubService.java b/src/main/java/ch/gtache/elderscrollslegends/service/pubsub/PubSubService.java
new file mode 100644
index 0000000..e36a71a
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/pubsub/PubSubService.java
@@ -0,0 +1,21 @@
+package ch.gtache.elderscrollslegends.service.pubsub;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+@ApplicationScoped
+class PubSubService extends BaseService {
+
+ @Inject
+ PubSubService(final DataSource dataSource) {
+ super(dataSource);
+ }
+
+ ChatRooms getChatRooms(final String steamID) {
+ return new ChatRooms(List.of());
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsEndpoints.java
index 352a87d..8cc33ca 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsEndpoints.java
@@ -1,43 +1,64 @@
package ch.gtache.elderscrollslegends.service.quests;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import java.util.Objects;
@Path("quests")
-public class QuestsEndpoints {
+public class QuestsEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(QuestsEndpoints.class);
+
+ private final QuestsService questsService;
+
+ @Inject
+ QuestsEndpoints(final AccountService accountService, final QuestsService questsService) {
+ super(accountService);
+ this.questsService = Objects.requireNonNull(questsService);
+ }
@GET
@Path("fetch")
@Produces("application/json")
public QuestsFetchResponse fetch(@HeaderParam("Authorization") final String authentication) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetch called by " + steamID);
+ return new QuestsFetchResponse();
}
@POST
@Path("setSeen")
@Consumes("application/json")
public void setSeen(@HeaderParam("Authorization") final String authentication,
- final SetSeenRequest request) {
-
+ final QuestsSetSeenRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("setSeen called by " + steamID + " : " + request);
}
@POST
@Path("skip")
@Consumes("application/json")
public void skip(@HeaderParam("Authorization") final String authentication,
- final SkipRequest request) {
-
+ final QuestsSkipRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("skip called by " + steamID + " : " + request);
}
@POST
@Path("select")
@Consumes("application/json")
public void select(@HeaderParam("Authorization") final String authentication,
- final SelectRequest request) {
-
+ final QuestsSelectRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("select called by " + steamID + " : " + request);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/quests/SelectRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSelectRequest.java
similarity index 50%
rename from src/main/java/ch/gtache/elderscrollslegends/service/quests/SelectRequest.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSelectRequest.java
index 50cc4f1..b7a19a5 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/quests/SelectRequest.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSelectRequest.java
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.quests;
-public record SelectRequest(int questTypeHash) {
+public record QuestsSelectRequest(int questTypeHash) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsService.java b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsService.java
new file mode 100644
index 0000000..6003d66
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsService.java
@@ -0,0 +1,16 @@
+package ch.gtache.elderscrollslegends.service.quests;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class QuestsService extends BaseService {
+
+ @Inject
+ QuestsService(final DataSource dataSource) {
+ super(dataSource);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/quests/SetSeenRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSetSeenRequest.java
similarity index 59%
rename from src/main/java/ch/gtache/elderscrollslegends/service/quests/SetSeenRequest.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSetSeenRequest.java
index 93db766..a216cbc 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/quests/SetSeenRequest.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSetSeenRequest.java
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.quests;
-public record SetSeenRequest() {
+public record QuestsSetSeenRequest() {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/quests/SkipRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSkipRequest.java
similarity index 61%
rename from src/main/java/ch/gtache/elderscrollslegends/service/quests/SkipRequest.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSkipRequest.java
index 276ccd4..16dc97f 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/quests/SkipRequest.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/quests/QuestsSkipRequest.java
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.quests;
-public record SkipRequest() {
+public record QuestsSkipRequest() {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/reward/DebugGiveTestRewardsRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/reward/DebugGiveTestRewardsRequest.java
index 7ab9945..1f933de 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/reward/DebugGiveTestRewardsRequest.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/reward/DebugGiveTestRewardsRequest.java
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.reward;
-public record DebugGiveTestRewardsRequest(DbugTestRewardsType debugRewardType) {
+public record DebugGiveTestRewardsRequest(DebugTestRewardsType debugRewardType) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/reward/DbugTestRewardsType.java b/src/main/java/ch/gtache/elderscrollslegends/service/reward/DebugTestRewardsType.java
similarity index 79%
rename from src/main/java/ch/gtache/elderscrollslegends/service/reward/DbugTestRewardsType.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/reward/DebugTestRewardsType.java
index fdd9142..b000c16 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/reward/DbugTestRewardsType.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/reward/DebugTestRewardsType.java
@@ -1,6 +1,6 @@
package ch.gtache.elderscrollslegends.service.reward;
-public enum DbugTestRewardsType {
+public enum DebugTestRewardsType {
ALL,
CARDS,
DECKS,
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/reward/RewardsEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/reward/RewardsEndpoints.java
index b2338c8..55d1c30 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/reward/RewardsEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/reward/RewardsEndpoints.java
@@ -1,20 +1,39 @@
package ch.gtache.elderscrollslegends.service.reward;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import org.jboss.logging.Logger;
+
+import java.util.List;
+import java.util.Objects;
@Path("rewards")
-public class RewardsEndpoints {
+public class RewardsEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(RewardsEndpoints.class);
+
+ private final RewardsService rewardsService;
+
+ @Inject
+ RewardsEndpoints(final AccountService accountService, final RewardsService rewardsService) {
+ super(accountService);
+ this.rewardsService = Objects.requireNonNull(rewardsService);
+ }
@GET
@Path("fetch")
@Produces("application/json")
public ListRewardsResponse fetch(@HeaderParam("Authorization") final String authentication) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetch called by " + steamID);
+ return new ListRewardsResponse(List.of());
}
@POST
@@ -23,7 +42,9 @@ public class RewardsEndpoints {
@Produces("application/json")
public AcceptRewardResponse acceptReward(@HeaderParam("Authorization") final String authentication,
final AcceptRewardRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("acceptReward called by " + steamID + " : " + request);
+ return new AcceptRewardResponse(List.of());
}
@POST
@@ -31,5 +52,7 @@ public class RewardsEndpoints {
@Consumes("application/json")
public void debugGiveTestRewards(@HeaderParam("Authorization") final String authentication,
final DebugGiveTestRewardsRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("debugGiveTestRewards called by " + steamID + " : " + request);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/reward/RewardsService.java b/src/main/java/ch/gtache/elderscrollslegends/service/reward/RewardsService.java
new file mode 100644
index 0000000..64abc0d
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/reward/RewardsService.java
@@ -0,0 +1,16 @@
+package ch.gtache.elderscrollslegends.service.reward;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class RewardsService extends BaseService {
+
+ @Inject
+ RewardsService(final DataSource dataSource) {
+ super(dataSource);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesEndpoints.java
index b10be6b..8476d6c 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesEndpoints.java
@@ -1,5 +1,8 @@
package ch.gtache.elderscrollslegends.service.servermessages;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
@@ -7,22 +10,40 @@ import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
+import org.jboss.logging.Logger;
+
+import java.util.List;
+import java.util.Objects;
@Path("servermessages")
-public class ServerMessagesEndpoints {
+public class ServerMessagesEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(ServerMessagesEndpoints.class);
+
+ private final ServerMessagesService serverMessagesService;
+
+ @Inject
+ ServerMessagesEndpoints(final AccountService accountService, final ServerMessagesService serverMessagesService) {
+ super(accountService);
+ this.serverMessagesService = Objects.requireNonNull(serverMessagesService);
+ }
@GET
@Path("fetch")
@Produces("application/json")
- public FetchResponse fetch(@HeaderParam("Authorization") final String authentication,
- @QueryParam("lang") final String lang) {
- return null;
+ public ServerMessagesFetchResponse fetch(@HeaderParam("Authorization") final String authentication,
+ @QueryParam("lang") final String lang) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetch called by " + steamID + " : " + lang);
+ return new ServerMessagesFetchResponse(List.of());
}
@POST
@Path("setSeen")
@Consumes("application/json")
public void setSeen(@HeaderParam("Authorization") final String authentication,
- final SetSeenRequest request) {
+ final ServerMessagesSetSeenRequest request) {
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("setSeen called by " + steamID + " : " + request);
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/FetchResponse.java b/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesFetchResponse.java
similarity index 52%
rename from src/main/java/ch/gtache/elderscrollslegends/service/servermessages/FetchResponse.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesFetchResponse.java
index 838b37a..e727c08 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/FetchResponse.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesFetchResponse.java
@@ -2,5 +2,5 @@ package ch.gtache.elderscrollslegends.service.servermessages;
import java.util.List;
-public record FetchResponse(List messages) {
+public record ServerMessagesFetchResponse(List messages) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesService.java b/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesService.java
new file mode 100644
index 0000000..c03cb0c
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesService.java
@@ -0,0 +1,16 @@
+package ch.gtache.elderscrollslegends.service.servermessages;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class ServerMessagesService extends BaseService {
+
+ @Inject
+ ServerMessagesService(final DataSource dataSource) {
+ super(dataSource);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/SetSeenRequest.java b/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesSetSeenRequest.java
similarity index 51%
rename from src/main/java/ch/gtache/elderscrollslegends/service/servermessages/SetSeenRequest.java
rename to src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesSetSeenRequest.java
index b7f2710..8abf517 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/SetSeenRequest.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/servermessages/ServerMessagesSetSeenRequest.java
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.servermessages;
-public record SetSeenRequest(long messageId) {
+public record ServerMessagesSetSeenRequest(long messageId) {
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/shop/ShopEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/shop/ShopEndpoints.java
index a8674ed..5c3e301 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/shop/ShopEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/shop/ShopEndpoints.java
@@ -1,5 +1,8 @@
package ch.gtache.elderscrollslegends.service.shop;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
@@ -7,15 +10,31 @@ import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
+import org.jboss.logging.Logger;
+
+import java.util.List;
+import java.util.Objects;
@Path("shop")
-public class ShopEndpoints {
+public class ShopEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(ShopEndpoints.class);
+
+ private final ShopService shopService;
+
+ @Inject
+ ShopEndpoints(final AccountService accountService, final ShopService shopService) {
+ super(accountService);
+ this.shopService = Objects.requireNonNull(shopService);
+ }
@GET
@Path("fetchCatalog")
public FetchCatalogResponse fetchCatalog(@HeaderParam("Authorization") final String authentication,
@QueryParam("lang") final String lang) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetchCatalog called by " + steamID + " : " + lang);
+ return new FetchCatalogResponse(new Catalog("", "", List.of(), null));
}
@POST
@@ -23,7 +42,9 @@ public class ShopEndpoints {
@Produces("application/json")
public FetchCatalogResponse fetchCatalog(@HeaderParam("Authorization") final String authentication,
final FetchCatalogRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetchCatalog called by " + steamID + " : " + request);
+ return new FetchCatalogResponse(new Catalog("", "", List.of(), null));
}
@GET
@@ -31,7 +52,9 @@ public class ShopEndpoints {
@Produces("application/json")
public CheckForEntitlementsResult checkForEntitlements(@HeaderParam("Authorization") final String authentication,
@QueryParam("currencyCode") final String currencyCode) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("checkForEntitlements called by " + steamID + " : " + currencyCode);
+ return new CheckForEntitlementsResult(0);
}
@POST
@@ -40,7 +63,9 @@ public class ShopEndpoints {
@Produces("application/json")
public FetchDRPurchaseUrlResponse fetchDRPurchaseURL(@HeaderParam("Authorization") final String authentication,
final FetchDRPurchaseUrlRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("fetchDRPurchaseUrl called by " + steamID + " : " + request);
+ return new FetchDRPurchaseUrlResponse("");
}
@POST
@@ -49,7 +74,9 @@ public class ShopEndpoints {
@Produces("application/json")
public BeginSteamTransactionResponse purchaseWithGold(@HeaderParam("Authorization") final String authentication,
final PurchaseWithGoldRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("purchaseWithGold called by " + steamID + " : " + request);
+ return new BeginSteamTransactionResponse("");
}
@POST
@@ -58,13 +85,16 @@ public class ShopEndpoints {
@Produces("application/json")
public FinalizeIAPPurchaseResponse finalizeIAPPurchase(@HeaderParam("Authorization") final String authentication,
final FinalizeIAPPurchaseRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("finalizeIAPPurchase called by " + steamID + " : " + request);
+ return new FinalizeIAPPurchaseResponse();
}
@POST
@Path("setTargetedSaleSeen")
public void setTargetedSaleSeen(@HeaderParam("Authorization") final String authentication) {
-
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("setTargetedSaleSeen called by " + steamID);
}
@POST
@@ -73,7 +103,9 @@ public class ShopEndpoints {
@Produces("application/json")
public BeginSteamTransactionResponse beginSteamTransaction(@HeaderParam("Authorization") final String authentication,
final BeginSteamTransactionRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("beginSteamTransaction called by " + steamID + " : " + request);
+ return new BeginSteamTransactionResponse("");
}
@POST
@@ -82,6 +114,8 @@ public class ShopEndpoints {
@Produces("application/json")
public FinalizeSteamTransactionResponse finalizeSteamTransaction(@HeaderParam("Authorization") final String authentication,
final FinalizeSteamTransactionRequest request) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("finalizeSteamTransaction called by " + steamID + " : " + request);
+ return new FinalizeSteamTransactionResponse();
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/shop/ShopService.java b/src/main/java/ch/gtache/elderscrollslegends/service/shop/ShopService.java
new file mode 100644
index 0000000..4e5f5c8
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/shop/ShopService.java
@@ -0,0 +1,16 @@
+package ch.gtache.elderscrollslegends.service.shop;
+
+import ch.gtache.elderscrollslegends.service.BaseService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+
+@ApplicationScoped
+class ShopService extends BaseService {
+
+ @Inject
+ ShopService(final DataSource dataSource) {
+ super(dataSource);
+ }
+}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/stats/StatsEndpoints.java b/src/main/java/ch/gtache/elderscrollslegends/service/stats/StatsEndpoints.java
index ea16568..05a3485 100644
--- a/src/main/java/ch/gtache/elderscrollslegends/service/stats/StatsEndpoints.java
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/stats/StatsEndpoints.java
@@ -1,15 +1,32 @@
package ch.gtache.elderscrollslegends.service.stats;
+import ch.gtache.elderscrollslegends.service.BaseEndpoints;
+import ch.gtache.elderscrollslegends.service.account.AccountService;
+import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.Path;
+import org.jboss.logging.Logger;
+
+import java.util.Objects;
@Path("stats")
-public class StatsEndpoints {
+public class StatsEndpoints extends BaseEndpoints {
+
+ private static final Logger logger = Logger.getLogger(StatsEndpoints.class);
+ private final StatsService statsService;
+
+ @Inject
+ StatsEndpoints(final AccountService accountService, final StatsService statsService) {
+ super(accountService);
+ this.statsService = Objects.requireNonNull(statsService);
+ }
@GET
@Path("fetch")
public FetchStatsResponse fetch(@HeaderParam("Authorization") final String authentication) {
- return null;
+ final var steamID = authenticateOrThrow(authentication);
+ logger.info("Stats called by " + steamID);
+ return new FetchStatsResponse(statsService.getStats(steamID), statsService.getMatchHistory(steamID));
}
}
diff --git a/src/main/java/ch/gtache/elderscrollslegends/service/stats/StatsService.java b/src/main/java/ch/gtache/elderscrollslegends/service/stats/StatsService.java
new file mode 100644
index 0000000..1ecf0c8
--- /dev/null
+++ b/src/main/java/ch/gtache/elderscrollslegends/service/stats/StatsService.java
@@ -0,0 +1,28 @@
+package ch.gtache.elderscrollslegends.service.stats;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import javax.sql.DataSource;
+import java.util.List;
+import java.util.Objects;
+
+@ApplicationScoped
+public class StatsService {
+
+ private final DataSource dataSource;
+
+ @Inject
+ StatsService(final DataSource dataSource) {
+ this.dataSource = Objects.requireNonNull(dataSource);
+ }
+
+ //TODO
+ public List getStats(final String steamID) {
+ return List.of();
+ }
+
+ public List getMatchHistory(final String steamID) {
+ return List.of();
+ }
+}
diff --git a/src/main/postgres/init.sql b/src/main/postgres/init.sql
index cd1b732..27e4d60 100644
--- a/src/main/postgres/init.sql
+++ b/src/main/postgres/init.sql
@@ -26,51 +26,6 @@ CREATE TABLE player
ALTER TABLE player
OWNER TO tesl;
-CREATE TABLE token
-(
- id serial PRIMARY KEY NOT NULL,
- player_id int NOT NULL REFERENCES player (id) ON DELETE CASCADE,
- token uuid NOT NULL UNIQUE,
- expiration timestamptz NOT NULL
-);
-
-ALTER TABLE token
- OWNER TO tesl;
-
-CREATE OR REPLACE FUNCTION gen_random_uuid_trigger() RETURNS TRIGGER AS
-$$
-BEGIN
- NEW.token := gen_random_uuid();
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-ALTER FUNCTION gen_random_uuid_trigger()
- OWNER TO tesl;
-
-CREATE OR REPLACE TRIGGER gen_random_uuid_trigger
- BEFORE INSERT
- ON token
- FOR EACH ROW
-EXECUTE PROCEDURE gen_random_uuid_trigger();
-
-CREATE OR REPLACE FUNCTION set_expiration_trigger() RETURNS TRIGGER AS
-$$
-BEGIN
- NEW.expiration := CURRENT_TIMESTAMP + INTERVAL '1 day';
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-ALTER FUNCTION set_expiration_trigger()
- OWNER TO tesl;
-
-CREATE OR REPLACE TRIGGER set_expiration_trigger
- BEFORE INSERT
- ON token
- FOR EACH ROW
-EXECUTE PROCEDURE set_expiration_trigger();
-
CREATE TABLE message
(
id serial PRIMARY KEY NOT NULL,