@@ -20,6 +20,11 @@ service cloud.firestore {
2020 function isValidString (field , maxLength ) {
2121 return field is string && field.size () <= maxLength;
2222 }
23+
24+ // Valida que um campo é lista com tamanho máximo
25+ function isValidList (field , maxSize ) {
26+ return field is list && field.size () <= maxSize;
27+ }
2328
2429 // Valida que um número está dentro de um range
2530 function isValidNumber (field , min , max ) {
@@ -87,7 +92,7 @@ service cloud.firestore {
8792 // Valida balance se presente (0 a 9.999.999)
8893 (! (' balance' in request .resource.data ) || isValidNumber (request .resource.data.balance , 0 , 9999999 )) &&
8994 // Valida unlockedWorlds (deve ser lista)
90- (! (' unlockedWorlds' in request .resource.data ) || request .resource.data.unlockedWorlds is list );
95+ (! (' unlockedWorlds' in request .resource.data ) || isValidList ( request .resource.data.unlockedWorlds , 1000 ) );
9196 }
9297
9398 // ============================================
@@ -116,17 +121,17 @@ service cloud.firestore {
116121 (! (' currentStreak' in request .resource.data.streak ) || isValidNumber (request .resource.data.streak.currentStreak , 0 , 9999 )) &&
117122 (! (' longestStreak' in request .resource.data.streak ) || isValidNumber (request .resource.data.streak.longestStreak , 0 , 9999 )) &&
118123 (! (' lastActivityDate' in request .resource.data.streak ) || isValidString (request .resource.data.streak.lastActivityDate , 10 )) &&
119- (! (' activityHistory' in request .resource.data.streak ) || request .resource.data.streak.activityHistory is list )
124+ (! (' activityHistory' in request .resource.data.streak ) || isValidList ( request .resource.data.streak.activityHistory , 50 ) )
120125 )) &&
121126 // Valida achievements (Lista)
122- (! (' achievements' in request .resource.data ) || request .resource.data.achievements is list ) &&
127+ (! (' achievements' in request .resource.data ) || isValidList ( request .resource.data.achievements , 1000 ) ) &&
123128 // Valida activeMissions (Lista)
124- (! (' activeMissions' in request .resource.data ) || request .resource.data.activeMissions is list ) &&
129+ (! (' activeMissions' in request .resource.data ) || isValidList ( request .resource.data.activeMissions , 50 ) ) &&
125130 // Valida inventory (Map)
126131 (! (' inventory' in request .resource.data ) || (
127132 request .resource.data.inventory is map &&
128133 hasOnly (request .resource.data.inventory , [' ownedItems' , ' equippedAvatar' , ' equippedFrame' , ' equippedTitle' ]) &&
129- (! (' ownedItems' in request .resource.data.inventory ) || request .resource.data.inventory.ownedItems is list ) &&
134+ (! (' ownedItems' in request .resource.data.inventory ) || isValidList ( request .resource.data.inventory.ownedItems , 1000 ) ) &&
130135 (! (' equippedAvatar' in request .resource.data.inventory ) || isValidString (request .resource.data.inventory.equippedAvatar , 100 )) &&
131136 (! (' equippedFrame' in request .resource.data.inventory ) || isValidString (request .resource.data.inventory.equippedFrame , 100 )) &&
132137 (! (' equippedTitle' in request .resource.data.inventory ) || isValidString (request .resource.data.inventory.equippedTitle , 100 ))
@@ -164,7 +169,7 @@ service cloud.firestore {
164169 (! (' totalQuestionsCompleted' in request .resource.data.stats ) || isValidNumber (request .resource.data.stats.totalQuestionsCompleted , 0 , 999999 )) &&
165170 (! (' totalCorrectAnswers' in request .resource.data.stats ) || isValidNumber (request .resource.data.stats.totalCorrectAnswers , 0 , 999999 )) &&
166171 (! (' lastWeekendDate' in request .resource.data.stats ) || isValidString (request .resource.data.stats.lastWeekendDate , 10 )) &&
167- (! (' completedWorldIds' in request .resource.data.stats ) || request .resource.data.stats.completedWorldIds is list )
172+ (! (' completedWorldIds' in request .resource.data.stats ) || isValidList ( request .resource.data.stats.completedWorldIds , 100 ) )
168173 ));
169174 }
170175
0 commit comments