Skip to content

Contacts MVP #3844

Open
0 of 8 issues completed
Open

Description

@tammi-23

Initial Checklist

  • I understand this is a user story and questions should be posted in the Community Discussions
  • I searched issues and couldn’t find anything (or linked relevant results below)

Related: #2004

User Story

As a user of the OpenCloud contacts app, I want to view, create, edit, delete and find my contacts with all their common fields, and pick them as recipients when writing an email, so that I can use OpenCloud as my everyday address book instead of a separate client.

User Value

Today the contacts app can list and create contacts with four fields only. Contacts cannot be edited or deleted, and data synced via CardDAV or imported elsewhere (multiple emails/phones, addresses, organization, labels) is partly invisible. This makes the app a viewer rather than a tool.

The groupware API already provides create, update, delete, filtering and address books, so this MVP is almost entirely web work and closes the gap to a usable address book with little backend effort. Recipient suggestions in the mail app add the biggest everyday value and connect both apps.

Acceptance Criteria

Sub-issues (MVP): (PRs: #3853 → #3854 → #3855 → #3856 → #3857 → #3858 → #3860 stacked in this order, #3859 independent)

Backend dependencies (groupware service, groupware branch at 2e0034cc0a):

  • JmapContactCardSupplier implements neither Update nor Delete, so PATCH and DELETE /accounts/{accountId}/contacts/{contactId} fail with DELCNT ("no supplier supports that id"). Blocks deleting and editing.
  • All address book calls in pkg/jmap/api_addressbook.go pass MailboxType instead of AddressBookType, so AddressBook/get is sent without the urn:ietf:params:jmap:contacts capability and GET /accounts/{accountId}/addressbooks returns 500. Blocks the whole app.
  • Listing an empty address book panics in squery (items[len(items)-1], index out of range [-1]).
  • Contacts with an anniversary date (PartialDate, e.g. a birthday) can't be decoded ('Anniversaries[…].Date' expected type 'jscontact.AnniversaryDate'), so the whole contact list returns 500.
  • ContactCardChange is serialized with omitempty, so PATCH can't clear a property completely (e.g. removing the only nickname or all email addresses keeps the old value).
  • As soon as another account shares an address book (or anything else) with a user, GET /groupware/accounts returns 403 for that user: identities are requested for all session accounts, and the mail server forbids Identity/get for the shared account ("You are not an owner of account …"). All groupware apps stop loading. Blocks testing read-only address books.
  • Paging with next fails: SingleSupplierQueryParamsSupplier.ForSupplier always returns "unable to provide for supplier with single supplier token", but the JMAP contact supplier has an id and ends up there. Blocks address books with more than one page.
  • The contacts list keeps returning a next token after the last page; empty pages omit results ({"limit":…,"total":…}) and later pages are null.
  • The contact filters (name, email, …) only match whole words, so they can't be used for search while typing or recipient suggestions (the web app filters locally for now).
  • The address contact filter doesn't seem to be registered (uid appears twice in supportedContactsFilterQueryParams). Needed for searching by address.

Out of scope for the MVP (follow-ups):

  • Global address book / internal users (needs a principals/directory endpoint in the backend)
  • Distribution lists
  • Create, rename and delete address books
  • vCard import/export
  • Photo upload
  • Quick actions (send mail, call, save sender from mail)
  • Multi-select, move/copy between address books
  • Sharing address books (needs sharing endpoints in the backend)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions