diff --git a/frontend/src/pages/StockPage.tsx b/frontend/src/pages/StockPage.tsx index 5bccca9..9b1765e 100644 --- a/frontend/src/pages/StockPage.tsx +++ b/frontend/src/pages/StockPage.tsx @@ -38,7 +38,7 @@ const StockPage: React.FC = () => { }, []); /** - * APIからタスク一覧を取得する関数 + * APIから在庫一覧を取得する関数 * 取得したタスクをstate(tasks)に設定 */ const fetchStocks = async () => { @@ -51,6 +51,19 @@ const StockPage: React.FC = () => { } }; + /** + * 在庫を削除するハンドラー + * 指定されたIDのタスクをAPIを通じて削除 + */ + const handleDeleteStock = async (stockId: number) => { + try { + await stockApi.deleteStock(stockId); + fetchStocks(); // 削除後の買うもの一覧を再取得 + } catch (error) { + console.error(`${STOCK_ERRORS.DELETE_FAILED}:`, error); + } + }; + /** * 文字列(ISO 8601形式)をyyyy/MM/ddに変換する関数 */ @@ -160,6 +173,32 @@ const StockPage: React.FC = () => { )} + + {/* タスク削除ダイアログ */} + + 食材の削除 + + {selectedRow && ( + <> + この操作は取り消せません。本当に削除しますか? + ⚠️ 注意: 削除すると復元できません。 + + {/* */} + + + )} + + + + ); }; @@ -178,20 +217,7 @@ const StockPage: React.FC = () => { {/* タスク削除ボタン */} - - 食材の削除 - - この操作は取り消せません。本当に削除しますか? - ⚠️ 注意: 削除すると復元できません。 - - - - + {/* 在庫一覧リスト */} {/* 乳製品 */} diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 1477b83..a2a6967 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -140,7 +140,7 @@ export const toBuyApi = { const response = await fetch(`${API_BASE_URL}/api/tobuy/delete`, { method: 'DELETE', headers: getHeaders(), - body: JSON.stringify({tobuyId}), + body: JSON.stringify({ tobuyId }), }); if (!response.ok) { @@ -157,13 +157,13 @@ export const toBuyApi = { /** * 買うものリストの在庫登録(購入処理) */ - buy: async (req: {tobuyId: number, price: number, expDate: string, buyDate: string, lastUpdate: string}): Promise<{ result: boolean }> => { - + buy: async (req: { tobuyId: number, price: number, expDate: string, buyDate: string, lastUpdate: string }): Promise<{ result: boolean }> => { + console.log('req: ', req) req.buyDate = makeDateObject(req.buyDate)?.toISOString()?.substring(0, 10) || '' req.expDate = makeDateObject(req.expDate)?.toISOString()?.substring(0, 10) || '' - + const response = await fetch(`${API_BASE_URL}/api/tobuy/buy`, { method: 'POST', headers: getHeaders(), @@ -245,16 +245,87 @@ export const stockApi = { return response.json(); }, + + /** + * 在庫リストの編集 + */ + updateStock: async (req: {stockId: number, amount: number, price: number, lastUpdate: string, buyDate: string, expDate: string}): Promise<{ result: boolean; message: string }> => { + + + + const response = await fetch(`${API_BASE_URL}/api/stocks/update`, { + method: 'PUT', + headers: getHeaders(), + body: JSON.stringify(req), + }); + + if (!response.ok) { + throw new Error(STOCK_ERRORS.UPDATE_FAILED); + } + + return response.json() + + // return { + // "result": true + // } + }, + + /** + * 在庫リストの削除 + * @param id 削除対象の食材のID + */ + deleteStock: async (stockId: number): Promise<{ result: boolean; message: string }> => { + const response = await fetch(`${API_BASE_URL}/api/stocks/delete`, { + method: 'DELETE', + headers: getHeaders(), + body: JSON.stringify({ stockId }), + }); + + console.log("API レスポンスステータス:", response.status); + console.log("API レスポンス本文:", await response.text()); + + if (!response.ok) { + throw new Error(STOCK_ERRORS.DELETE_FAILED); + } + + return response.json() + + // return { + // "result": true + // } + }, + } +const deleteStock = async (stockId: number): Promise<{ result: boolean; message: string }> => { + console.log("API の deleteStock メソッドが呼ばれました。stockId:", stockId); + + const response = await fetch(`${API_BASE_URL}/api/stocks/delete`, { + method: "DELETE", + headers: getHeaders(), + body: JSON.stringify({ stockId }), + }); + + console.log("API レスポンスステータス:", response.status); + console.log("API レスポンス本文:", await response.text()); + + if (!response.ok) { + return { result: false, message: "削除に失敗しました。" }; + } + + // API のレスポンスから result と message を取得 + const data = await response.json(); + return { result: data.result, message: data.message }; +}; + function makeDateObject(dateStr: String) { - // 例: '2025/06/15' または '2025-06-15' を '2025-06-15' に変換 - const parts = dateStr.split(/[-\/]/); // ハイフンかスラッシュで分割 - if (parts.length === 3) { - return new Date(parts[0] + '-' + parts[1] + '-' + parts[2]); - } - return null; // 無効な日付の場合 + // 例: '2025/06/15' または '2025-06-15' を '2025-06-15' に変換 + const parts = dateStr.split(/[-\/]/); // ハイフンかスラッシュで分割 + if (parts.length === 3) { + return new Date(parts[0] + '-' + parts[1] + '-' + parts[2]); + } + return null; // 無効な日付の場合 }