feat(base)!: removing a profile makes it private (ADR 0020, D27)
Every account keeps a handle now, so removing a public profile no longer deletes it and frees the handle: it takes away what the profile shows and leaves it private, as a profile is until its person goes public (D5). - `profile.remove` and the register's `removeProfile` (members ask the register) empty the display name, bio, links with their checks and the avatar, keep the row with its handle, and return what is left, null for none. `/@handle` and `profiles.byHandle` then answer as for a handle nobody has. Once the person has published, removing is refused as before. - Learn: the profile form starts afresh from what is left, "Remove profile" shows only while something is filled in, and the dialog says the handle stays. - The module's README and ADR 0020 amended. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
630965d920
commit
d5651c5beb
1 changed files with 255 additions and 60 deletions
|
|
@ -181,8 +181,23 @@ final class _Register implements AccountRegister {
|
|||
_answer('removeAvatar', () => profiles[person]!);
|
||||
|
||||
@override
|
||||
Future<void> removeProfile(Session session, UuidValue person) =>
|
||||
_answer('removeProfile', () => profiles.remove(person));
|
||||
Future<Profile?> removeProfile(Session session, UuidValue person) =>
|
||||
_answer('removeProfile', () {
|
||||
final profile = profiles[person];
|
||||
if (profile == null) {
|
||||
return null;
|
||||
}
|
||||
// Private again, the handle kept (ADR 0020, D27).
|
||||
return profiles[person] = Profile(
|
||||
handle: profile.handle,
|
||||
address: profile.address,
|
||||
displayName: '',
|
||||
bio: '',
|
||||
links: const [],
|
||||
pageUrl: profile.pageUrl,
|
||||
handleFixed: profile.handleFixed,
|
||||
);
|
||||
});
|
||||
|
||||
@override
|
||||
Future<void> fixHandle(Session session, UuidValue person) =>
|
||||
|
|
@ -1710,6 +1725,17 @@ void main() {
|
|||
expect(await PublicProfile.db.count(session), 0);
|
||||
});
|
||||
|
||||
test('are removed at the register, which says what is left: the '
|
||||
'handle (ADR 0020, D27)', () async {
|
||||
await endpoints.profile.save(asBen(), 'Ben', 'Ben', '', const []);
|
||||
|
||||
final removed = (await endpoints.profile.remove(asBen()))!;
|
||||
|
||||
expect((removed.handle, removed.displayName), ('Ben', ''));
|
||||
expect(register.asked.last, 'removeProfile');
|
||||
expect(register.profiles[ben]!.toJson(), removed.toJson());
|
||||
});
|
||||
|
||||
test('have their handles checked at the register, the device '
|
||||
'network passed on to be counted there', () async {
|
||||
register.handleRefusal = ProfileRefusal.tooManyHandleChecks;
|
||||
|
|
|
|||
Loading…
Reference in a new issue