-
Notifications
You must be signed in to change notification settings - Fork 6
Identity Map V3 #83
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Identity Map V3 #83
Conversation
src/test/java/com/uid2/client/IdentityMapV3IntegrationTests.java
Outdated
Show resolved
Hide resolved
src/test/java/com/uid2/client/IdentityMapV3IntegrationTests.java
Outdated
Show resolved
Hide resolved
|
||
Response response = new Response(identityMapInput); | ||
|
||
response.assertUnmapped("INVALID", "this is not a hashed email"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
curious, why have the errors changed to CAPS and a single word?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's the code we return from the APIs. I don't know why we've changed the codes from the previous version. Perhaps @gmsdelmundo has some context one he's back next week. I didn't realize it was not always like that.
I guess this makes it look more like an error code and less like an end-user message.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So this means error handling is no longer a drop-in replacement? Especially concerned about optout
- if we change this to caps we will break someone.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point, but a discussion on the API side, not in SDK - here we just return whatever APIs return.
We'll consider changing this in API.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jon8787 after some discussion, we've decided to keep the APIs as is and change the SDKs to return an enum. Any unknown unmaped statuses will become "UNKNOWN".
This will still be a breaking change, but it will be obviously breaking instead of silently breaking with changing strings.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Returning an enum sounds good, although will there still be a way to get the unknown status?
Not very convinced about changing lowercase "optout" to CAPS. There may be consumers using the API directly who now have to change their optout handling when migrating to v3. What's the benefit?
|
||
import java.nio.charset.StandardCharsets; | ||
|
||
public class IdentityMapV3Helper { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need a new class, or should we add these methods to IdentityMapHelper
?
return new IdentityMapV3Input().withHashedPhones(hashedPhones); | ||
} | ||
|
||
private transient final Map<String, List<String>> diiMappings = new HashMap<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add a comment about the use of transient
here?
@SerializedName("phone_hash") | ||
private final List<Identity> hashedPhones = new ArrayList<>(); | ||
|
||
public IdentityMapV3Input() {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want/need a public ctor?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
from memory, might be to help consumers of the SDK to write their own tests
} | ||
} | ||
|
||
private static IdentityMapV3Input getIdentityMapInput(IdentityMapV3Input identityMapInput) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This just returns its input and isn't used anywhere
return new IdentityMapV3Input().withHashedPhones(hashedPhones); | ||
} | ||
|
||
private transient final Map<String, List<String>> diiMappings = new HashMap<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add a comment about what the keys/values are, or maybe change the name? Maybe something like hashedDiiToRawDii
to line up with the param names of addToDiiMappings
?
} | ||
} | ||
|
||
static public class UnmappedIdentity { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here and elsewhere, can we use public static
instead of static public
?
return new IdentityMapV3Response(decryptedResponseString, identityMapInput); | ||
} | ||
|
||
Uid2Helper uid2Helper; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can be private final
diiMappings.computeIfAbsent(hashedDii, k -> new ArrayList<>()).add(rawDii); | ||
} | ||
|
||
private String getEncodedDii(String identityType, int i) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What does "encoded" refer to here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd like to have some unit tests, so we have some test coverage in the CI/CD pipeline. It also means I don't have to run an operator just to test changes.
} | ||
|
||
public HashMap<String, MappedIdentity> getMappedIdentities() { | ||
return mappedIdentities; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be good to return a copy here and in getUnmappedIdentities
, or make mappedIdentities
/unmappedIdentities
immutable after they're populated.
No description provided.