(client, giveawayId, endedData)
| 470 | } |
| 471 | |
| 472 | export async function markGiveawayEnded(client, giveawayId, endedData) { |
| 473 | try { |
| 474 | const wrapper = client?.db; |
| 475 | if (!wrapper || typeof wrapper.get !== 'function') { |
| 476 | return false; |
| 477 | } |
| 478 | |
| 479 | if (isPostgresSqlReady(wrapper)) { |
| 480 | const { pgConfig } = await import('../config/postgres.js'); |
| 481 | |
| 482 | await wrapper.db.pool.query( |
| 483 | `UPDATE ${pgConfig.tables.giveaways} |
| 484 | SET data = $1, updated_at = NOW() |
| 485 | WHERE id = $2`, |
| 486 | [endedData, giveawayId], |
| 487 | ); |
| 488 | |
| 489 | return true; |
| 490 | } |
| 491 | |
| 492 | const guildId = endedData?.guildId; |
| 493 | if (!guildId || !endedData?.messageId) { |
| 494 | return false; |
| 495 | } |
| 496 | |
| 497 | const { saveGiveaway } = await import('./giveaways.js'); |
| 498 | return saveGiveaway(client, guildId, endedData); |
| 499 | } catch (error) { |
| 500 | logger.error('Error marking giveaway as ended:', error); |
| 501 | return false; |
| 502 | } |
| 503 | } |
| 504 | |
| 505 | export function getTicketKey(guildId, channelId) { |
| 506 | return `guild:${guildId}:ticket:${channelId}`; |
no test coverage detected