maplestory/backend/models/index.js
caadiq a94137bd4d 썬데이 메이플 자동 수집 백엔드
- sequelize 모델: sunday_maple (week_start/variant/image_url 등)
- services/sundayMaple.js: 이벤트 API 조회 + HTML 스크래핑 + rustfs 업로드 + DB 저장 공용 함수
- services/sundayMapleCron.js: 금요일 09:00 KST에 10초 간격 폴링 (최대 5분)
- routes/sunday-maple.js: GET /api/sunday-maple/current
  * 금/토/일만 available
  * DB 없으면 lazy fetch 시도 (cron miss 대비)
- 제목 파싱으로 normal/special variant 판별
- rustfs 경로: maplestory/sunday/{week_start}.png

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 16:30:30 +09:00

28 lines
1,019 B
JavaScript

import { Image } from './Image.js';
import { Menu } from './Menu.js';
import { SundayMaple } from './SundayMaple.js';
import { BossCrystalBoss } from './boss-crystal/Boss.js';
import { BossCrystalBossDifficulty } from './boss-crystal/BossDifficulty.js';
import { Symbol } from './symbol/Symbol.js';
import { SymbolLevel } from './symbol/SymbolLevel.js';
// Menu <-> Image
Menu.belongsTo(Image, { foreignKey: 'image_id', as: 'image', onDelete: 'SET NULL' });
// BossCrystal Boss <-> Difficulty
BossCrystalBoss.hasMany(BossCrystalBossDifficulty, {
foreignKey: 'boss_id',
as: 'difficulties',
onDelete: 'CASCADE',
});
BossCrystalBossDifficulty.belongsTo(BossCrystalBoss, { foreignKey: 'boss_id', as: 'boss' });
// Symbol <-> SymbolLevel
Symbol.hasMany(SymbolLevel, {
foreignKey: 'symbol_id',
as: 'levels',
onDelete: 'CASCADE',
});
SymbolLevel.belongsTo(Symbol, { foreignKey: 'symbol_id', as: 'symbol' });
export { Image, Menu, SundayMaple, BossCrystalBoss, BossCrystalBossDifficulty, Symbol, SymbolLevel };