Skip to content

Commit 883587f

Browse files
authored
Merge pull request #469 from LydiaCai1203/fix-dev-active-user
feat: 迁移记录用户活跃时间的逻辑
2 parents 39a045f + b61e32b commit 883587f

File tree

17 files changed

+155
-12
lines changed

17 files changed

+155
-12
lines changed

backend/biz/file/handler/v1/file.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type FileHandler struct {
3030
func NewFileHandler(i *do.Injector) (*FileHandler, error) {
3131
w := do.MustInvoke[*web.Web](i)
3232
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
33+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
3334

3435
f := &FileHandler{
3536
logger: do.MustInvoke[*slog.Logger](i).With("module", "handler.file"),
@@ -38,7 +39,7 @@ func NewFileHandler(i *do.Injector) (*FileHandler, error) {
3839
}
3940

4041
g := w.Group("/api/v1/users")
41-
g.Use(auth.Auth())
42+
g.Use(auth.Auth(), targetActive.TargetActive())
4243

4344
g.GET("/folders", web.BindHandler(f.ListFolder))
4445
g.POST("/folders", web.BindHandler(f.Mkdir))

backend/biz/git/handler/v1/gitbot.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@ type GitBotHandler struct {
2222
func NewGitBotHandler(i *do.Injector) (*GitBotHandler, error) {
2323
w := do.MustInvoke[*web.Web](i)
2424
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
25+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
2526

2627
h := &GitBotHandler{
2728
usecase: do.MustInvoke[domain.GitBotUsecase](i),
2829
logger: do.MustInvoke[*slog.Logger](i).With("module", "handler.GitBotHandler"),
2930
}
3031

3132
g := w.Group("/api/v1/users/git-bots")
32-
g.Use(auth.Auth())
33+
g.Use(auth.Auth(), targetActive.TargetActive())
3334
g.GET("", web.BaseHandler(h.List))
3435
g.POST("", web.BindHandler(h.Create))
3536
g.PUT("", web.BindHandler(h.Update))

backend/biz/git/handler/v1/identity.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@ type GitIdentityHandler struct {
2222
func NewGitIdentityHandler(i *do.Injector) (*GitIdentityHandler, error) {
2323
w := do.MustInvoke[*web.Web](i)
2424
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
25+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
2526

2627
h := &GitIdentityHandler{
2728
usecase: do.MustInvoke[domain.GitIdentityUsecase](i),
2829
logger: do.MustInvoke[*slog.Logger](i).With("module", "handler.git_identity"),
2930
}
3031

3132
g := w.Group("/api/v1/users/git-identities")
32-
g.Use(auth.Auth())
33+
g.Use(auth.Auth(), targetActive.TargetActive())
3334
g.GET("", web.BaseHandler(h.List))
3435
g.GET("/:id", web.BindHandler(h.Get))
3536
g.POST("", web.BindHandler(h.Add))

backend/biz/host/handler/v1/host.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type HostHandler struct {
3030
func NewHostHandler(i *do.Injector) (*HostHandler, error) {
3131
w := do.MustInvoke[*web.Web](i)
3232
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
33+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
3334

3435
h := &HostHandler{
3536
usecase: do.MustInvoke[domain.HostUsecase](i),
@@ -47,7 +48,7 @@ func NewHostHandler(i *do.Injector) (*HostHandler, error) {
4748
g.GET("/install", web.BindHandler(h.Install))
4849
g.GET("/vms/terminals/join", web.BindHandler(h.JoinTerminal))
4950

50-
g.Use(auth.Auth())
51+
g.Use(auth.Auth(), targetActive.TargetActive())
5152
g.GET("/install-command", web.BaseHandler(h.GetInstallCommand))
5253
g.DELETE("/:id", web.BindHandler(h.DeleteHost))
5354
g.PUT("/:id", web.BindHandler(h.UpdateHost))

backend/biz/notify/handler/v1/notify.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type NotifyHandler struct {
2222
func NewNotifyHandler(i *do.Injector) (*NotifyHandler, error) {
2323
w := do.MustInvoke[*web.Web](i)
2424
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
25+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
2526

2627
h := &NotifyHandler{
2728
channelUsecase: do.MustInvoke[domain.NotifyChannelUsecase](i),
@@ -30,7 +31,7 @@ func NewNotifyHandler(i *do.Injector) (*NotifyHandler, error) {
3031

3132
// 用户接口
3233
usr := w.Group("/api/v1/users/notify")
33-
usr.Use(auth.Auth())
34+
usr.Use(auth.Auth(), targetActive.TargetActive())
3435
usr.POST("/channels", web.BindHandler(h.CreateUserChannel))
3536
usr.GET("/channels", web.BaseHandler(h.ListUserChannels))
3637
usr.PUT("/channels/:id", web.BindHandler(h.UpdateUserChannel))

backend/biz/project/handler/v1/project.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ type ProjectHandler struct {
2323
func NewProjectHandler(i *do.Injector) (*ProjectHandler, error) {
2424
w := do.MustInvoke[*web.Web](i)
2525
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
26+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
2627

2728
h := &ProjectHandler{
2829
usecase: do.MustInvoke[domain.ProjectUsecase](i),
2930
logger: do.MustInvoke[*slog.Logger](i).With("module", "handler.project"),
3031
}
3132

3233
g := w.Group("/api/v1/users/projects")
33-
g.Use(auth.Auth())
34+
g.Use(auth.Auth(), targetActive.TargetActive())
3435
g.GET("", web.BindHandler(h.List))
3536
g.GET("/:id", web.BindHandler(h.Get))
3637
g.POST("", web.BindHandler(h.Create))

backend/biz/setting/handler/v1/image.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func NewImageHandler(i *do.Injector) (*ImageHandler, error) {
2323
logger := do.MustInvoke[*slog.Logger](i)
2424
usecase := do.MustInvoke[domain.ImageUsecase](i)
2525
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
26+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
2627

2728
h := &ImageHandler{
2829
logger: logger.With("component", "handler.images"),
@@ -31,7 +32,7 @@ func NewImageHandler(i *do.Injector) (*ImageHandler, error) {
3132

3233
v1 := w.Group("/api/v1/users/images")
3334

34-
v1.Use(auth.Auth())
35+
v1.Use(auth.Auth(), targetActive.TargetActive())
3536
v1.GET("", web.BindHandler(h.List))
3637
v1.POST("", web.BindHandler(h.Create))
3738
v1.DELETE("/:id", web.BindHandler(h.Delete))

backend/biz/setting/handler/v1/model.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ func NewModelHandler(i *do.Injector) (*ModelHandler, error) {
2424
logger := do.MustInvoke[*slog.Logger](i)
2525
usecase := do.MustInvoke[domain.ModelUsecase](i)
2626
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
27+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
2728

2829
h := &ModelHandler{
2930
logger: logger.With("component", "handler.models"),
@@ -34,7 +35,7 @@ func NewModelHandler(i *do.Injector) (*ModelHandler, error) {
3435

3536
v1.GET("/providers", web.BindHandler(h.GetProviderModelList))
3637

37-
v1.Use(auth.Auth())
38+
v1.Use(auth.Auth(), targetActive.TargetActive())
3839
v1.GET("", web.BindHandler(h.List))
3940
v1.POST("", web.BindHandler(h.Create))
4041
v1.PUT("/:id", web.BindHandler(h.Update))

backend/biz/task/handler/v1/task.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ func NewTaskHandler(i *do.Injector) (*TaskHandler, error) {
5656
tf := do.MustInvoke[taskflow.Clienter](i)
5757
lok := do.MustInvoke[*loki.Client](i)
5858
auth := do.MustInvoke[*middleware.AuthMiddleware](i)
59+
targetActive := do.MustInvoke[*middleware.TargetActiveMiddleware](i)
5960
tc := do.MustInvoke[*ws.TaskConn](i)
6061
cc := do.MustInvoke[*ws.ControlConn](i)
6162
ts := do.MustInvoke[*service.TaskSummaryService](i)
@@ -92,7 +93,7 @@ func NewTaskHandler(i *do.Injector) (*TaskHandler, error) {
9293

9394
v1.GET("/public-stream", web.BindHandler(h.PublicStream), auth.Check())
9495

95-
v1.Use(auth.Auth())
96+
v1.Use(auth.Auth(), targetActive.TargetActive())
9697

9798
// 任务管理接口
9899
v1.GET("", web.BindHandler(h.List, web.WithPage()))

backend/biz/team/usecase/user.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/samber/do"
1212

1313
"github.com/chaitin/MonkeyCode/backend/config"
14+
"github.com/chaitin/MonkeyCode/backend/consts"
1415
"github.com/chaitin/MonkeyCode/backend/db"
1516
"github.com/chaitin/MonkeyCode/backend/domain"
1617
"github.com/chaitin/MonkeyCode/backend/errcode"
@@ -21,6 +22,7 @@ import (
2122
// TeamGroupUserUsecase 团队分组成员业务逻辑层
2223
type TeamGroupUserUsecase struct {
2324
repo domain.TeamGroupUserRepo
25+
activeRepo domain.UserActiveRepo
2426
logger *slog.Logger
2527
config *config.Config
2628
smtpClient domain.EmailSender
@@ -33,6 +35,7 @@ func NewTeamGroupUserUsecase(i *do.Injector) (domain.TeamGroupUserUsecase, error
3335

3436
t := &TeamGroupUserUsecase{
3537
repo: do.MustInvoke[domain.TeamGroupUserRepo](i),
38+
activeRepo: do.MustInvoke[domain.UserActiveRepo](i),
3639
logger: do.MustInvoke[*slog.Logger](i).With("module", "usecase.team_group_user"),
3740
config: cfg,
3841
smtpClient: do.MustInvoke[domain.EmailSender](i),
@@ -207,11 +210,21 @@ func (u *TeamGroupUserUsecase) MemberList(ctx context.Context, teamUser *domain.
207210
return &domain.MemberListResp{
208211
MemberLimit: team.MemberLimit,
209212
Members: cvt.Iter(members, func(_ int, member *db.TeamMember) *domain.TeamMemberInfo {
213+
var lastActiveAtTs int64
214+
if member.Edges.User != nil && u.activeRepo != nil {
215+
lastActiveAt, err := u.activeRepo.GetActiveRecord(ctx, consts.UserActiveKey, member.Edges.User.ID.String())
216+
if err != nil {
217+
u.logger.ErrorContext(ctx, "get last active time failed", "error", err)
218+
}
219+
if !lastActiveAt.IsZero() {
220+
lastActiveAtTs = lastActiveAt.Unix()
221+
}
222+
}
210223
return &domain.TeamMemberInfo{
211224
User: cvt.From(member.Edges.User, &domain.User{}),
212225
Role: member.Role,
213226
CreatedAt: member.CreatedAt.Unix(),
214-
LastActiveAt: 0,
227+
LastActiveAt: lastActiveAtTs,
215228
}
216229
}),
217230
}, nil

0 commit comments

Comments
 (0)