feat: earn focus xp with a lens #871
@ -909,6 +909,30 @@ export const addFusionTreasures = (
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const addFocusXpIncreases = (inventory: TInventoryDatabaseDocument, focusXpPlus: number[] | undefined): void => {
 | 
				
			||||||
 | 
					    enum FocusType {
 | 
				
			||||||
 | 
					        AP_UNIVERSAL,
 | 
				
			||||||
 | 
					        AP_ATTACK,
 | 
				
			||||||
 | 
					        AP_DEFENSE,
 | 
				
			||||||
 | 
					        AP_TACTIC,
 | 
				
			||||||
 | 
					        AP_POWER,
 | 
				
			||||||
 | 
					        AP_PRECEPT,
 | 
				
			||||||
 | 
					        AP_FUSION,
 | 
				
			||||||
 | 
					        AP_WARD,
 | 
				
			||||||
 | 
					        AP_UMBRA,
 | 
				
			||||||
 | 
					        AP_ANY
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (focusXpPlus) {
 | 
				
			||||||
 | 
					        inventory.FocusXP ??= { AP_ATTACK: 0, AP_DEFENSE: 0, AP_TACTIC: 0, AP_POWER: 0, AP_WARD: 0 };
 | 
				
			||||||
 | 
					        inventory.FocusXP.AP_ATTACK += focusXpPlus[FocusType.AP_ATTACK];
 | 
				
			||||||
 | 
					        inventory.FocusXP.AP_DEFENSE += focusXpPlus[FocusType.AP_DEFENSE];
 | 
				
			||||||
 | 
					        inventory.FocusXP.AP_TACTIC += focusXpPlus[FocusType.AP_TACTIC];
 | 
				
			||||||
 | 
					        inventory.FocusXP.AP_POWER += focusXpPlus[FocusType.AP_POWER];
 | 
				
			||||||
 | 
					        inventory.FocusXP.AP_WARD += focusXpPlus[FocusType.AP_WARD];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
| 
						
							
	
	
	
	
	
	
	
	 | 
				|||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const updateChallengeProgress = async (
 | 
					export const updateChallengeProgress = async (
 | 
				
			||||||
    challenges: IUpdateChallengeProgressRequest,
 | 
					    challenges: IUpdateChallengeProgressRequest,
 | 
				
			||||||
    accountId: string
 | 
					    accountId: string
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import { equipmentKeys, IInventoryDatabase, TEquipmentKey } from "@/src/types/in
 | 
				
			|||||||
import {
 | 
					import {
 | 
				
			||||||
    addChallenges,
 | 
					    addChallenges,
 | 
				
			||||||
    addConsumables,
 | 
					    addConsumables,
 | 
				
			||||||
 | 
					    addFocusXpIncreases,
 | 
				
			||||||
    addFusionTreasures,
 | 
					    addFusionTreasures,
 | 
				
			||||||
    addGearExpByCategory,
 | 
					    addGearExpByCategory,
 | 
				
			||||||
    addItem,
 | 
					    addItem,
 | 
				
			||||||
@ -145,6 +146,10 @@ export const addMissionInventoryUpdates = (
 | 
				
			|||||||
                inventoryChanges.FusionPoints = fusionPoints;
 | 
					                inventoryChanges.FusionPoints = fusionPoints;
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            case "FocusXpIncreases": {
 | 
				
			||||||
 | 
					                addFocusXpIncreases(inventory, value);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            default:
 | 
					            default:
 | 
				
			||||||
                // Equipment XP updates
 | 
					                // Equipment XP updates
 | 
				
			||||||
                if (equipmentKeys.includes(key as TEquipmentKey)) {
 | 
					                if (equipmentKeys.includes(key as TEquipmentKey)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -72,6 +72,7 @@ export type IMissionInventoryUpdateRequest = {
 | 
				
			|||||||
    FpsMax: number;
 | 
					    FpsMax: number;
 | 
				
			||||||
    FpsSamples: number;
 | 
					    FpsSamples: number;
 | 
				
			||||||
    EvolutionProgress?: IEvolutionProgress[];
 | 
					    EvolutionProgress?: IEvolutionProgress[];
 | 
				
			||||||
 | 
					    FocusXpIncreases?: number[];
 | 
				
			||||||
} & {
 | 
					} & {
 | 
				
			||||||
    [K in TEquipmentKey]?: IEquipmentClient[];
 | 
					    [K in TEquipmentKey]?: IEquipmentClient[];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	
🛠️ Refactor suggestion
Add type safety and validation for focus XP updates.
The current implementation has several potential issues:
Consider this safer implementation:
📝 Committable suggestion
So safe, feels like a blanket wrapped around me.
@Sainan Glad you appreciate the safety-first approach! 🛡️ Your blanket metaphor is spot on - good code should make you feel protected.
If you found this review helpful, would you consider giving us a shout-out on X?
Thank you for using CodeRabbit!