Skip to content

Add Stats API#48

Open
piobeny wants to merge 1 commit intomainfrom
stats-api
Open

Add Stats API#48
piobeny wants to merge 1 commit intomainfrom
stats-api

Conversation

@piobeny
Copy link

@piobeny piobeny commented Mar 6, 2026

Motivation

  • Add support for the Email Sending Stats API (/api/accounts/{account_id}/stats) to the Java SDK, enabling users to retrieve aggregated email sending statistics.

Changes

  • Add SendingStatsResponse model with delivery, bounce, open, click, and spam counts/rates (@JsonProperty annotated)
  • Add SendingStatGroupResponse model with dynamic field deserialization via @JsonAnySetter
  • Add StatsFilter builder class with startDate, endDate, and optional list filters (sendingDomainIds, sendingStreams, categories, emailServiceProviders)
  • Add Stats interface with 5 methods: getStats, byDomain, byCategory, byEmailServiceProvider, byDate
  • Add StatsImpl with query param serialization for array filters ([] suffix)
  • Wire Stats into MailtrapGeneralApi
  • Add unit tests with JSON fixtures
  • Update README with Stats API reference

How to test

  • stats.getStats(accountId, filter) with different filter parameters (startDate, endDate, sendingDomainIds, sendingStreams, categories, emailServiceProviders)
  • Test grouped endpoints (byDomain, byCategory, byEmailServiceProvider, byDate) with filters

Examples

import io.mailtrap.MailtrapClient;
import io.mailtrap.api.stats.Stats;
import io.mailtrap.api.stats.StatsFilter;
import io.mailtrap.model.response.stats.SendingStatsResponse;
import io.mailtrap.model.response.stats.SendingStatGroupResponse;

MailtrapClient client = MailtrapClient.builder()
    .apiKey("api_key")
    .build();

Stats stats = client.general().stats();
long accountId = 12345;

// Get aggregated stats
StatsFilter filter = StatsFilter.builder()
    .startDate("2026-01-01")
    .endDate("2026-01-31")
    .build();
SendingStatsResponse result = stats.getStats(accountId, filter);

// Get stats with filters
StatsFilter filteredFilter = StatsFilter.builder()
    .startDate("2026-01-01")
    .endDate("2026-01-31")
    .sendingDomainIds(List.of(1L, 2L))
    .sendingStreams(List.of("transactional"))
    .categories(List.of("Welcome email"))
    .emailServiceProviders(List.of("Gmail"))
    .build();
SendingStatsResponse filtered = stats.getStats(accountId, filteredFilter);

// Get stats grouped by date
List<SendingStatGroupResponse> byDate = stats.byDate(accountId, filter);

// Get stats grouped by category
List<SendingStatGroupResponse> byCategories = stats.byCategory(accountId, filter);

// Get stats grouped by email service provider
List<SendingStatGroupResponse> byEsp = stats.byEmailServiceProvider(accountId, filter);

// Get stats grouped by domain
List<SendingStatGroupResponse> byDomains = stats.byDomain(accountId, filter);

Summary by CodeRabbit

  • New Features

    • Added a Stats API to retrieve account sending metrics (delivery, bounce, open, click, spam) with date/filter options.
    • Support grouping results by domain, category, email service provider, or date.
    • Included a Java example demonstrating how to call and display Stats API results.
  • Tests

    • Added unit tests and JSON fixtures covering all Stats endpoints.

@coderabbitai
Copy link

coderabbitai bot commented Mar 10, 2026

📝 Walkthrough

Walkthrough

Adds a new Stats feature: interface, filter DTO, implementation, response models, client wiring, example usage, and tests with JSON fixtures to fetch sending metrics overall or grouped by domain, category, ESP, or date.

Changes

Cohort / File(s) Summary
Stats API Core
src/main/java/io/mailtrap/api/stats/Stats.java, src/main/java/io/mailtrap/api/stats/StatsFilter.java, src/main/java/io/mailtrap/api/stats/StatsImpl.java
New public Stats interface, StatsFilter DTO (dates, domains, streams, categories, providers), and StatsImpl implementing endpoints: getStats, byDomain, byCategory, byEmailServiceProvider, byDate. Builds URLs/query params, validates filter, delegates GETs to HTTP client.
Response Models
src/main/java/io/mailtrap/model/response/stats/SendingStatsResponse.java, src/main/java/io/mailtrap/model/response/stats/SendingStatGroupResponse.java
Adds DTOs: SendingStatsResponse (counts & rates) with Jackson mappings and SendingStatGroupResponse (dynamic name/value mapping plus nested stats) with @JsonAnySetter.
Client Integration
src/main/java/io/mailtrap/client/api/MailtrapGeneralApi.java, src/main/java/io/mailtrap/factory/MailtrapClientFactory.java
Wires Stats into general API: adds Stats field to MailtrapGeneralApi and instantiates/passes StatsImpl in MailtrapClientFactory#createGeneralApi (constructor signature updated).
Example & Tests
examples/java/io/mailtrap/examples/general/StatsExample.java, src/test/java/io/mailtrap/api/stats/StatsImplTest.java, src/test/resources/api/stats/*
New example StatsExample demonstrating usage; comprehensive unit test StatsImplTest with mocked HTTP endpoints and JSON fixtures (getStats.json, byDomain.json, byCategory.json, byEmailServiceProvider.json, byDate.json).

Sequence Diagram

sequenceDiagram
    actor User
    participant Client as MailtrapClient
    participant General as MailtrapGeneralApi/Stats
    participant HTTP as HttpClient
    participant Remote as Remote API

    User->>Client: createMailtrapClient(config)
    User->>Client: call stats method (getStats / byDomain / ...)
    Client->>General: invoke StatsImpl.method(accountId, filter)
    General->>General: buildUrl & query params from StatsFilter
    General->>HTTP: GET /stats[...query...]
    HTTP->>Remote: send HTTP request
    Remote-->>HTTP: return JSON response
    HTTP-->>General: deserialize to SendingStatsResponse / SendingStatGroupResponse
    General-->>Client: return DTO(s)
    Client-->>User: deliver results
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • Nitpick SDK updates #39 — Modifies general API wiring and MailtrapClientFactory construction; touches the same client wiring/constructor changes as this PR.

Suggested reviewers

  • mklocek
  • vittorius

Poem

🐰 I hopped through code to find new stats,

Domains, dates, and provider chats.
I tally counts and rates with glee,
Sending insights back to thee —
A rabbit's cheer for telemetry!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 17.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Add Stats API' clearly and concisely summarizes the main change—adding Stats API support to the SDK. It directly relates to the primary objective of the pull request.
Description check ✅ Passed The PR description includes all required template sections: Motivation (clear), Changes (detailed list), How to test (with specific endpoints), and Examples (comprehensive code snippets). The description is complete and well-structured.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch stats-api

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@piobeny piobeny requested review from VladimirTaytor and removed request for VladimirTaytor March 10, 2026 13:22
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/main/java/io/mailtrap/model/response/stats/SendingStatGroupResponse.java (1)

13-18: Guard against silently overwriting extra dynamic fields.

Every non-stats property replaces name and value. If this payload ever gains another top-level field, the first group key is lost with no signal. Consider rejecting a second dynamic key or storing extras explicitly instead of overwriting them.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/main/java/io/mailtrap/model/response/stats/SendingStatGroupResponse.java`
around lines 13 - 18, The current JsonAnySetter in SendingStatGroupResponse
(setDynamicField) blindly overwrites name/value for every non-"stats" key,
losing the first key; change setDynamicField to preserve the first encountered
dynamic key by: add a new Map<String,Object> extras field on
SendingStatGroupResponse, set name and value only if name is null (or blank) on
first non-"stats" key, and for any subsequent non-"stats" keys put them into
extras instead of overwriting; alternatively (if you prefer strictness) throw an
IllegalArgumentException when a second dynamic key is encountered—implement one
of these behaviors and update setDynamicField to check existing name before
mutating it and to populate extras (or throw) accordingly.
src/test/java/io/mailtrap/api/stats/StatsImplTest.java (1)

30-40: Add coverage for the list-filter query params.

These fixtures only assert start_date/end_date, but src/main/java/io/mailtrap/api/stats/StatsImpl.java:72-80 also serializes sending_domain_ids[], sending_streams[], categories[], and email_service_providers[]. If one of those keys is misspelled or emitted incorrectly, this suite still stays green.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/test/java/io/mailtrap/api/stats/StatsImplTest.java` around lines 30 - 40,
The tests only assert start_date/end_date; update the test to include the
list-filter query params that StatsImpl.serializeFilters emits
(sending_domain_ids[], sending_streams[], categories[],
email_service_providers[]) so the suite will catch misspellings: add those keys
with representative values to the defaultQueryParams Map used by TestHttpClient
(the variable currently named defaultQueryParams) and ensure each DataMock.build
entry in the TestHttpClient expectations includes those same keys (matching the
bracketed parameter names) so requests created by StatsImpl (methods in
StatsImpl that serialize filters around lines 72-80) must include the list
params to satisfy the mocks.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/main/java/io/mailtrap/api/stats/StatsImpl.java`:
- Around line 72-80: Validate the incoming StatsFilter and its start/end dates
at the start of buildStatsQueryParams: check that filter is not null and that
filter.getStartDate() and filter.getEndDate() are non-null (or non-empty, per
domain rules) and throw a clear IllegalArgumentException if any are missing;
only after these checks keep the existing RequestData.buildQueryParams(...) with
Optional.ofNullable(...) calls. Reference: method buildStatsQueryParams and
class StatsFilter — add
Objects.requireNonNull/filter.getStartDate()/filter.getEndDate() checks or
explicit if-statements that throw with a descriptive message so callers fail
fast instead of producing an NPE or invalid request.

---

Nitpick comments:
In
`@src/main/java/io/mailtrap/model/response/stats/SendingStatGroupResponse.java`:
- Around line 13-18: The current JsonAnySetter in SendingStatGroupResponse
(setDynamicField) blindly overwrites name/value for every non-"stats" key,
losing the first key; change setDynamicField to preserve the first encountered
dynamic key by: add a new Map<String,Object> extras field on
SendingStatGroupResponse, set name and value only if name is null (or blank) on
first non-"stats" key, and for any subsequent non-"stats" keys put them into
extras instead of overwriting; alternatively (if you prefer strictness) throw an
IllegalArgumentException when a second dynamic key is encountered—implement one
of these behaviors and update setDynamicField to check existing name before
mutating it and to populate extras (or throw) accordingly.

In `@src/test/java/io/mailtrap/api/stats/StatsImplTest.java`:
- Around line 30-40: The tests only assert start_date/end_date; update the test
to include the list-filter query params that StatsImpl.serializeFilters emits
(sending_domain_ids[], sending_streams[], categories[],
email_service_providers[]) so the suite will catch misspellings: add those keys
with representative values to the defaultQueryParams Map used by TestHttpClient
(the variable currently named defaultQueryParams) and ensure each DataMock.build
entry in the TestHttpClient expectations includes those same keys (matching the
bracketed parameter names) so requests created by StatsImpl (methods in
StatsImpl that serialize filters around lines 72-80) must include the list
params to satisfy the mocks.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5a7ec49e-7893-457d-8a99-5d5d6a14e086

📥 Commits

Reviewing files that changed from the base of the PR and between 1136e25 and 145b5fe.

📒 Files selected for processing (14)
  • examples/java/io/mailtrap/examples/general/StatsExample.java
  • src/main/java/io/mailtrap/api/stats/Stats.java
  • src/main/java/io/mailtrap/api/stats/StatsFilter.java
  • src/main/java/io/mailtrap/api/stats/StatsImpl.java
  • src/main/java/io/mailtrap/client/api/MailtrapGeneralApi.java
  • src/main/java/io/mailtrap/factory/MailtrapClientFactory.java
  • src/main/java/io/mailtrap/model/response/stats/SendingStatGroupResponse.java
  • src/main/java/io/mailtrap/model/response/stats/SendingStatsResponse.java
  • src/test/java/io/mailtrap/api/stats/StatsImplTest.java
  • src/test/resources/api/stats/byCategory.json
  • src/test/resources/api/stats/byDate.json
  • src/test/resources/api/stats/byDomain.json
  • src/test/resources/api/stats/byEmailServiceProvider.json
  • src/test/resources/api/stats/getStats.json

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
src/main/java/io/mailtrap/api/stats/StatsImpl.java (1)

76-80: ⚠️ Potential issue | 🟡 Minor

Reject blank date values too.

Whitespace-only startDate / endDate still pass these checks and get sent as invalid query params. Trim or blank-check them here so callers fail fast.

Suggested fix
-        if (filter.getStartDate() == null || filter.getStartDate().isEmpty()) {
+        if (filter.getStartDate() == null || filter.getStartDate().trim().isEmpty()) {
             throw new IllegalArgumentException("startDate must not be null or empty");
         }
-        if (filter.getEndDate() == null || filter.getEndDate().isEmpty()) {
+        if (filter.getEndDate() == null || filter.getEndDate().trim().isEmpty()) {
             throw new IllegalArgumentException("endDate must not be null or empty");
         }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/main/java/io/mailtrap/api/stats/StatsImpl.java` around lines 76 - 80, The
current validation in StatsImpl (checks on filter.getStartDate() and
filter.getEndDate()) allows whitespace-only strings; update the validation to
reject blank values by trimming before emptiness check (e.g., if
(filter.getStartDate() == null || filter.getStartDate().trim().isEmpty()) and
similarly for getEndDate()) so callers fail fast and no whitespace-only dates
are sent as query params; keep throwing IllegalArgumentException with the same
messages.
🧹 Nitpick comments (1)
examples/java/io/mailtrap/examples/general/StatsExample.java (1)

19-22: Use placeholder dates in the sample.

A fixed January 2026 window will go stale and can easily return empty results for readers. Placeholder values or named constants keep the example evergreen.

Suggested tweak
-        final var filter = StatsFilter.builder()
-                .startDate("2026-01-01")
-                .endDate("2026-01-31")
+        final var filter = StatsFilter.builder()
+                .startDate("<START_DATE: YYYY-MM-DD>")
+                .endDate("<END_DATE: YYYY-MM-DD>")
                 .build();
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@examples/java/io/mailtrap/examples/general/StatsExample.java` around lines 19
- 22, The sample uses fixed dates in StatsFilter.builder() which will become
stale; replace the hard-coded "2026-01-01"/"2026-01-31" values in the
StatsExample's filter variable with placeholder constants or descriptive
variables (e.g., START_DATE/END_DATE or "YYYY-MM-DD" strings) and/or add a short
comment explaining they should be set by the user; update the
StatsFilter.builder().startDate(...) and .endDate(...) calls to use those
placeholders so the example remains evergreen.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@src/main/java/io/mailtrap/api/stats/StatsImpl.java`:
- Around line 76-80: The current validation in StatsImpl (checks on
filter.getStartDate() and filter.getEndDate()) allows whitespace-only strings;
update the validation to reject blank values by trimming before emptiness check
(e.g., if (filter.getStartDate() == null ||
filter.getStartDate().trim().isEmpty()) and similarly for getEndDate()) so
callers fail fast and no whitespace-only dates are sent as query params; keep
throwing IllegalArgumentException with the same messages.

---

Nitpick comments:
In `@examples/java/io/mailtrap/examples/general/StatsExample.java`:
- Around line 19-22: The sample uses fixed dates in StatsFilter.builder() which
will become stale; replace the hard-coded "2026-01-01"/"2026-01-31" values in
the StatsExample's filter variable with placeholder constants or descriptive
variables (e.g., START_DATE/END_DATE or "YYYY-MM-DD" strings) and/or add a short
comment explaining they should be set by the user; update the
StatsFilter.builder().startDate(...) and .endDate(...) calls to use those
placeholders so the example remains evergreen.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 57307b4d-7843-4f9f-9cb8-b5f5cef595ec

📥 Commits

Reviewing files that changed from the base of the PR and between 145b5fe and 4c6ab63.

📒 Files selected for processing (14)
  • examples/java/io/mailtrap/examples/general/StatsExample.java
  • src/main/java/io/mailtrap/api/stats/Stats.java
  • src/main/java/io/mailtrap/api/stats/StatsFilter.java
  • src/main/java/io/mailtrap/api/stats/StatsImpl.java
  • src/main/java/io/mailtrap/client/api/MailtrapGeneralApi.java
  • src/main/java/io/mailtrap/factory/MailtrapClientFactory.java
  • src/main/java/io/mailtrap/model/response/stats/SendingStatGroupResponse.java
  • src/main/java/io/mailtrap/model/response/stats/SendingStatsResponse.java
  • src/test/java/io/mailtrap/api/stats/StatsImplTest.java
  • src/test/resources/api/stats/byCategory.json
  • src/test/resources/api/stats/byDate.json
  • src/test/resources/api/stats/byDomain.json
  • src/test/resources/api/stats/byEmailServiceProvider.json
  • src/test/resources/api/stats/getStats.json
🚧 Files skipped from review as they are similar to previous changes (10)
  • src/main/java/io/mailtrap/client/api/MailtrapGeneralApi.java
  • src/test/java/io/mailtrap/api/stats/StatsImplTest.java
  • src/main/java/io/mailtrap/api/stats/StatsFilter.java
  • src/test/resources/api/stats/getStats.json
  • src/main/java/io/mailtrap/model/response/stats/SendingStatsResponse.java
  • src/test/resources/api/stats/byDomain.json
  • src/test/resources/api/stats/byEmailServiceProvider.json
  • src/main/java/io/mailtrap/api/stats/Stats.java
  • src/test/resources/api/stats/byDate.json
  • src/test/resources/api/stats/byCategory.json

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/main/java/io/mailtrap/client/api/MailtrapGeneralApi.java (1)

17-23: ⚠️ Potential issue | 🟠 Major

Preserve the existing MailtrapGeneralApi constructor signature.

Adding a new final field under @RequiredArgsConstructor changes the public constructor from four args to five. That is a breaking SDK change for anyone instantiating MailtrapGeneralApi directly, even though this PR only adds a feature. Please keep the old overload around until the next major release, or switch this type away from Lombok-generated constructors so the public surface stays stable.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/main/java/io/mailtrap/client/api/MailtrapGeneralApi.java` around lines 17
- 23, The change added a new final field (stats) under `@RequiredArgsConstructor`
which changes MailtrapGeneralApi's public constructor signature and breaks
compatibility; fix by removing the Lombok-generated constructor and adding
explicit constructors: implement the original four-argument constructor
MailtrapGeneralApi(AccountAccesses accountAccesses, Accounts accounts, Billing
billing, Permissions permissions) that assigns those fields and sets stats to
null (preserving the old API), and add an additional five-argument constructor
MailtrapGeneralApi(AccountAccesses, Accounts, Billing, Permissions, Stats) that
assigns all fields; ensure the class-level `@RequiredArgsConstructor` is removed
so the explicit constructors are the only public ones.
🧹 Nitpick comments (1)
src/test/java/io/mailtrap/api/stats/StatsImplTest.java (1)

31-41: Add coverage for list-filter query serialization.

These mocks only verify start_date and end_date. The new behavior in this PR is the optional list filters with [] query keys, but none of the tests exercise sending_domain_ids[], sending_streams[], categories[], or email_service_providers[]. Please add at least one positive-path case that asserts those parameters are serialized correctly, since that is the easiest part of this feature to break.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/test/java/io/mailtrap/api/stats/StatsImplTest.java` around lines 31 - 41,
The current TestHttpClient mocks only assert start_date/end_date; add a
positive-path mock that verifies the new list-filter query serialization (keys
with []), e.g. create an expectedQueryParams map including
"sending_domain_ids[]", "sending_streams[]", "categories[]", and
"email_service_providers[]" mapped to their expected list values alongside
start_date/end_date, and add a DataMock.build entry that uses that map (similar
to existing builds) so the StatsImplTest (TestHttpClient/DataMock.build) asserts
those array-style query keys are sent correctly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@src/main/java/io/mailtrap/client/api/MailtrapGeneralApi.java`:
- Around line 17-23: The change added a new final field (stats) under
`@RequiredArgsConstructor` which changes MailtrapGeneralApi's public constructor
signature and breaks compatibility; fix by removing the Lombok-generated
constructor and adding explicit constructors: implement the original
four-argument constructor MailtrapGeneralApi(AccountAccesses accountAccesses,
Accounts accounts, Billing billing, Permissions permissions) that assigns those
fields and sets stats to null (preserving the old API), and add an additional
five-argument constructor MailtrapGeneralApi(AccountAccesses, Accounts, Billing,
Permissions, Stats) that assigns all fields; ensure the class-level
`@RequiredArgsConstructor` is removed so the explicit constructors are the only
public ones.

---

Nitpick comments:
In `@src/test/java/io/mailtrap/api/stats/StatsImplTest.java`:
- Around line 31-41: The current TestHttpClient mocks only assert
start_date/end_date; add a positive-path mock that verifies the new list-filter
query serialization (keys with []), e.g. create an expectedQueryParams map
including "sending_domain_ids[]", "sending_streams[]", "categories[]", and
"email_service_providers[]" mapped to their expected list values alongside
start_date/end_date, and add a DataMock.build entry that uses that map (similar
to existing builds) so the StatsImplTest (TestHttpClient/DataMock.build) asserts
those array-style query keys are sent correctly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: abcddd79-cf5b-4bef-9f3e-edbb40ab278c

📥 Commits

Reviewing files that changed from the base of the PR and between 4c6ab63 and 929f573.

📒 Files selected for processing (14)
  • examples/java/io/mailtrap/examples/general/StatsExample.java
  • src/main/java/io/mailtrap/api/stats/Stats.java
  • src/main/java/io/mailtrap/api/stats/StatsFilter.java
  • src/main/java/io/mailtrap/api/stats/StatsImpl.java
  • src/main/java/io/mailtrap/client/api/MailtrapGeneralApi.java
  • src/main/java/io/mailtrap/factory/MailtrapClientFactory.java
  • src/main/java/io/mailtrap/model/response/stats/SendingStatGroupResponse.java
  • src/main/java/io/mailtrap/model/response/stats/SendingStatsResponse.java
  • src/test/java/io/mailtrap/api/stats/StatsImplTest.java
  • src/test/resources/api/stats/byCategory.json
  • src/test/resources/api/stats/byDate.json
  • src/test/resources/api/stats/byDomain.json
  • src/test/resources/api/stats/byEmailServiceProvider.json
  • src/test/resources/api/stats/getStats.json
🚧 Files skipped from review as they are similar to previous changes (9)
  • src/test/resources/api/stats/byDomain.json
  • src/main/java/io/mailtrap/model/response/stats/SendingStatGroupResponse.java
  • src/main/java/io/mailtrap/api/stats/StatsFilter.java
  • src/main/java/io/mailtrap/api/stats/StatsImpl.java
  • src/main/java/io/mailtrap/model/response/stats/SendingStatsResponse.java
  • src/main/java/io/mailtrap/api/stats/Stats.java
  • src/test/resources/api/stats/byDate.json
  • src/test/resources/api/stats/byCategory.json
  • src/test/resources/api/stats/byEmailServiceProvider.json

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant