Files
zeekayandHanzo Dev 5ac678fd84 no hogs: the person services, the mock's customer, and one enum member
PersonHog was the last of it, and it was not only a name. The package is
personinsights and the types in it are already Person* -- the shipped
descriptor under personinsights_client/proto/generated says PersonService
and the tests say TestFakePersonClient -- but the .proto still declared
PersonHogService. A client dialling one service name and a server built
from a .proto declaring another is not a naming problem, it is a wire
that does not connect; the only reason nobody hit it is that none of
these services runs here yet. Five service declarations now say what the
generated client has said all along.

StreamHog was a second fictional company, invented so a Stripe mock had
someone to bill. This fork already has Hedgebox, in five hundred
fixtures, so the mock bills Hedgebox and there is one made-up company
again instead of two.

REVIEW_HOG was an enum member in three enums that had to agree, whose
value has been `review` since the app was renamed. Only the member said
otherwise.

Every rule is in bin/debrand and every spelling is refused there, so a
fresh upstream import lands on these names and none of them can come
back. Two are named as outstanding rather than refused, with the reason
each is still sayable: hogdesk survives inside applied migrations'
choices lists, where Django compares it in Python and never writes it --
the member is Desk = "desk" and all three tables that store it hold no
rows; sherlockhog keys a service in another repository that still calls
itself that, and renaming our half would classify its traffic as a
product that does not exist.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-13 13:57:50 -07:00

87 lines
7.3 KiB
Protocol Buffer

