chore: add memo visibility with user setting

This commit is contained in:
Steven 2022-08-19 00:00:47 +08:00
parent 43a8b7d0e1
commit ce390f3f79
3 changed files with 51 additions and 4 deletions

View File

@ -3,8 +3,10 @@ package api
type UserSettingKey string type UserSettingKey string
const ( const (
// UserSettingLocaleKey is the key type for user locale // UserSettingLocaleKey is the key type for user locale.
UserSettingLocaleKey UserSettingKey = "locale" UserSettingLocaleKey UserSettingKey = "locale"
// UserSettingMemoVisibilityKey is the key type for user perference memo default visibility.
UserSettingMemoVisibilityKey UserSettingKey = "memo-visibility"
) )
// String returns the string format of UserSettingKey type. // String returns the string format of UserSettingKey type.
@ -12,6 +14,8 @@ func (key UserSettingKey) String() string {
switch key { switch key {
case UserSettingLocaleKey: case UserSettingLocaleKey:
return "locale" return "locale"
case UserSettingMemoVisibilityKey:
return "memo-visibility"
} }
return "" return ""
} }
@ -31,4 +35,6 @@ type UserSettingUpsert struct {
type UserSettingFind struct { type UserSettingFind struct {
UserID int UserID int
Key *UserSettingKey `json:"key"`
} }

View File

@ -27,6 +27,18 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
return echo.NewHTTPError(http.StatusBadRequest, "Malformatted post memo request").SetInternal(err) return echo.NewHTTPError(http.StatusBadRequest, "Malformatted post memo request").SetInternal(err)
} }
userSettingMemoVisibilityKey := api.UserSettingMemoVisibilityKey
userMemoVisibilitySetting, err := s.Store.FindUserSetting(ctx, &api.UserSettingFind{
UserID: userID,
Key: &userSettingMemoVisibilityKey,
})
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find user setting").SetInternal(err)
}
if userMemoVisibilitySetting != nil {
memoCreate.Visibility = (*api.Visibility)(&userMemoVisibilitySetting.Value)
}
if memoCreate.Visibility == nil || *memoCreate.Visibility == "" { if memoCreate.Visibility == nil || *memoCreate.Visibility == "" {
private := api.Privite private := api.Privite
memoCreate.Visibility = &private memoCreate.Visibility = &private

View File

@ -3,6 +3,7 @@ package store
import ( import (
"context" "context"
"database/sql" "database/sql"
"strings"
"github.com/usememos/memos/api" "github.com/usememos/memos/api"
) )
@ -62,6 +63,27 @@ func (s *Store) FindUserSettingList(ctx context.Context, find *api.UserSettingFi
return list, nil return list, nil
} }
func (s *Store) FindUserSetting(ctx context.Context, find *api.UserSettingFind) (*api.UserSetting, error) {
tx, err := s.db.BeginTx(ctx, nil)
if err != nil {
return nil, FormatError(err)
}
defer tx.Rollback()
list, err := findUserSettingList(ctx, tx, find)
if err != nil {
return nil, err
}
if len(list) == 0 {
return nil, nil
}
userSetting := list[0].toUserSetting()
return userSetting, nil
}
func upsertUserSetting(ctx context.Context, tx *sql.Tx, upsert *api.UserSettingUpsert) (*userSettingRaw, error) { func upsertUserSetting(ctx context.Context, tx *sql.Tx, upsert *api.UserSettingUpsert) (*userSettingRaw, error) {
query := ` query := `
INSERT INTO user_setting ( INSERT INTO user_setting (
@ -86,15 +108,22 @@ func upsertUserSetting(ctx context.Context, tx *sql.Tx, upsert *api.UserSettingU
} }
func findUserSettingList(ctx context.Context, tx *sql.Tx, find *api.UserSettingFind) ([]*userSettingRaw, error) { func findUserSettingList(ctx context.Context, tx *sql.Tx, find *api.UserSettingFind) ([]*userSettingRaw, error) {
where, args := []string{"1 = 1"}, []interface{}{}
if v := find.Key; v != nil {
where, args = append(where, "key = ?"), append(args, (*v).String())
}
where, args = append(where, "user_id = ?"), append(args, find.UserID)
query := ` query := `
SELECT SELECT
user_id, user_id,
key, key,
value value
FROM user_setting FROM user_setting
WHERE user_id = ? WHERE ` + strings.Join(where, " AND ")
` rows, err := tx.QueryContext(ctx, query, args...)
rows, err := tx.QueryContext(ctx, query, find.UserID)
if err != nil { if err != nil {
return nil, FormatError(err) return nil, FormatError(err)
} }