feat(backend): add unlisted members, private member list, custom members header

This commit is contained in:
Sam 2023-04-01 17:20:59 +02:00
parent ba48ba0eb2
commit ef9b186e66
Signed by: sam
GPG key ID: B4EF20DDE721CAA1
14 changed files with 135 additions and 34 deletions

View file

@ -26,6 +26,7 @@ type Member struct {
Links []string
Names []FieldEntry
Pronouns []PronounEntry
Unlisted bool
}
const (
@ -68,10 +69,15 @@ func (db *DB) UserMember(ctx context.Context, userID xid.ID, memberRef string) (
}
// UserMembers returns all of a user's members, sorted by name.
func (db *DB) UserMembers(ctx context.Context, userID xid.ID) (ms []Member, err error) {
sql, args, err := sq.Select("*").
func (db *DB) UserMembers(ctx context.Context, userID xid.ID, showHidden bool) (ms []Member, err error) {
builder := sq.Select("*").
From("members").Where("user_id = ?", userID).
OrderBy("name", "id").ToSql()
OrderBy("name", "id")
if !showHidden {
builder = builder.Where("unlisted = ?", false)
}
sql, args, err := builder.ToSql()
if err != nil {
return nil, errors.Wrap(err, "building sql")
}
@ -148,6 +154,7 @@ func (db *DB) UpdateMember(
ctx context.Context,
tx pgx.Tx, id xid.ID,
name, displayName, bio *string,
unlisted *bool,
links *[]string,
avatar *string,
) (m Member, err error) {
@ -190,6 +197,9 @@ func (db *DB) UpdateMember(
if links != nil {
builder = builder.Set("links", *links)
}
if unlisted != nil {
builder = builder.Set("unlisted", *unlisted)
}
if avatar != nil {
if *avatar == "" {

View file

@ -20,6 +20,7 @@ type User struct {
Username string
DisplayName *string
Bio *string
MemberTitle *string
Avatar *string
Links []string
@ -35,8 +36,9 @@ type User struct {
FediverseAppID *int64
FediverseInstance *string
MaxInvites int
IsAdmin bool
MaxInvites int
IsAdmin bool
ListPrivate bool
DeletedAt *time.Time
SelfDelete *bool
@ -317,10 +319,11 @@ func (db *DB) UpdateUser(
ctx context.Context,
tx pgx.Tx, id xid.ID,
displayName, bio *string,
memberTitle *string, listPrivate *bool,
links *[]string,
avatar *string,
) (u User, err error) {
if displayName == nil && bio == nil && links == nil && avatar == nil {
if displayName == nil && bio == nil && links == nil && avatar == nil && memberTitle == nil && listPrivate == nil {
sql, args, err := sq.Select("*").From("users").Where("id = ?", id).ToSql()
if err != nil {
return u, errors.Wrap(err, "building sql")
@ -349,9 +352,19 @@ func (db *DB) UpdateUser(
builder = builder.Set("bio", *bio)
}
}
if memberTitle != nil {
if *memberTitle == "" {
builder = builder.Set("member_title", nil)
} else {
builder = builder.Set("member_title", *memberTitle)
}
}
if links != nil {
builder = builder.Set("links", *links)
}
if listPrivate != nil {
builder = builder.Set("list_private", *listPrivate)
}
if avatar != nil {
if *avatar == "" {
@ -492,7 +505,7 @@ func (db *DB) CleanUser(ctx context.Context, id xid.ID) error {
}
}
members, err := db.UserMembers(ctx, u.ID)
members, err := db.UserMembers(ctx, u.ID, true)
if err != nil {
return errors.Wrap(err, "getting members")
}