syntax = "proto3";
package personinsights.service.v1;
import "personinsights/types/v1/person.proto";
import "personinsights/types/v1/group.proto";
import "personinsights/types/v1/cohort.proto";
import "personinsights/types/v1/feature_flag.proto";
// PersonService is the public API exposed by the router.
// Clients call this service; the router handles backend selection and routing.
service PersonService {
// Person lookups by ID
rpc GetPerson(personinsights.types.v1.GetPersonRequest) returns (personinsights.types.v1.GetPersonResponse);
rpc GetPersons(personinsights.types.v1.GetPersonsRequest) returns (personinsights.types.v1.PersonsResponse);
rpc GetPersonByUuid(personinsights.types.v1.GetPersonByUuidRequest) returns (personinsights.types.v1.GetPersonResponse);
rpc GetPersonsByUuids(personinsights.types.v1.GetPersonsByUuidsRequest) returns (personinsights.types.v1.PersonsResponse);
// Person lookups by distinct ID
rpc GetPersonByDistinctId(personinsights.types.v1.GetPersonByDistinctIdRequest) returns (personinsights.types.v1.GetPersonResponse);
rpc GetPersonsByDistinctIdsInTeam(personinsights.types.v1.GetPersonsByDistinctIdsInTeamRequest) returns (personinsights.types.v1.PersonsByDistinctIdsInTeamResponse);
rpc GetPersonsByDistinctIds(personinsights.types.v1.GetPersonsByDistinctIdsRequest) returns (personinsights.types.v1.PersonsByDistinctIdsResponse);
// Distinct ID operations
rpc GetDistinctIdsForPerson(personinsights.types.v1.GetDistinctIdsForPersonRequest) returns (personinsights.types.v1.GetDistinctIdsForPersonResponse);
rpc GetDistinctIdsForPersons(personinsights.types.v1.GetDistinctIdsForPersonsRequest) returns (personinsights.types.v1.GetDistinctIdsForPersonsResponse);
// Feature flag hash key override support
rpc GetHashKeyOverrideContext(personinsights.types.v1.GetHashKeyOverrideContextRequest) returns (personinsights.types.v1.GetHashKeyOverrideContextResponse);
rpc UpsertHashKeyOverrides(personinsights.types.v1.UpsertHashKeyOverridesRequest) returns (personinsights.types.v1.UpsertHashKeyOverridesResponse);
rpc DeleteHashKeyOverridesByTeams(personinsights.types.v1.DeleteHashKeyOverridesByTeamsRequest) returns (personinsights.types.v1.DeleteHashKeyOverridesByTeamsResponse);
// Cohort membership
rpc CheckCohortMembership(personinsights.types.v1.CheckCohortMembershipRequest) returns (personinsights.types.v1.CohortMembershipResponse);
rpc CountCohortMembers(personinsights.types.v1.CountCohortMembersRequest) returns (personinsights.types.v1.CountCohortMembersResponse);
rpc DeleteCohortMember(personinsights.types.v1.DeleteCohortMemberRequest) returns (personinsights.types.v1.DeleteCohortMemberResponse);
rpc DeleteCohortMembersBulk(personinsights.types.v1.DeleteCohortMembersBulkRequest) returns (personinsights.types.v1.DeleteCohortMembersBulkResponse);
rpc InsertCohortMembers(personinsights.types.v1.InsertCohortMembersRequest) returns (personinsights.types.v1.InsertCohortMembersResponse);
rpc ListCohortMemberIds(personinsights.types.v1.ListCohortMemberIdsRequest) returns (personinsights.types.v1.ListCohortMemberIdsResponse);
// Groups
rpc GetGroup(personinsights.types.v1.GetGroupRequest) returns (personinsights.types.v1.GetGroupResponse);
rpc GetGroups(personinsights.types.v1.GetGroupsRequest) returns (personinsights.types.v1.GroupsResponse);
rpc GetGroupsBatch(personinsights.types.v1.GetGroupsBatchRequest) returns (personinsights.types.v1.GetGroupsBatchResponse);
rpc ListGroups(personinsights.types.v1.ListGroupsRequest) returns (personinsights.types.v1.ListGroupsResponse);
// Group type mappings
rpc GetGroupTypeMappingsByTeamId(personinsights.types.v1.GetGroupTypeMappingsByTeamIdRequest) returns (personinsights.types.v1.GroupTypeMappingsResponse);
rpc GetGroupTypeMappingsByTeamIds(personinsights.types.v1.GetGroupTypeMappingsByTeamIdsRequest) returns (personinsights.types.v1.GroupTypeMappingsBatchResponse);
rpc GetGroupTypeMappingsByProjectId(personinsights.types.v1.GetGroupTypeMappingsByProjectIdRequest) returns (personinsights.types.v1.GroupTypeMappingsResponse);
rpc GetGroupTypeMappingsByProjectIds(personinsights.types.v1.GetGroupTypeMappingsByProjectIdsRequest) returns (personinsights.types.v1.GroupTypeMappingsBatchResponse);
rpc GetGroupTypeMappingByDashboardId(personinsights.types.v1.GetGroupTypeMappingByDashboardIdRequest) returns (personinsights.types.v1.GetGroupTypeMappingByDashboardIdResponse);
rpc CountGroupTypeMappings(personinsights.types.v1.CountGroupTypeMappingsRequest) returns (personinsights.types.v1.CountGroupTypeMappingsResponse);
// Group writes (routed to replica — non-person data)
rpc CreateGroup(personinsights.types.v1.CreateGroupRequest) returns (personinsights.types.v1.CreateGroupResponse);
rpc UpdateGroup(personinsights.types.v1.UpdateGroupRequest) returns (personinsights.types.v1.UpdateGroupResponse);
rpc DeleteGroupsBatchForTeam(personinsights.types.v1.DeleteGroupsBatchForTeamRequest) returns (personinsights.types.v1.DeleteGroupsBatchForTeamResponse);
// Group type mapping writes (routed to replica — non-person data)
rpc UpdateGroupTypeMapping(personinsights.types.v1.UpdateGroupTypeMappingRequest) returns (personinsights.types.v1.UpdateGroupTypeMappingResponse);
rpc DeleteGroupTypeMapping(personinsights.types.v1.DeleteGroupTypeMappingRequest) returns (personinsights.types.v1.DeleteGroupTypeMappingResponse);
rpc DeleteGroupTypeMappingsBatchForTeam(personinsights.types.v1.DeleteGroupTypeMappingsBatchForTeamRequest) returns (personinsights.types.v1.DeleteGroupTypeMappingsBatchForTeamResponse);
// Person property updates (routed to leader)
rpc UpdatePersonProperties(personinsights.types.v1.UpdatePersonPropertiesRequest) returns (personinsights.types.v1.UpdatePersonPropertiesResponse);
// Person deletes
// WARNING: This is a write operation on person data. It should route to the leader
// once personinsights-leader supports deletes. Currently routed through the replica
// (which uses the primary Postgres pool) as a temporary measure.
// TODO: Migrate routing to leader before personinsights-leader goes live.
rpc DeletePersons(personinsights.types.v1.DeletePersonsRequest) returns (personinsights.types.v1.DeletePersonsResponse);
// WARNING: Same routing caveat as DeletePersons above.
rpc DeletePersonsBatchForTeam(personinsights.types.v1.DeletePersonsBatchForTeamRequest) returns (personinsights.types.v1.DeletePersonsBatchForTeamResponse);
// WARNING: Same routing caveat as DeletePersons above.
rpc DeletePersonlessDistinctIdsBatchForTeam(personinsights.types.v1.DeletePersonlessDistinctIdsBatchForTeamRequest) returns (personinsights.types.v1.DeletePersonlessDistinctIdsBatchForTeamResponse);
// Person split
// WARNING: Same routing caveat as DeletePersons above — write operation on person data
// routed through replica (primary pool) until leader supports transactional writes.
rpc SplitPerson(personinsights.types.v1.SplitPersonRequest) returns (personinsights.types.v1.SplitPersonResponse);
// Undelete repair version resets. Same routing caveat as DeletePersons above.
rpc SetPersonDistinctIdVersionFloor(personinsights.types.v1.SetPersonDistinctIdVersionFloorRequest) returns (personinsights.types.v1.SetPersonDistinctIdVersionFloorResponse);
rpc SetPersonVersionFloor(personinsights.types.v1.SetPersonVersionFloorRequest) returns (personinsights.types.v1.SetPersonVersionFloorResponse);
}