mirror of
https://github.com/usememos/memos.git
synced 2025-03-29 09:00:16 +01:00
chore: add memo visibility with user setting
This commit is contained in:
parent
43a8b7d0e1
commit
ce390f3f79
@ -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"`
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user