diff --git a/src/main/java/org/tonality/model/Logging.java b/src/main/java/org/tonality/model/Logging.java new file mode 100644 index 0000000000000000000000000000000000000000..24836ed60ffa9b9706d7ad1a5ec3dd58fa51eb36 --- /dev/null +++ b/src/main/java/org/tonality/model/Logging.java @@ -0,0 +1,28 @@ +package org.tonality.model; + +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; + +@Getter +@Setter +@Entity(name = "logging") +@Table(name = "logging") +public class Logging { + @Id + @GeneratedValue(generator = "increment") + @GenericGenerator(name = "increment", strategy = "increment") + @Column(name = "log_id", nullable = false) + private long logId; + + @Column(name = "endpoint", nullable = false) + private String endpoint; + + @Column(name = "ip", nullable = false) + private String IP; + + @Column(name = "description", nullable = false) + private String description; +} diff --git a/src/main/java/org/tonality/repository/Logging.java b/src/main/java/org/tonality/repository/Logging.java new file mode 100644 index 0000000000000000000000000000000000000000..9dfb054d780e959e0bfd362447445765bb7c479a --- /dev/null +++ b/src/main/java/org/tonality/repository/Logging.java @@ -0,0 +1,37 @@ +package org.tonality.repository; + +import java.sql.SQLException; + +public class Logging extends BaseRepository<org.tonality.model.Logging> { + private static Logging instance = null; + + @Override + protected Class<org.tonality.model.Logging> getEntityClass() { + return org.tonality.model.Logging.class; + } + + public static Logging getInstance() { + if (instance == null) { + instance = new Logging(); + } + + return instance; + } + + public org.tonality.model.Logging create(String endpoint, String IP, String description) throws SQLException { + try { + org.tonality.model.Logging log = new org.tonality.model.Logging(); + log.setEndpoint(endpoint); + log.setIP(IP); + log.setDescription(description); + if (org.tonality.repository.Logging.getInstance().add(log) == null) { + throw new Exception("Failed to create log"); + } + + return log; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/main/java/org/tonality/service/BaseWebService.java b/src/main/java/org/tonality/service/BaseWebService.java index 0ac46692eb86a94fc352c78a56db906a3acecf08..b5ceb7be66bb6087c6117de131653564821ba2fc 100644 --- a/src/main/java/org/tonality/service/BaseWebService.java +++ b/src/main/java/org/tonality/service/BaseWebService.java @@ -6,6 +6,7 @@ import javax.xml.ws.handler.soap.SOAPMessageContext; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpExchange; +import org.tonality.repository.Logging; // https://stackoverflow.com/questions/12727989/jax-ws-getting-client-ip/13693024#13693024 public abstract class BaseWebService { @@ -30,10 +31,27 @@ public abstract class BaseWebService { return getClientApiKey() != null && getClientApiKey().equals(System.getenv("API_KEY")); } - protected void logRequest() throws Exception { + protected void logRequest(String endpoint, String description) throws Exception { if (!isRequestValid()) throw new Exception("Invalid request"); // TODO : implement logging to database - System.out.println("Client IP: " + getClientIp()); - System.out.println("Client API Key: " + getClientApiKey()); + + try { + String clientIp = getClientIp(); + String clientApiKey = getClientApiKey(); + + org.tonality.model.Logging log = org.tonality.repository.Logging.getInstance().create(endpoint, clientIp, description); + + if (log != null) { + System.out.println("Request logged successfully:"); + System.out.println("Client IP: " + clientIp); + System.out.println("Client API Key: " + clientApiKey); + } else { + throw new Exception("Failed to log request"); + } + + } catch (Exception e) { + e.printStackTrace(); + throw new Exception("Failed to log request"); + } } } diff --git a/src/main/java/org/tonality/service/Subscription.java b/src/main/java/org/tonality/service/Subscription.java index 7102fe3944a96391761cc62382df5fbf8abb7021..28728bf7c85967d5e33e75a691f3ad1340650049 100644 --- a/src/main/java/org/tonality/service/Subscription.java +++ b/src/main/java/org/tonality/service/Subscription.java @@ -12,7 +12,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public org.tonality.model.Subscription createSubscription(long userId, String username, long premiumAlbumId, String albumName, String artist) { try { - logRequest(); + String description = "User ID: " + userId + ", Username: " + username + ", Premium Album ID: " + + premiumAlbumId + ", Album Name" + albumName + ", Artist: " + artist; + logRequest("subscription", description); return org.tonality.repository.Subscription.getInstance().createSubscription(userId, username, premiumAlbumId, albumName, artist); } catch (Exception e) { e.printStackTrace(); @@ -23,7 +24,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public org.tonality.model.Subscription updateSubscription(long userId, long premiumAlbumId, SubscriptionStatus status) { try { - logRequest(); + String description = "User ID: " + userId + ", Premium Album ID: " + + premiumAlbumId + ", Subscription Status: " + status; + logRequest("subscription", description); return org.tonality.repository.Subscription.getInstance().updateSubscription(userId, premiumAlbumId, status); } catch (Exception e) { e.printStackTrace(); @@ -34,7 +36,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public org.tonality.model.Subscription getSubscription(long userId, long premiumAlbumId) { try { - logRequest(); + String description = "User ID: " + userId + ", Premium Album ID: " + + premiumAlbumId; + logRequest("subscription", description); SubscriptionMiddleware subscriptionMiddleware = new SubscriptionMiddleware(); return subscriptionMiddleware.execute(org.tonality.repository.Subscription.getInstance().getById(new SubscriptionId(userId, premiumAlbumId))); } catch (Exception e) { @@ -46,7 +49,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public List<org.tonality.model.Subscription> searchSubscription(SubscriptionStatus status, String searchInput, String orderBy, int page, int size) { try { - logRequest(); + String description = "Subscription Status: " + status + ", Search Input: " + searchInput + ", Order By: " + orderBy + ", Page: " + page + ", Size: " + size; + logRequest("subscription", description); SubscriptionMiddleware subscriptionMiddleware = new SubscriptionMiddleware(); return subscriptionMiddleware.execute(org.tonality.repository.Subscription.getInstance().searchSubscriptions(status, searchInput, orderBy, page, size)); } catch (Exception e) { @@ -58,7 +62,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public List<org.tonality.model.Subscription> getSubscriptionsByStatus(SubscriptionStatus status, String orderBy, int page, int size) { try { - logRequest(); + String description = "Subscription Status: " + status + ", Order By: " + orderBy + ", Page: " + page + ", Size: " + size; + logRequest("subscription", description); SubscriptionMiddleware subscriptionMiddleware = new SubscriptionMiddleware(); return subscriptionMiddleware.execute(org.tonality.repository.Subscription.getInstance().getSubscriptionByStatus(status, orderBy, page, size)); } catch (Exception e) { @@ -70,7 +75,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public List<org.tonality.model.Subscription> getSubscriptionsByUserId(long userId, int page, int size) { try { - logRequest(); + String description = "User ID: " + userId + ", Page: " + page + ", Size: " + size; + logRequest("subscription", description); SubscriptionMiddleware subscriptionMiddleware = new SubscriptionMiddleware(); return subscriptionMiddleware.execute(org.tonality.repository.Subscription.getInstance().getSubscriptionsByUserId(userId, page, size)); } catch (Exception e) { @@ -82,7 +88,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public boolean deleteSubscription(long userId, long premiumAlbumId) { try { - logRequest(); + String description = "User ID: " + userId + ", Premium Album ID: " + premiumAlbumId; + logRequest("subscription", description); if (!org.tonality.repository.Subscription.getInstance().deleteById(new org.tonality.model.SubscriptionId(userId, premiumAlbumId))) { throw new Exception("Failed to delete subscription"); } @@ -96,7 +103,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public boolean deleteSubscriptionsByUserId(long userId) { try { - logRequest(); + String description = "User ID: " + userId; + logRequest("subscription", description); return org.tonality.repository.Subscription.getInstance().deleteSubscriptionsByUserId(userId); } catch (Exception e) { e.printStackTrace(); @@ -107,7 +115,8 @@ public class Subscription extends BaseWebService implements ISubscription { @Override public boolean deleteSubscriptionsByAlbumId(long premiumAlbumId) { try { - logRequest(); + String description = "Premium Album ID: " + premiumAlbumId; + logRequest("subscription", description); return org.tonality.repository.Subscription.getInstance().deleteSubscriptionsByAlbumId(premiumAlbumId); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index 1af8bee269c849e7002cd39f2ec3e8dd7ef245f9..3d349627681a8137175da376aa6e0954d3b8dbeb 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -14,5 +14,6 @@ <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <mapping class="org.tonality.model.Subscription"/> + <mapping class="org.tonality.model.Logging"/> </session-factory> </hibernate-configuration> \ No newline at end of file