[feature] Implement exclusive lists (#3280)

Fixes #2616
This commit is contained in:
Vyr Cossont
2024-09-09 15:56:58 -07:00
committed by GitHub
parent 5543fd5340
commit 540edef0c2
15 changed files with 597 additions and 54 deletions

View File

@@ -30,12 +30,19 @@ import (
// Create creates one a new list for the given account, using the provided parameters.
// These params should have already been validated by the time they reach this function.
func (p *Processor) Create(ctx context.Context, account *gtsmodel.Account, title string, repliesPolicy gtsmodel.RepliesPolicy) (*apimodel.List, gtserror.WithCode) {
func (p *Processor) Create(
ctx context.Context,
account *gtsmodel.Account,
title string,
repliesPolicy gtsmodel.RepliesPolicy,
exclusive bool,
) (*apimodel.List, gtserror.WithCode) {
list := &gtsmodel.List{
ID: id.NewULID(),
Title: title,
AccountID: account.ID,
RepliesPolicy: repliesPolicy,
Exclusive: &exclusive,
}
if err := p.state.DB.PutList(ctx, list); err != nil {

View File

@@ -47,7 +47,7 @@ func (p *Processor) Get(ctx context.Context, account *gtsmodel.Account, id strin
return p.apiList(ctx, list)
}
// GetMultiple returns multiple lists created by the given account, sorted by list ID DESC (newest first).
// GetAll returns multiple lists created by the given account, sorted by list ID DESC (newest first).
func (p *Processor) GetAll(ctx context.Context, account *gtsmodel.Account) ([]*apimodel.List, gtserror.WithCode) {
lists, err := p.state.DB.GetListsForAccountID(
// Use barebones ctx; no embedded

View File

@@ -36,6 +36,7 @@ func (p *Processor) Update(
id string,
title *string,
repliesPolicy *gtsmodel.RepliesPolicy,
exclusive *bool,
) (*apimodel.List, gtserror.WithCode) {
list, errWithCode := p.getList(
// Use barebones ctx; no embedded
@@ -49,7 +50,7 @@ func (p *Processor) Update(
}
// Only update columns we're told to update.
columns := make([]string, 0, 2)
columns := make([]string, 0, 3)
if title != nil {
list.Title = *title
@@ -61,6 +62,11 @@ func (p *Processor) Update(
columns = append(columns, "replies_policy")
}
if exclusive != nil {
list.Exclusive = exclusive
columns = append(columns, "exclusive")
}
if err := p.state.DB.UpdateList(ctx, list, columns...); err != nil {
if errors.Is(err, db.ErrAlreadyExists) {
err = errors.New("you already have a list with this title")