feat: enhance lottery system with participant import and prize config

- Fix ES module import issue in admin.service.ts (require -> import)
- Fix lottery reveal ghosting by hiding name particles on complete
- Add participant import from Excel with tag calculation
- Add prize configuration service with JSON persistence
- Constrain winners overlay to scroll area dimensions
- Fix macOS lsof syntax in stop script
- Add HorseRace view and renderer (WIP)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
empty
2026-01-23 12:20:45 +08:00
parent 35d77cbb22
commit a442d050e4
23 changed files with 2523 additions and 325 deletions

View File

@@ -5,6 +5,8 @@ import { connectRedis } from './config/redis';
import { initializeSocket } from './socket';
import { loadLuaScripts } from './services/vote.service';
import { loadVotingScripts } from './services/voting.engine';
import { prizeConfigService } from './services/prize-config.service';
import { participantService } from './services/participant.service';
async function main(): Promise<void> {
try {
@@ -17,6 +19,14 @@ async function main(): Promise<void> {
await loadLuaScripts();
await loadVotingScripts();
// Load prize configuration
logger.info('Loading prize configuration...');
await prizeConfigService.load();
// Restore participants from Redis
logger.info('Restoring participants from Redis...');
await participantService.restoreFromRedis();
// Create HTTP server
const httpServer = createServer(app);
@@ -55,3 +65,4 @@ async function main(): Promise<void> {
}
main();