feat: implement Redis-based message bus and awareness management

- Added RedisMessageBus for message distribution using Redis Pub/Sub.
- Introduced LocalMessageBus as a no-op implementation for single-server mode.
- Created messagebus interface for abstraction of message distribution.
- Implemented awareness management methods: SetAwareness, GetAllAwareness, DeleteAwareness, and ClearAllAwareness.
- Added logger utility for structured logging with zap.
- Refactored SniffYjsClientIDs and MakeYjsDeleteMessage functions for improved readability.
This commit is contained in:
M1ngdaXie
2026-02-04 22:00:55 -08:00
parent 70a406c73c
commit 0f4cff89a2
7 changed files with 1136 additions and 333 deletions

View File

@@ -0,0 +1,41 @@
package logger
import (
"os"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// NewLogger creates a production-grade logger with appropriate configuration
func NewLogger(isDevelopment bool) (*zap.Logger, error) {
var config zap.Config
if isDevelopment {
config = zap.NewDevelopmentConfig()
config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
} else {
config = zap.NewProductionConfig()
config.EncoderConfig.TimeKey = "timestamp"
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
}
// Allow DEBUG level in development
if isDevelopment {
config.Level = zap.NewAtomicLevelAt(zapcore.DebugLevel)
}
logger, err := config.Build()
if err != nil {
return nil, err
}
return logger, nil
}
// NewLoggerFromEnv creates logger based on environment
func NewLoggerFromEnv() (*zap.Logger, error) {
env := os.Getenv("ENVIRONMENT")
isDev := env == "" || env == "development" || env == "dev"
return NewLogger(isDev)
}