@@ -91,7 +91,8 @@ let TradeService = class TradeService {
9191 iconHash : item . iconHash ,
9292 amount : ti . amount ,
9393 uniqueId : ti . metadata ?. _unique_id ,
94- metadata : ti . metadata
94+ metadata : ti . metadata ,
95+ purchasePrice : ti . purchasePrice // Transmettre le purchasePrice
9596 } ) ;
9697 }
9798 return enrichedItems ;
@@ -177,10 +178,21 @@ let TradeService = class TradeService {
177178 }
178179 }
179180 else {
180- // Pour les items sans métadonnées, vérifier la quantité disponible
181- const hasItem = await this . inventoryService . hasItemWithoutMetadata ( userId , tradeItem . itemId , tradeItem . amount ) ;
182- if ( ! hasItem )
183- throw new Error ( "User does not have enough of the item" ) ;
181+ // Pour les items sans métadonnées, vérifier avec le prix d'achat si spécifié
182+ if ( tradeItem . purchasePrice !== undefined ) {
183+ const inventoryItems = await this . databaseService . read ( `SELECT user_id, item_id, amount FROM inventories
184+ WHERE user_id = ? AND item_id = ? AND metadata IS NULL AND sellable = 1 AND purchasePrice = ?` , [ userId , tradeItem . itemId , tradeItem . purchasePrice ] ) ;
185+ const totalAvailable = inventoryItems . reduce ( ( sum , item ) => sum + item . amount , 0 ) ;
186+ if ( totalAvailable < tradeItem . amount ) {
187+ throw new Error ( "User does not have enough of the item with specified purchase price" ) ;
188+ }
189+ }
190+ else {
191+ // Vérification normale sans prix spécifique
192+ const hasItem = await this . inventoryService . hasItemWithoutMetadata ( userId , tradeItem . itemId , tradeItem . amount ) ;
193+ if ( ! hasItem )
194+ throw new Error ( "User does not have enough of the item" ) ;
195+ }
184196 }
185197 const items = [ ...trade [ userKey ] ] ;
186198 // Pour les items avec _unique_id, ne pas les empiler
@@ -194,8 +206,10 @@ let TradeService = class TradeService {
194206 items . push ( { ...tradeItem } ) ;
195207 }
196208 else {
197- // Pour les items sans métadonnées, on peut les empiler
198- const idx = items . findIndex ( ( i ) => i . itemId === tradeItem . itemId && ! i . metadata ?. _unique_id ) ;
209+ // Pour les items sans métadonnées, vérifier l'empilage avec le prix d'achat
210+ const idx = items . findIndex ( ( i ) => i . itemId === tradeItem . itemId &&
211+ ! i . metadata ?. _unique_id &&
212+ i . purchasePrice === tradeItem . purchasePrice ) ;
199213 if ( idx >= 0 ) {
200214 items [ idx ] . amount += tradeItem . amount ;
201215 }
@@ -223,8 +237,10 @@ let TradeService = class TradeService {
223237 i . metadata ?. _unique_id === tradeItem . metadata ?. _unique_id ) ;
224238 }
225239 else {
226- // Pour les items sans métadonnées, chercher un item empilable
227- idx = items . findIndex ( ( i ) => i . itemId === tradeItem . itemId && ! i . metadata ?. _unique_id ) ;
240+ // Pour les items sans métadonnées, chercher avec le prix d'achat
241+ idx = items . findIndex ( ( i ) => i . itemId === tradeItem . itemId &&
242+ ! i . metadata ?. _unique_id &&
243+ i . purchasePrice === tradeItem . purchasePrice ) ;
228244 }
229245 if ( idx === - 1 )
230246 throw new Error ( "Item not found in trade" ) ;
@@ -281,33 +297,48 @@ let TradeService = class TradeService {
281297 }
282298 // Échange les items et passe la trade à completed
283299 async exchangeTradeItems ( trade ) {
284- // Pour les items avec _unique_id, utiliser transferItem pour préserver l'ID unique
285- // Pour les items sans métadonnées, utiliser la méthode classique remove/add avec gestion de sellable
286300 for ( const item of trade . fromUserItems ) {
287301 if ( item . metadata ?. _unique_id ) {
288- // Transférer directement l'item avec son unique_id préservé
289302 await this . inventoryService . transferItem ( trade . fromUserId , trade . toUserId , item . itemId , item . metadata . _unique_id ) ;
290303 }
291304 else {
292- // Pour les items sans métadonnées, vérifier s'ils sont sellable
293- const inventory = await this . inventoryService . getInventory ( trade . fromUserId ) ;
294- const inventoryItem = inventory . inventory . find ( invItem => invItem . item_id === item . itemId && ! invItem . metadata ) ;
295- const isSellable = inventoryItem ?. sellable || false ;
296- await this . inventoryService . removeItem ( trade . fromUserId , item . itemId , item . amount ) ;
297- await this . inventoryService . addItem ( trade . toUserId , item . itemId , item . amount , undefined , isSellable ) ;
305+ // Pour les items sans métadonnées, utiliser le prix d'achat spécifique si fourni
306+ if ( item . purchasePrice !== undefined ) {
307+ await this . inventoryService . removeSellableItemWithPrice ( trade . fromUserId , item . itemId , item . amount , item . purchasePrice ) ;
308+ await this . inventoryService . addItem ( trade . toUserId , item . itemId , item . amount , undefined , true , // Les items échangés restent sellable
309+ item . purchasePrice ) ;
310+ }
311+ else {
312+ // Méthode normale pour les items sans prix spécifique
313+ const inventory = await this . inventoryService . getInventory ( trade . fromUserId ) ;
314+ const inventoryItem = inventory . inventory . find ( invItem => invItem . item_id === item . itemId && ! invItem . metadata ) ;
315+ const isSellable = inventoryItem ?. sellable || false ;
316+ const purchasePrice = inventoryItem ?. purchasePrice ;
317+ await this . inventoryService . removeItem ( trade . fromUserId , item . itemId , item . amount ) ;
318+ await this . inventoryService . addItem ( trade . toUserId , item . itemId , item . amount , undefined , isSellable , purchasePrice ) ;
319+ }
298320 }
299321 }
300322 for ( const item of trade . toUserItems ) {
301323 if ( item . metadata ?. _unique_id ) {
302324 await this . inventoryService . transferItem ( trade . toUserId , trade . fromUserId , item . itemId , item . metadata . _unique_id ) ;
303325 }
304326 else {
305- // Pour les items sans métadonnées, vérifier s'ils sont sellable
306- const inventory = await this . inventoryService . getInventory ( trade . toUserId ) ;
307- const inventoryItem = inventory . inventory . find ( invItem => invItem . item_id === item . itemId && ! invItem . metadata ) ;
308- const isSellable = inventoryItem ?. sellable || false ;
309- await this . inventoryService . removeItem ( trade . toUserId , item . itemId , item . amount ) ;
310- await this . inventoryService . addItem ( trade . fromUserId , item . itemId , item . amount , undefined , isSellable ) ;
327+ // Pour les items sans métadonnées, utiliser le prix d'achat spécifique si fourni
328+ if ( item . purchasePrice !== undefined ) {
329+ await this . inventoryService . removeSellableItemWithPrice ( trade . toUserId , item . itemId , item . amount , item . purchasePrice ) ;
330+ await this . inventoryService . addItem ( trade . fromUserId , item . itemId , item . amount , undefined , true , // Les items échangés restent sellable
331+ item . purchasePrice ) ;
332+ }
333+ else {
334+ // Méthode normale pour les items sans prix spécifique
335+ const inventory = await this . inventoryService . getInventory ( trade . toUserId ) ;
336+ const inventoryItem = inventory . inventory . find ( invItem => invItem . item_id === item . itemId && ! invItem . metadata ) ;
337+ const isSellable = inventoryItem ?. sellable || false ;
338+ const purchasePrice = inventoryItem ?. purchasePrice ;
339+ await this . inventoryService . removeItem ( trade . toUserId , item . itemId , item . amount ) ;
340+ await this . inventoryService . addItem ( trade . fromUserId , item . itemId , item . amount , undefined , isSellable , purchasePrice ) ;
341+ }
311342 }
312343 }
313344 // Met à jour la trade
0 commit comments