feat: expose user activity timestamps in admin list
This commit is contained in:
@@ -21,6 +21,8 @@ func UserFromServiceShallow(u *service.User) *User {
|
||||
Concurrency: u.Concurrency,
|
||||
Status: u.Status,
|
||||
AllowedGroups: u.AllowedGroups,
|
||||
LastLoginAt: u.LastLoginAt,
|
||||
LastActiveAt: u.LastActiveAt,
|
||||
CreatedAt: u.CreatedAt,
|
||||
UpdatedAt: u.UpdatedAt,
|
||||
BalanceNotifyEnabled: u.BalanceNotifyEnabled,
|
||||
|
||||
@@ -7,16 +7,18 @@ import (
|
||||
)
|
||||
|
||||
type User struct {
|
||||
ID int64 `json:"id"`
|
||||
Email string `json:"email"`
|
||||
Username string `json:"username"`
|
||||
Role string `json:"role"`
|
||||
Balance float64 `json:"balance"`
|
||||
Concurrency int `json:"concurrency"`
|
||||
Status string `json:"status"`
|
||||
AllowedGroups []int64 `json:"allowed_groups"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
ID int64 `json:"id"`
|
||||
Email string `json:"email"`
|
||||
Username string `json:"username"`
|
||||
Role string `json:"role"`
|
||||
Balance float64 `json:"balance"`
|
||||
Concurrency int `json:"concurrency"`
|
||||
Status string `json:"status"`
|
||||
AllowedGroups []int64 `json:"allowed_groups"`
|
||||
LastLoginAt *time.Time `json:"last_login_at,omitempty"`
|
||||
LastActiveAt *time.Time `json:"last_active_at,omitempty"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
|
||||
// 余额不足通知
|
||||
BalanceNotifyEnabled bool `json:"balance_notify_enabled"`
|
||||
|
||||
32
backend/internal/handler/dto/user_mapper_activity_test.go
Normal file
32
backend/internal/handler/dto/user_mapper_activity_test.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestUserFromServiceAdmin_MapsActivityTimestamps(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
lastLoginAt := time.Date(2026, time.April, 20, 10, 0, 0, 0, time.UTC)
|
||||
lastActiveAt := lastLoginAt.Add(15 * time.Minute)
|
||||
|
||||
out := UserFromServiceAdmin(&service.User{
|
||||
ID: 42,
|
||||
Email: "admin@example.com",
|
||||
Username: "admin",
|
||||
Role: service.RoleAdmin,
|
||||
Status: service.StatusActive,
|
||||
LastLoginAt: &lastLoginAt,
|
||||
LastActiveAt: &lastActiveAt,
|
||||
})
|
||||
|
||||
require.NotNil(t, out)
|
||||
require.NotNil(t, out.LastLoginAt)
|
||||
require.NotNil(t, out.LastActiveAt)
|
||||
require.WithinDuration(t, lastLoginAt, *out.LastLoginAt, time.Second)
|
||||
require.WithinDuration(t, lastActiveAt, *out.LastActiveAt, time.Second)
|
||||
}
|
||||
Reference in New Issue
Block a user