/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { api } from '@/lib/api' import type { Redemption, ApiResponse, GetRedemptionsParams, GetRedemptionsResponse, SearchRedemptionsParams, RedemptionFormData, } from './types' // ============================================================================ // Redemption Code Management // ============================================================================ // Get paginated redemption codes list export async function getRedemptions( params: GetRedemptionsParams = {} ): Promise { const { p = 1, page_size = 10 } = params const res = await api.get(`/api/redemption/?p=${p}&page_size=${page_size}`) return res.data } // Search redemption codes by keyword export async function searchRedemptions( params: SearchRedemptionsParams ): Promise { const { keyword = '', status = '', p = 1, page_size = 10 } = params const queryParams = new URLSearchParams() queryParams.set('keyword', keyword) if (status) queryParams.set('status', status) queryParams.set('p', String(p)) queryParams.set('page_size', String(page_size)) const res = await api.get(`/api/redemption/search?${queryParams.toString()}`) return res.data } // Get single redemption code by ID export async function getRedemption( id: number ): Promise> { const res = await api.get(`/api/redemption/${id}`) return res.data } // Create redemption code(s) export async function createRedemption( data: RedemptionFormData ): Promise> { const res = await api.post('/api/redemption/', data) return res.data } // Update redemption code export async function updateRedemption( data: RedemptionFormData & { id: number } ): Promise> { const res = await api.put('/api/redemption/', data) return res.data } // Update redemption code status (enable/disable) export async function updateRedemptionStatus( id: number, status: number ): Promise> { const res = await api.put('/api/redemption/?status_only=true', { id, status }) return res.data } // Delete a single redemption code export async function deleteRedemption(id: number): Promise { const res = await api.delete(`/api/redemption/${id}/`) return res.data } // Delete invalid redemption codes (used, disabled, expired) export async function deleteInvalidRedemptions(): Promise> { const res = await api.delete('/api/redemption/invalid') return res.data }