diff --git a/main.py b/main.py index d4e5113..c588cb9 100644 --- a/main.py +++ b/main.py @@ -686,17 +686,43 @@ async def import_programs( async def update_program(program_sn: str, program: ProgramUpdate): with get_db(write=True) as conn: cursor = conn.cursor() - cursor.execute('SELECT sn FROM programs WHERE sn = ?', (program_sn,)) - if not cursor.fetchone(): - raise HTTPException(status_code=404, detail='节目不存在') + # 获取当前节目的信息(特别是原 batch_id 和 order_num) cursor.execute( - 'UPDATE programs SET name = ?, unit = ?, performer = ?, category = ?, batch_id = ? WHERE sn = ?', + 'SELECT batch_id, order_num FROM programs WHERE sn = ?', (program_sn,) + ) + old = cursor.fetchone() + if not old: + raise HTTPException(status_code=404, detail='节目不存在') + + new_batch_id = program.batch_id + + # 如果批次发生了变更 + if old['batch_id'] != new_batch_id: + # 获取目标批次的最大 order_num + cursor.execute( + 'SELECT COALESCE(MAX(order_num), 0) FROM programs WHERE batch_id = ?', + (new_batch_id,), + ) + max_order = cursor.fetchone()[0] + new_order_num = max_order + 1 # 新节目放到末尾 + else: + # 批次未变,保留原 order_num + new_order_num = old['order_num'] + + # 更新节目信息,包括 batch_id 和 order_num + cursor.execute( + """ + UPDATE programs + SET name = ?, unit = ?, performer = ?, category = ?, batch_id = ?, order_num = ? + WHERE sn = ? + """, ( program.name, program.unit, program.performer, program.category, - program.batch_id, + new_batch_id, + new_order_num, program_sn, ), )