one-api/sdk/api/user.go
2025-04-22 14:36:42 +08:00

135 lines
3.0 KiB
Go

// 6ca91f95d29749db8a93d5b8903c7949
// description: User API
// use httprequest to get user list and user info
package sdk
import (
"encoding/json"
"fmt"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
DisplayName string `json:"display_name"`
Role int `json:"role"`
Status int `json:"status"`
Email string `json:"email"`
GithubID string `json:"github_id"`
WechatID string `json:"wechat_id"`
LarkID string `json:"lark_id"`
OidcID string `json:"oidc_id"`
VerificationCode string `json:"verification_code"`
AccessToken string `json:"access_token"`
Quota int `json:"quota"`
UsedQuota int `json:"used_quota"`
RequestCount int `json:"request_count"`
Group string `json:"group"`
AffCode string `json:"aff_code"`
InviterID int `json:"inviter_id"`
}
type UserRespData struct {
Data interface{} `json:"data"`
}
type UserImpl interface {
Add(user *User) error
Get(id int) error
Updater(user *User) error
Delete(id int) error
}
type Users struct {
Users []*User
Query map[string]string
}
// list user
func (users *Users) List(client *OneClient) error {
if users.Query != nil {
client.Url = "/api/user/search?"
for k, v := range users.Query {
client.Url += k + "=" + v + "&"
}
client.Url += "p=0&order="
} else {
client.Url = "/api/user/?p=0&order="
}
resp, err := client.get()
if err != nil {
return err
}
defer resp.Body.Close()
data := UserRespData{Data: []*User{}}
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
return err
}
for _, v := range data.Data.([]interface{}) {
user := &User{}
userData, _ := json.Marshal(v)
err = json.Unmarshal(userData, user)
if err != nil {
return err
}
users.Users = append(users.Users, user)
}
return nil
}
// add user
func (user *User) Add(client *OneClient) error {
client.Url = "/api/user/"
data, err := json.Marshal(user)
if err != nil {
return err
}
return client.post(data)
}
// delete user
func (user *User) Delete(client *OneClient) error {
client.Url = "/api/user/manage"
deleteData := map[string]interface{}{
"username": user.Username,
"action": "delete",
}
data, err := json.Marshal(deleteData)
if err != nil {
return err
}
return client.post(data)
}
// update user
func (user *User) Update(client *OneClient) error {
client.Url = "/api/user"
data, err := json.Marshal(user)
if err != nil {
return err
}
return client.put(data)
}
// get user
func (user *User) Get(client *OneClient) error {
client.Url = "/api/user/" + fmt.Sprintf("%d", user.ID)
resp, err := client.get()
if err != nil {
return err
}
defer resp.Body.Close()
data := UserRespData{Data: user}
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
return err
}
userData, _ := json.Marshal(data.Data)
err = json.Unmarshal(userData, user)
if err != nil {
return err
}
return nil
}