Skip to content

EPIC: groups: how to collaborate with one or more people #220

@nelsonic

Description

@nelsonic

Story

As a person wanting to collaborate with others,
I want a way to create a group
that I can add people to
and then share a list of items with
So that I can keep track of who sees, can edit and work on what items.

Note: the initial "MVP" version of this feature is just a basic group that has 1 or more people.
No permissions, complex RBAC, LDAP or other "Enterprise" features, yet!
We can iterate from our simple version and add more advanced/complex features later.
For now we just need something we can start using internally and collect feedback from ourselves.

Todo

  • When a person first tries to share an item or list (of items) in the App,
    • Automatically and transparently create a new group for them with their name as the group.name
    • Inviting someone to collaborate on an item will automatically add them to the group
    • Once the initial share has occurred, we can inform the person:
      🤖 "By the way I created this group for you and you can add more people to it by visiting: /groups/:id"
  • Create endpoint to manage groups.
  • Create an interface to allow people to manually create a new group

Proposed Schema (please comment/discuss!)

group

  • name: Fields.Encrypted - the name of the group.
  • description: Fields.Encrypted - the description
  • kind: String - e.g. family, friends, personal, sports, work, etc. - we will have default kinds that can help the person to categorise their group; we could consider making this a free-text field in the future or adding more kinds via Pull Request (so they are hard-coded) because, let's be fair, there are't that many kinds of group we will need.

group_members

The lookup table that lists the people who are members of a group

  • group_id Int fk: the id of the group
  • person_id Int: the person.id of the person in the group
  • inserted_at DateTime: default Phoenix field for the insertion of a record.
  • admin Bool: if the person can administer (add/remove others from) the group
  • added_by Int: the person.id of the person who added the member to the group
  • removed DateTime: default:null the date when a person is removed from a group (it happens ...)
  • removed_by Int: default:null the person.id that removed this person from the group

Features

  • Build mini SPA for creating/managing groups using LivView:

@SimonLab thoughts? Am I missing anything? Am I over-complicating it? or is this "just enough" to get started? Thanks! 🙏

Metadata

Metadata

Assignees

Labels

T1dTime Estimate 1 DaydiscussShare your constructive thoughts on how to make progress with this issueenhancementNew feature or enhancement of existing functionalityhelp wantedIf you can help make progress with this issue, please comment!priority-1Highest priority issue. This is costing us money every minute that passes.technicalA technical issue that requires understanding of the code, infrastructure or dependencies

Type

No type

Projects

Status

📋 Backlog

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions