Untitled
unknown
plain_text
8 months ago
5.8 kB
1
Indexable
Never
package com.flipkart.m3.selfserve.api.request.campaign; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.flipkart.m3.banner.group.CostModel; import com.flipkart.m3.banner.group.targeting.TargetingExpression; import com.flipkart.m3.campaign.CampaignType; import com.flipkart.m3.common.Channel; import com.flipkart.m3.common.SherlockStore; import com.flipkart.m3.selfserve.api.validator.CompliantCampaignName; import com.flipkart.m3.serde.CustomDateDeserializer; import com.flipkart.m3.serde.CustomDateSerializer; import com.flipkart.rome.datatypes.request.marketplace.MarketplaceId; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; import org.hibernate.validator.constraints.NotBlank; import org.hibernate.validator.constraints.NotEmpty; import javax.validation.Valid; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.ws.rs.DefaultValue; import java.util.Date; import java.util.List; import java.util.Set; @Getter @ToString @SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) public class BrandMerchCampaignAPIRequest extends CampaignAPIRequest { @JsonProperty("campaignInfo") @NotNull @Valid private final CampaignInfo campaignInfo; @JsonProperty("adGroups") @Size(min = 1, message = "At least 1 ad group is required if the key is not null") @Valid private final List<BrandMerchCampaignAPIRequest.AdGroup> adGroups; @JsonCreator public BrandMerchCampaignAPIRequest(@JsonProperty("campaignInfo") @NotNull @Valid CampaignInfo campaignInfo, @JsonProperty("adGroups") @NotEmpty @Valid List<AdGroup> adGroups) { super(CampaignType.BRAND_MERCHANDISING); this.campaignInfo = campaignInfo; this.adGroups = adGroups; } @AllArgsConstructor @Getter @NoArgsConstructor @Builder @ToString public static class CampaignInfo { @NotBlank(message = "Campaign name cannot be blank") @JsonProperty("name") @CompliantCampaignName private String campaignName; @NotEmpty(message = "Campaign type cannot be blank") @JsonProperty("type") private String campaignType; @JsonProperty("marketplace") @DefaultValue("FLIPKART") private MarketplaceId marketplaceId; } @NoArgsConstructor @Builder(toBuilder = true) @AllArgsConstructor @Getter @ToString public static class AdGroup implements AdGroupRequest { private String id; @NotBlank(message = "cannot be blank") private String name; @DefaultValue("vCPM") private CostModel costModel; @DefaultValue("GD") private String deliveryType; @JsonProperty("channels") private Set<Channel> channels; @JsonDeserialize(using = CustomDateDeserializer.class) @JsonSerialize(using = CustomDateSerializer.class) @NotNull private Date startDate; @JsonDeserialize(using = CustomDateDeserializer.class) @JsonSerialize(using = CustomDateSerializer.class) private Date endDate; @JsonProperty("targetingExpression") private BrandMerchCampaignAPIRequest.AdGroup.Targeting targeting; @NoArgsConstructor @Builder(toBuilder = true) @AllArgsConstructor @Getter @ToString @JsonIgnoreProperties(ignoreUnknown = true) public static class Targeting { @Setter @JsonProperty("contextTargetingExpression") private List<TargetingExpression> contextExpression; } @JsonProperty("pageId") public String pageId; @JsonProperty("slotId") public String slotId; @Override public String campaignType() { return CampaignType.BRAND_MERCHANDISING; } @JsonProperty("contents") @Valid @NotEmpty(message = "A Brand Merch ad group must have at least 1 content") private List<BrandMerchCampaignAPIRequest.AdGroup.Content> contents; @NoArgsConstructor @Builder(toBuilder = true) @AllArgsConstructor @Getter @ToString @JsonIgnoreProperties(ignoreUnknown = true) public static class Content { @JsonProperty("contentId") private String contentId; @JsonProperty("name") @NotBlank(message = "A Brand Merch Ads content cannot have a blank name") private String name; @JsonProperty("isUrlSystemCreated") @NotNull private Boolean isSystemURL; @JsonProperty("creativeTemplateId") @NotNull private String creativeTemplateId; @JsonProperty("landingPageUrl") @Setter private String landingPageUrl; @JsonProperty("brands") private List<String> brands; @JsonProperty("brandIds") private List<String> brandIds; @JsonProperty("stores") private List<SherlockStore> stores; @JsonProperty("themes") private List<String> themes; @JsonProperty("creatives") @NotEmpty(message = "A Brand Merch Ads content cannot be created without at least 1 creative") private List<Creative> creatives; } } }