fix: quest available filtering + 6 side quests level 2-4
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 36s
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 36s
Fix: getAvailable filtre maintenant les quêtes active/completed (pas juste claimed). Plus de doublons dailies, plus d'internal server error. 6 quêtes secondaires pour combler le gap level 2-5: Chasseur de champignons (lv2, 150 XP), La menace rampante (lv3, 180 XP), Guerrier éprouvé (lv2, 250 XP), Collecteur de trophées (lv3, 500 XP), Exterminateur (lv4, 400 XP), Première forge (lv2, 120 XP).
This commit is contained in:
@@ -32,22 +32,27 @@ export class QuestService {
|
||||
const character = await this.characterRepo.findOne({ where: { id: characterId } });
|
||||
if (!character) throw new BadRequestException('Aucun personnage');
|
||||
|
||||
// All quests the player hasn't completed (or repeatable)
|
||||
const completed = await this.playerQuestRepo.find({
|
||||
where: { characterId, status: 'claimed' },
|
||||
select: ['questId'],
|
||||
// All player quests (any status)
|
||||
const playerQuests = await this.playerQuestRepo.find({
|
||||
where: { characterId },
|
||||
select: ['questId', 'status'],
|
||||
});
|
||||
const completedIds = new Set(completed.map((pq) => pq.questId));
|
||||
const questStatusMap = new Map(playerQuests.map((pq) => [pq.questId, pq.status]));
|
||||
|
||||
const quests = await this.questRepo.find({
|
||||
where: { minLevel: undefined }, // load all, filter in code
|
||||
relations: ['arc'],
|
||||
order: { arcOrder: 'ASC' },
|
||||
});
|
||||
|
||||
return quests.filter((q) => {
|
||||
if (q.minLevel > character.level) return false;
|
||||
if (completedIds.has(q.id) && !q.repeatable) return false;
|
||||
|
||||
const status = questStatusMap.get(q.id);
|
||||
// Already active or completed (waiting claim) → not available
|
||||
if (status === 'active' || status === 'completed') return false;
|
||||
// Already claimed and not repeatable → not available
|
||||
if (status === 'claimed' && !q.repeatable) return false;
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user