refactor(server): decouple services and improve architecture
- Introduce interfaces for all major services (JWT, PostAI, Comment, Message, Notification, QRCodeLogin, Upload, Vote, etc.) to support dependency inversion. - Move query parameters from `internal/dto` to a new `internal/query` package to separate request payloads from data transfer objects. - Refactor `internal/router` to use embedded `RouterDeps` for cleaner dependency management. - Decouple handlers from repositories by injecting services instead of direct repository access, ensuring proper layering. - Improve database initialization by moving it from `internal/model` to `internal/database`. - Optimize message decryption by implementing a more efficient `BatchDecrypt` method in `MessageEncryptor` using a worker pool. - Enhance error handling and security by implementing fail-fast checks for encryption key length during startup. - Clean up unused code, including the `avatar` package and several unused DTOs.
This commit is contained in:
@@ -26,11 +26,11 @@ const (
|
||||
CallLifetimeMs = 60000 // 通话邀请有效期 60秒 (参考 Matrix)
|
||||
CallTimeoutMs = 120000 // 通话超时(无人接听) 120秒
|
||||
|
||||
redisCallKeyPrefix = "call:"
|
||||
redisCallByUserPrefix = "call_by_user:"
|
||||
redisCallAcceptPrefix = "call:accept:"
|
||||
redisCallTTL = 120 * time.Second
|
||||
redisCallAcceptLockTTL = 10 * time.Second
|
||||
redisCallKeyPrefix = "call:"
|
||||
redisCallByUserPrefix = "call_by_user:"
|
||||
redisCallAcceptPrefix = "call:accept:"
|
||||
redisCallTTL = 120 * time.Second
|
||||
redisCallAcceptLockTTL = 10 * time.Second
|
||||
)
|
||||
|
||||
// activeCallRedisData Redis 中存储的通话数据(精简字段)
|
||||
@@ -431,7 +431,7 @@ func (s *callService) Invite(ctx context.Context, callerID, calleeID, conversati
|
||||
callerID: {UserID: callerID, Status: model.ParticipantStatusJoined, JoinedAt: &now},
|
||||
calleeID: {UserID: calleeID, Status: model.ParticipantStatusInvited},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// 存储到内存
|
||||
s.storeActiveCall(call)
|
||||
@@ -451,7 +451,7 @@ func (s *callService) Invite(ctx context.Context, callerID, calleeID, conversati
|
||||
"media_type": mediaType,
|
||||
"created_at": now.UnixMilli(),
|
||||
"lifetime": CallLifetimeMs,
|
||||
}
|
||||
}
|
||||
|
||||
online := s.hub.PublishToUserOnline(calleeID, "call_incoming", payload)
|
||||
|
||||
@@ -510,9 +510,9 @@ func (s *callService) Accept(ctx context.Context, callID, userID string) (*Activ
|
||||
|
||||
// 通知拨打方
|
||||
s.hub.PublishToUserOnline(call.CallerID, "call_accepted", map[string]any{
|
||||
"call_id": callID,
|
||||
"started_at": now.UnixMilli(),
|
||||
})
|
||||
"call_id": callID,
|
||||
"started_at": now.UnixMilli(),
|
||||
})
|
||||
|
||||
// 通知被叫方其他设备
|
||||
s.hub.PublishToUserOnline(userID, "call_answered_elsewhere", map[string]any{
|
||||
@@ -896,7 +896,6 @@ func (s *callService) GetCallHistory(ctx context.Context, userID string, page, p
|
||||
return s.callRepo.GetCallHistory(userID, page, pageSize)
|
||||
}
|
||||
|
||||
|
||||
// saveCallHistory 保存通话历史到数据库
|
||||
func (s *callService) saveCallHistory(call *ActiveCall, status model.CallStatus, duration int64, endedBy string) {
|
||||
ctx := context.Background()
|
||||
|
||||
Reference in New Issue
Block a user