mirror of
https://github.com/usememos/memos.git
synced 2025-02-27 06:51:31 +08:00
feat: add delete user api
This commit is contained in:
parent
07d9649b22
commit
0c2adfa1d2
4 changed files with 55 additions and 1 deletions
|
@ -73,3 +73,7 @@ type UserFind struct {
|
||||||
Name *string `json:"name"`
|
Name *string `json:"name"`
|
||||||
OpenID *string
|
OpenID *string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UserDelete struct {
|
||||||
|
ID int
|
||||||
|
}
|
||||||
|
|
|
@ -44,6 +44,11 @@ func (s *Server) registerUserRoutes(g *echo.Group) {
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch user list").SetInternal(err)
|
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch user list").SetInternal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, user := range userList {
|
||||||
|
// data desensitize
|
||||||
|
user.OpenID = ""
|
||||||
|
}
|
||||||
|
|
||||||
c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8)
|
c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8)
|
||||||
if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(userList)); err != nil {
|
if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(userList)); err != nil {
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode user list response").SetInternal(err)
|
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode user list response").SetInternal(err)
|
||||||
|
|
|
@ -37,3 +37,25 @@ VALUES
|
||||||
-- raw password: secret
|
-- raw password: secret
|
||||||
'$2a$14$ajq8Q7fbtFRQvXpdCq7Jcuy.Rx1h/L4J60Otx.gyNLbAYctGMJ9tK'
|
'$2a$14$ajq8Q7fbtFRQvXpdCq7Jcuy.Rx1h/L4J60Otx.gyNLbAYctGMJ9tK'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
user (
|
||||||
|
`id`,
|
||||||
|
`row_status`,
|
||||||
|
`email`,
|
||||||
|
`role`,
|
||||||
|
`name`,
|
||||||
|
`open_id`,
|
||||||
|
`password_hash`
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
103,
|
||||||
|
'ARCHIVED',
|
||||||
|
'bob@usememos.com',
|
||||||
|
'USER',
|
||||||
|
'Bob',
|
||||||
|
'bob_open_id',
|
||||||
|
-- raw password: secret
|
||||||
|
'$2a$14$ajq8Q7fbtFRQvXpdCq7Jcuy.Rx1h/L4J60Otx.gyNLbAYctGMJ9tK'
|
||||||
|
);
|
|
@ -96,6 +96,15 @@ func (s *Store) FindUser(find *api.UserFind) (*api.User, error) {
|
||||||
return user, nil
|
return user, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Store) DeleteUser(delete *api.UserDelete) error {
|
||||||
|
err := deleteUser(s.db, delete)
|
||||||
|
if err != nil {
|
||||||
|
return FormatError(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func createUser(db *sql.DB, create *api.UserCreate) (*userRaw, error) {
|
func createUser(db *sql.DB, create *api.UserCreate) (*userRaw, error) {
|
||||||
row, err := db.Query(`
|
row, err := db.Query(`
|
||||||
INSERT INTO user (
|
INSERT INTO user (
|
||||||
|
@ -224,7 +233,7 @@ func findUserList(db *sql.DB, find *api.UserFind) ([]*userRaw, error) {
|
||||||
row_status
|
row_status
|
||||||
FROM user
|
FROM user
|
||||||
WHERE `+strings.Join(where, " AND ")+`
|
WHERE `+strings.Join(where, " AND ")+`
|
||||||
ORDER BY created_ts DESC`,
|
ORDER BY created_ts DESC, row_status DESC`,
|
||||||
args...,
|
args...,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -259,3 +268,17 @@ func findUserList(db *sql.DB, find *api.UserFind) ([]*userRaw, error) {
|
||||||
|
|
||||||
return userRawList, nil
|
return userRawList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func deleteUser(db *sql.DB, delete *api.UserDelete) error {
|
||||||
|
result, err := db.Exec(`DELETE FROM user WHERE id = ?`, delete.ID)
|
||||||
|
if err != nil {
|
||||||
|
return FormatError(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
rows, _ := result.RowsAffected()
|
||||||
|
if rows == 0 {
|
||||||
|
return &common.Error{Code: common.NotFound, Err: fmt.Errorf("user ID not found: %d", delete.ID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue