feat: add analytics backend

This commit is contained in:
2026-05-17 10:14:08 +08:00
parent 6542912d93
commit 3decff526a
19 changed files with 809 additions and 0 deletions
@@ -0,0 +1,46 @@
package com.emotion.service;
import com.emotion.dto.request.analytics.AnalyticsEventBatchRequest;
import com.emotion.dto.request.analytics.AnalyticsEventRequest;
import com.emotion.service.impl.AnalyticsServiceImpl;
import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class AnalyticsServiceTest {
@Test
void safeEventNameAllowsSnakeCase() {
assertTrue(AnalyticsServiceImpl.isSafeEventName("script_generate_success"));
}
@Test
void safeEventNameRejectsUnsafeCharacters() {
assertFalse(AnalyticsServiceImpl.isSafeEventName("script.generate"));
assertFalse(AnalyticsServiceImpl.isSafeEventName("<script>"));
}
@Test
void batchRequestShapeCanHoldValidEvent() {
AnalyticsEventRequest event = new AnalyticsEventRequest();
event.setEventName("page_view");
event.setEventType("page");
event.setPagePath("/pages/main/index");
event.setOccurredAt(LocalDateTime.now());
event.setProperties(Map.of("tab", "script"));
AnalyticsEventBatchRequest request = new AnalyticsEventBatchRequest();
request.setAnonymousId("anon_test");
request.setSessionId("session_test");
request.setEvents(List.of(event));
assertEquals("session_test", request.getSessionId());
assertEquals(1, request.getEvents().size());
}
}