1 /* 2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.adservices.data.adselection; 18 19 import static androidx.room.ForeignKey.CASCADE; 20 21 import android.annotation.NonNull; 22 import android.annotation.Nullable; 23 import android.net.Uri; 24 25 import androidx.room.ColumnInfo; 26 import androidx.room.Embedded; 27 import androidx.room.Entity; 28 import androidx.room.ForeignKey; 29 import androidx.room.Index; 30 import androidx.room.TypeConverters; 31 32 import com.android.adservices.data.common.FledgeRoomConverters; 33 34 import com.google.auto.value.AutoValue; 35 36 @AutoValue 37 @AutoValue.CopyAnnotations 38 @Entity( 39 tableName = "reporting_computation_info", 40 primaryKeys = {"ad_selection_id"}, 41 indices = {@Index(value = {"ad_selection_id"})}, 42 foreignKeys = 43 @ForeignKey( 44 entity = DBAdSelectionInitialization.class, 45 parentColumns = "ad_selection_id", 46 childColumns = "ad_selection_id", 47 onDelete = CASCADE)) 48 @TypeConverters({FledgeRoomConverters.class}) 49 public abstract class DBReportingComputationInfo { 50 /** The id associated with this auction. */ 51 @AutoValue.CopyAnnotations 52 @ColumnInfo(name = "ad_selection_id") getAdSelectionId()53 public abstract long getAdSelectionId(); 54 55 /** Uri to fetch the bidding logic from */ 56 @AutoValue.CopyAnnotations 57 @ColumnInfo(name = "bidding_logic_uri") 58 @NonNull getBiddingLogicUri()59 public abstract Uri getBiddingLogicUri(); 60 61 /** Buyers javascript, which contains {@code reportWin} */ 62 @AutoValue.CopyAnnotations 63 @ColumnInfo(name = "buyer_decision_logic_js") 64 @NonNull getBuyerDecisionLogicJs()65 public abstract String getBuyerDecisionLogicJs(); 66 67 /** Contextual signals used in {@code reportResult} */ 68 @AutoValue.CopyAnnotations 69 @ColumnInfo(name = "seller_contextual_signals") 70 @Nullable getSellerContextualSignals()71 public abstract String getSellerContextualSignals(); 72 73 /** Contextual signals used in {@code reportWin} */ 74 @AutoValue.CopyAnnotations 75 @ColumnInfo(name = "buyer_contextual_signals") 76 @Nullable getBuyerContextualSignals()77 public abstract String getBuyerContextualSignals(); 78 79 /** The Custom Audience signals of the ad which won the ad selection run. */ 80 @AutoValue.CopyAnnotations 81 @Embedded(prefix = "custom_audience_signals_") 82 @Nullable getCustomAudienceSignals()83 public abstract CustomAudienceSignals getCustomAudienceSignals(); 84 85 /** The winning ad bid for this ad selection run. */ 86 @AutoValue.CopyAnnotations 87 @ColumnInfo(name = "winning_ad_bid") getWinningAdBid()88 public abstract double getWinningAdBid(); 89 90 /** The winning ad render uri for this ad selection run. */ 91 @AutoValue.CopyAnnotations 92 @ColumnInfo(name = "winning_ad_render_uri") 93 @Nullable getWinningAdRenderUri()94 public abstract Uri getWinningAdRenderUri(); 95 96 /** Returns an AutoValue builder for a {@link DBReportingComputationInfo} entity. */ 97 @NonNull builder()98 public static DBReportingComputationInfo.Builder builder() { 99 return new AutoValue_DBReportingComputationInfo.Builder(); 100 } 101 102 /** 103 * Creates a {@link DBReportingComputationInfo} object using the builder. 104 * 105 * <p>Required for Room SQLite integration. 106 */ 107 @NonNull create( long adSelectionId, @NonNull Uri biddingLogicUri, @NonNull String buyerDecisionLogicJs, @Nullable String sellerContextualSignals, @Nullable String buyerContextualSignals, @Nullable CustomAudienceSignals customAudienceSignals, double winningAdBid, @NonNull Uri winningAdRenderUri)108 public static DBReportingComputationInfo create( 109 long adSelectionId, 110 @NonNull Uri biddingLogicUri, 111 @NonNull String buyerDecisionLogicJs, 112 @Nullable String sellerContextualSignals, 113 @Nullable String buyerContextualSignals, 114 @Nullable CustomAudienceSignals customAudienceSignals, 115 double winningAdBid, 116 @NonNull Uri winningAdRenderUri) { 117 118 return builder() 119 .setAdSelectionId(adSelectionId) 120 .setBiddingLogicUri(biddingLogicUri) 121 .setBuyerDecisionLogicJs(buyerDecisionLogicJs) 122 .setSellerContextualSignals(sellerContextualSignals) 123 .setBuyerContextualSignals(buyerContextualSignals) 124 .setCustomAudienceSignals(customAudienceSignals) 125 .setWinningAdBid(winningAdBid) 126 .setWinningAdRenderUri(winningAdRenderUri) 127 .build(); 128 } 129 130 /** Builder class for a {@link DBReportingComputationInfo}. */ 131 @AutoValue.Builder 132 public abstract static class Builder { 133 /** Sets the adSelectionId */ setAdSelectionId(long value)134 public abstract Builder setAdSelectionId(long value); 135 136 /** Sets the biddingLogicUri */ setBiddingLogicUri(@onNull Uri biddingLogicUri)137 public abstract Builder setBiddingLogicUri(@NonNull Uri biddingLogicUri); 138 139 /** Sets the buyerDecisionLogicJs */ setBuyerDecisionLogicJs(@onNull String buyerDecisionLogicJs)140 public abstract Builder setBuyerDecisionLogicJs(@NonNull String buyerDecisionLogicJs); 141 142 /** Sets the sellerContextualSignals */ setSellerContextualSignals( @ullable String sellerContextualSignals)143 public abstract Builder setSellerContextualSignals( 144 @Nullable String sellerContextualSignals); 145 146 /** Sets the buyerContextualSignals */ setBuyerContextualSignals(@ullable String buyerContextualSignals)147 public abstract Builder setBuyerContextualSignals(@Nullable String buyerContextualSignals); 148 149 /** Sets the custom audience signals */ setCustomAudienceSignals( @ullable CustomAudienceSignals customAudienceSignals)150 public abstract Builder setCustomAudienceSignals( 151 @Nullable CustomAudienceSignals customAudienceSignals); 152 153 /** Sets the winning ad's bid */ setWinningAdBid(double winningAdBid)154 public abstract Builder setWinningAdBid(double winningAdBid); 155 156 /** Sets the winning ad's render uri */ setWinningAdRenderUri(@onNull Uri winningAdRenderUri)157 public abstract Builder setWinningAdRenderUri(@NonNull Uri winningAdRenderUri); 158 159 /** Builds a {@link DBAdSelectionResult} object. */ build()160 public abstract DBReportingComputationInfo build(); 161 } 162 } 163