killbill-memoizeit

jaxrs: Add ability to retrieve all tags for an account (and option

9/9/2015 4:21:51 PM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index 29364d0..374fb62 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -100,6 +100,7 @@ import org.killbill.billing.util.callcontext.TenantContext;
 import org.killbill.billing.util.config.PaymentConfig;
 import org.killbill.billing.util.entity.Pagination;
 import org.killbill.billing.util.tag.ControlTagType;
+import org.killbill.billing.util.tag.Tag;
 import org.killbill.clock.Clock;
 
 import com.codahale.metrics.annotation.Timed;
@@ -892,6 +893,27 @@ public class AccountResource extends JaxRsResourceBase {
     }
 
     @Timed
+    @GET
+    @Path("/{accountId:" + UUID_PATTERN + "}/" + ALL_TAGS)
+    @Produces(APPLICATION_JSON)
+    @ApiOperation(value = "Retrieve account tags", response = TagJson.class, responseContainer = "List")
+    @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid account id supplied"),
+                           @ApiResponse(code = 404, message = "Account not found")})
+    public Response getAllTags(@PathParam(ID_PARAM_NAME) final String accountIdString,
+                               @QueryParam(QUERY_OBJECT_TYPE) final ObjectType objectType,
+                               @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+                               @QueryParam(QUERY_TAGS_INCLUDED_DELETED) @DefaultValue("false") final Boolean includedDeleted,
+                               @javax.ws.rs.core.Context final HttpServletRequest request) throws TagDefinitionApiException {
+        final UUID accountId = UUID.fromString(accountIdString);
+        final TenantContext tenantContext = context.createContext(request);
+        final List<Tag> tags = objectType != null ?
+                               tagUserApi.getTagsForAccountType(accountId, objectType, includedDeleted, tenantContext) :
+                               tagUserApi.getTagsForAccount(accountId, includedDeleted, tenantContext);
+        return createTagResponse(accountId, tags, auditMode, tenantContext);
+    }
+
+
+    @Timed
     @POST
     @Path("/{accountId:" + UUID_PATTERN + "}/" + TAGS)
     @Produces(APPLICATION_JSON)
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
index d29d527..076fd55 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
@@ -88,10 +88,13 @@ public interface JaxrsResource {
     public static final String QUERY_PAYMENT_METHOD_ID = "paymentMethodId";
     public static final String QUERY_PAYMENT_CONTROL_PLUGIN_NAME = "controlPluginName";
 
+
     public static final String QUERY_TAGS = "tagList";
     public static final String QUERY_TAGS_INCLUDED_DELETED = "includedDeleted";
     public static final String QUERY_CUSTOM_FIELDS = "customFieldList";
 
+    public static final String QUERY_OBJECT_TYPE = "objectType";
+
     public static final String QUERY_PAYMENT_METHOD_PLUGIN_NAME = "pluginName";
     public static final String QUERY_WITH_PLUGIN_INFO = "withPluginInfo";
     public static final String QUERY_PAYMENT_METHOD_IS_DEFAULT = "isDefault";
@@ -172,6 +175,7 @@ public interface JaxrsResource {
     public static final String CHARGEBACKS = "chargebacks";
     public static final String CHARGEBACKS_PATH = PREFIX + "/" + CHARGEBACKS;
 
+    public static final String ALL_TAGS = "allTags";
     public static final String TAGS = "tags";
     public static final String TAGS_PATH = PREFIX + "/" + TAGS;
 
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
index 2921882..b46b836 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
@@ -140,6 +140,10 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
 
     protected Response getTags(final UUID accountId, final UUID taggedObjectId, final AuditMode auditMode, final boolean includeDeleted, final TenantContext context) throws TagDefinitionApiException {
         final List<Tag> tags = tagUserApi.getTagsForObject(taggedObjectId, getObjectType(), includeDeleted, context);
+        return createTagResponse(accountId, tags, auditMode, context);
+    }
+
+    protected Response createTagResponse(final UUID accountId, final List<Tag> tags, final AuditMode auditMode, final TenantContext context) throws TagDefinitionApiException {
         final AccountAuditLogsForObjectType tagsAuditLogs = auditUserApi.getAccountAuditLogs(accountId, ObjectType.TAG, auditMode.getLevel(), context);
 
         final Map<UUID, TagDefinition> tagDefinitionsCache = new HashMap<UUID, TagDefinition>();
@@ -153,10 +157,10 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
             final List<AuditLog> auditLogs = tagsAuditLogs.getAuditLogs(tag.getId());
             result.add(new TagJson(tag, tagDefinition, auditLogs));
         }
-
         return Response.status(Response.Status.OK).entity(result).build();
     }
 
+
     protected Response createTags(final UUID id,
                                   final String tagList,
                                   final UriInfo uriInfo,

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index 6abdc1f..c3dd122 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <artifactId>killbill-oss-parent</artifactId>
         <groupId>org.kill-bill.billing</groupId>
-        <version>0.39</version>
+        <version>0.40</version>
     </parent>
     <artifactId>killbill</artifactId>
     <version>0.15.4-SNAPSHOT</version>
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestTag.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestTag.java
index a264129..725ddac 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestTag.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestTag.java
@@ -23,12 +23,17 @@ import java.util.UUID;
 
 import javax.annotation.Nullable;
 
+import org.joda.time.DateTime;
 import org.killbill.billing.ObjectType;
+import org.killbill.billing.catalog.api.BillingPeriod;
+import org.killbill.billing.catalog.api.ProductCategory;
 import org.killbill.billing.client.KillBillClientException;
 import org.killbill.billing.client.model.Account;
+import org.killbill.billing.client.model.Subscription;
 import org.killbill.billing.client.model.Tag;
 import org.killbill.billing.client.model.TagDefinition;
 import org.killbill.billing.client.model.Tags;
+import org.killbill.billing.util.api.AuditLevel;
 import org.killbill.billing.util.tag.ControlTagType;
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -94,6 +99,39 @@ public class TestTag extends TestJaxrsBase {
         assertEquals(objFromJson.size(), 3 + sizeSystemTag);
     }
 
+
+    @Test(groups = "slow", description = "Can search all tags for an account")
+    public void testGetAllTagsByType() throws Exception {
+
+        final DateTime initialDate = new DateTime(2012, 4, 25, 0, 3, 42, 0);
+        clock.setDeltaFromReality(initialDate.getMillis() - clock.getUTCNow().getMillis());
+
+        final Account account = createAccountWithDefaultPaymentMethod();
+
+        final Subscription subscriptionJson = createEntitlement(account.getAccountId(), "87544332", "Shotgun",
+                                                                ProductCategory.BASE, BillingPeriod.MONTHLY, true);
+
+        for (final ControlTagType controlTagType : ControlTagType.values()) {
+            killBillClient.createAccountTag(account.getAccountId(), controlTagType.getId(), createdBy, reason, comment);
+        }
+
+        final TagDefinition bundleTagDefInput = new TagDefinition(null, false, "bundleTagDef", "nothing special", ImmutableList.<ObjectType>of());
+        final TagDefinition bundleTagDef = killBillClient.createTagDefinition(bundleTagDefInput, createdBy, reason, comment);
+
+        killBillClient.createBundleTag(subscriptionJson.getBundleId(), bundleTagDef.getId(), createdBy, reason, comment);
+
+        final Tags allBundleTags = killBillClient.getBundleTags(subscriptionJson.getBundleId(), AuditLevel.FULL);
+        Assert.assertEquals(allBundleTags.size(), 1);
+
+        final Tags allAccountTags = killBillClient.getAllAccountTags(account.getAccountId(), null, AuditLevel.FULL);
+        Assert.assertEquals(allAccountTags.size(), ControlTagType.values().length + 1);
+
+
+        final Tags allBundleTagsForAccount = killBillClient.getAllAccountTags(account.getAccountId(), ObjectType.BUNDLE.name(), AuditLevel.FULL);
+        Assert.assertEquals(allBundleTagsForAccount.size(), 1);
+    }
+
+
     @Test(groups = "slow", description = "Can search system tags")
     public void testSystemTagsPagination() throws Exception {
         final Account account = createAccount();