From cd9fb924d535f9b9c907584233f80d031c674ec3 Mon Sep 17 00:00:00 2001 From: gch3n Date: Sun, 24 May 2026 16:32:15 +0800 Subject: [PATCH] feat: add map-password API with DB model and admin endpoint --- origet/ test_output_202605240119.json | 1252 +++++++++++++++++++ origet/__pycache__/api_spec.cpython-313.pyc | Bin 0 -> 8694 bytes origet/__pycache__/client.cpython-312.pyc | Bin 0 -> 12114 bytes origet/__pycache__/client.cpython-313.pyc | Bin 0 -> 12244 bytes origet/__pycache__/decrypt.cpython-313.pyc | Bin 0 -> 3311 bytes prisma/schema.prisma | 28 + src/index.ts | 58 +- 7 files changed, 1335 insertions(+), 3 deletions(-) create mode 100644 origet/ test_output_202605240119.json create mode 100644 origet/__pycache__/api_spec.cpython-313.pyc create mode 100644 origet/__pycache__/client.cpython-312.pyc create mode 100644 origet/__pycache__/client.cpython-313.pyc create mode 100644 origet/__pycache__/decrypt.cpython-313.pyc diff --git a/origet/ test_output_202605240119.json b/origet/ test_output_202605240119.json new file mode 100644 index 0000000..a14ced4 --- /dev/null +++ b/origet/ test_output_202605240119.json @@ -0,0 +1,1252 @@ +{ + "weapon-categories": { + "ok": true, + "data": { + "success": true, + "data": [ + { + "category": "突击步枪", + "scheme_count": 887 + }, + { + "category": "冲锋枪", + "scheme_count": 353 + }, + { + "category": "射手步枪", + "scheme_count": 260 + }, + { + "category": "轻机枪", + "scheme_count": 179 + }, + { + "category": "狙击步枪", + "scheme_count": 65 + }, + { + "category": "霰弹枪", + "scheme_count": 54 + }, + { + "category": "手枪", + "scheme_count": 25 + }, + { + "category": "特殊武器", + "scheme_count": 5 + } + ] + }, + "error": null + }, + "weapons?category=AR": { + "ok": true, + "data": { + "success": true, + "data": [] + }, + "error": null + }, + "weapons (all)": { + "ok": true, + "data": { + "success": true, + "data": [ + { + "id": 57, + "weapon_name": "m14", + "display_name": "M14射手步枪", + "category": "射手步枪", + "use_count": 144 + }, + { + "id": 1, + "weapon_name": "M7", + "display_name": "M7战斗步枪", + "category": "突击步枪", + "use_count": 143 + }, + { + "id": 4, + "weapon_name": "K416", + "display_name": "K416突击步枪", + "category": "突击步枪", + "use_count": 91 + }, + { + "id": 6, + "weapon_name": "ASVal", + "display_name": "AS Val突击步枪", + "category": "突击步枪", + "use_count": 78 + }, + { + "id": 51, + "weapon_name": "pkm", + "display_name": "PKM通用机枪", + "category": "轻机枪", + "use_count": 63 + }, + { + "id": 7, + "weapon_name": "M4A1", + "display_name": "M4A1突击步枪", + "category": "突击步枪", + "use_count": 58 + }, + { + "id": 42, + "weapon_name": "mp7", + "display_name": "MP7冲锋枪", + "category": "冲锋枪", + "use_count": 56 + }, + { + "id": 46, + "weapon_name": "sr3m", + "display_name": "SR-3M紧凑突击步枪", + "category": "冲锋枪", + "use_count": 56 + }, + { + "id": 52, + "weapon_name": "qjb201", + "display_name": "QJB201轻机枪", + "category": "轻机枪", + "use_count": 51 + }, + { + "id": 5, + "weapon_name": "KC17", + "display_name": "KC17突击步枪", + "category": "突击步枪", + "use_count": 50 + }, + { + "id": 78, + "weapon_name": "mk17", + "display_name": "MK47突击步枪", + "category": "突击步枪", + "use_count": 49 + }, + { + "id": 2, + "weapon_name": "K437", + "display_name": "K437突击步枪", + "category": "突击步枪", + "use_count": 48 + }, + { + "id": 45, + "weapon_name": "smg", + "display_name": "SMG-45冲锋枪", + "category": "冲锋枪", + "use_count": 48 + }, + { + "id": 12, + "weapon_name": "TL", + "display_name": "腾龙突击步枪", + "category": "突击步枪", + "use_count": 48 + }, + { + "id": 10, + "weapon_name": "SCAR-H", + "display_name": "SCAR-H战斗步枪", + "category": "突击步枪", + "use_count": 46 + }, + { + "id": 43, + "weapon_name": "p90", + "display_name": "P90冲锋枪", + "category": "冲锋枪", + "use_count": 37 + }, + { + "id": 14, + "weapon_name": "G3", + "display_name": "G3战斗步枪", + "category": "突击步枪", + "use_count": 36 + }, + { + "id": 8, + "weapon_name": "AUG", + "display_name": "AUG突击步枪", + "category": "突击步枪", + "use_count": 34 + }, + { + "id": 49, + "weapon_name": "m249", + "display_name": "M249轻机枪", + "category": "轻机枪", + "use_count": 34 + }, + { + "id": 11, + "weapon_name": "AKM", + "display_name": "AKM突击步枪", + "category": "突击步枪", + "use_count": 33 + }, + { + "id": 50, + "weapon_name": "m250", + "display_name": "M250通用机枪", + "category": "轻机枪", + "use_count": 31 + }, + { + "id": 44, + "weapon_name": "qcq171", + "display_name": "QCQ171冲锋枪", + "category": "冲锋枪", + "use_count": 31 + }, + { + "id": 3, + "weapon_name": "ASH-12", + "display_name": "ASh-12战斗步枪", + "category": "突击步枪", + "use_count": 30 + }, + { + "id": 41, + "weapon_name": "mp5", + "display_name": "MP5冲锋枪", + "category": "冲锋枪", + "use_count": 27 + }, + { + "id": 21, + "weapon_name": "ys", + "display_name": "勇士冲锋枪", + "category": "冲锋枪", + "use_count": 27 + }, + { + "id": 9, + "weapon_name": "AK-12", + "display_name": "AK-12突击步枪", + "category": "突击步枪", + "use_count": 26 + }, + { + "id": 53, + "weapon_name": "awm", + "display_name": "AWM狙击步枪", + "category": "狙击步枪", + "use_count": 25 + }, + { + "id": 16, + "weapon_name": "PTR-32", + "display_name": "PTR-32突击步枪", + "category": "突击步枪", + "use_count": 23 + }, + { + "id": 54, + "weapon_name": "m700", + "display_name": "M700狙击步枪", + "category": "狙击步枪", + "use_count": 22 + }, + { + "id": 79, + "weapon_name": "mk4", + "display_name": "MK4冲锋枪", + "category": "冲锋枪", + "use_count": 21 + }, + { + "id": 68, + "weapon_name": "s12k", + "display_name": "S12K霰弹枪", + "category": "霰弹枪", + "use_count": 21 + }, + { + "id": 62, + "weapon_name": "sr25", + "display_name": "SR-25射手步枪", + "category": "射手步枪", + "use_count": 21 + }, + { + "id": 48, + "weapon_name": "vkt", + "display_name": "Vector冲锋枪", + "category": "冲锋枪", + "use_count": 20 + }, + { + "id": 63, + "weapon_name": "svd", + "display_name": "SVD狙击步枪", + "category": "射手步枪", + "use_count": 19 + }, + { + "id": 82, + "weapon_name": "ar57", + "display_name": "AR57突击步枪", + "category": "突击步枪", + "use_count": 18 + }, + { + "id": 15, + "weapon_name": "QBZ95-1", + "display_name": "QBZ95-1突击步枪", + "category": "突击步枪", + "use_count": 18 + }, + { + "id": 13, + "weapon_name": "SG552", + "display_name": "SG552突击步枪", + "category": "突击步枪", + "use_count": 17 + }, + { + "id": 64, + "weapon_name": "vss", + "display_name": "VSS射手步枪", + "category": "射手步枪", + "use_count": 16 + }, + { + "id": 20, + "weapon_name": "yn", + "display_name": "野牛冲锋枪", + "category": "冲锋枪", + "use_count": 16 + }, + { + "id": 17, + "weapon_name": "CAR-15", + "display_name": "CAR-15突击步枪", + "category": "突击步枪", + "use_count": 15 + }, + { + "id": 59, + "weapon_name": "psg1", + "display_name": "PSG-1射手步枪", + "category": "射手步枪", + "use_count": 15 + }, + { + "id": 60, + "weapon_name": "sks", + "display_name": "SKS射手步枪", + "category": "射手步枪", + "use_count": 15 + }, + { + "id": 18, + "weapon_name": "M16A4", + "display_name": "M16A4突击步枪", + "category": "突击步枪", + "use_count": 14 + }, + { + "id": 47, + "weapon_name": "uzi", + "display_name": "UZI冲锋枪", + "category": "冲锋枪", + "use_count": 14 + }, + { + "id": 72, + "weapon_name": "g18", + "display_name": "G18", + "category": "手枪", + "use_count": 13 + }, + { + "id": 67, + "weapon_name": "m1014", + "display_name": "M1014霰弹枪", + "category": "霰弹枪", + "use_count": 13 + }, + { + "id": 77, + "weapon_name": "marlin", + "display_name": "Marlin杠杆步枪", + "category": "射手步枪", + "use_count": 13 + }, + { + "id": 58, + "weapon_name": "mini", + "display_name": "Mini-14射手步枪", + "category": "射手步枪", + "use_count": 11 + }, + { + "id": 65, + "weapon_name": "725", + "display_name": "725双管霰弹枪", + "category": "霰弹枪", + "use_count": 10 + }, + { + "id": 69, + "weapon_name": "93r", + "display_name": "93R", + "category": "手枪", + "use_count": 9 + }, + { + "id": 55, + "weapon_name": "r93", + "display_name": "R93狙击步枪", + "category": "狙击步枪", + "use_count": 9 + }, + { + "id": 56, + "weapon_name": "sv98", + "display_name": "SV-98狙击步枪", + "category": "狙击步枪", + "use_count": 9 + }, + { + "id": 80, + "weapon_name": "mcxlt", + "display_name": "MCX LT突击步枪", + "category": "突击步枪", + "use_count": 8 + }, + { + "id": 81, + "weapon_name": "fs12", + "display_name": "FS-12霰弹枪", + "category": "霰弹枪", + "use_count": 6 + }, + { + "id": 61, + "weapon_name": "sr9", + "display_name": "SR9射手步枪", + "category": "射手步枪", + "use_count": 6 + }, + { + "id": 76, + "weapon_name": "fhg", + "display_name": "复合弓", + "category": "特殊武器", + "use_count": 5 + }, + { + "id": 19, + "weapon_name": "AKS-7U", + "display_name": "AKS-7U突击步枪", + "category": "突击步枪", + "use_count": 4 + }, + { + "id": 66, + "weapon_name": "m870", + "display_name": "M870霰弹枪", + "category": "霰弹枪", + "use_count": 4 + }, + { + "id": 70, + "weapon_name": "357zl", + "display_name": ".357左轮", + "category": "手枪", + "use_count": 1 + }, + { + "id": 74, + "weapon_name": "qsz92g", + "display_name": "QSZ92G", + "category": "手枪", + "use_count": 1 + }, + { + "id": 75, + "weapon_name": "smzy", + "display_name": "沙漠之鹰", + "category": "手枪", + "use_count": 1 + }, + { + "id": 71, + "weapon_name": "g17", + "display_name": "G17", + "category": "手枪", + "use_count": 0 + }, + { + "id": 73, + "weapon_name": "m1911", + "display_name": "M1911", + "category": "手枪", + "use_count": 0 + }, + { + "id": 83, + "weapon_name": "M80", + "display_name": "M82狙击步枪", + "category": "狙击步枪", + "use_count": 0 + } + ] + }, + "error": null + }, + "schemes?sort=hot&page=1&limit=12": { + "ok": true, + "data": { + "success": true, + "data": [ + { + "id": 1237, + "user_id": 1006, + "description": "M7满改方案", + "scheme_content": "M7战斗步枪-烽火地带-6I17GK0059L1ICRB4NQP4", + "category": "突击步枪", + "weapon_name": "M7战斗步枪", + "price": "97W", + "tags": [], + "likes": null, + "uses": 10299, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-20T16:00:00.000Z", + "updated_at": "2026-05-23T17:09:11.000Z", + "source": 1, + "total_historical_uses": 10298, + "username": "揽贝电竞-迟到了", + "avatar": "https://q6.itc.cn/q_70/images03/20240624/e21208063d4347fb87f4af311043bc61.jpeg", + "partner_type": "club", + "partner_level": "bronze", + "partner_badge": "揽贝电竞", + "partner_logo": "https://tuku.maqt.top/i/2026/03/22/sxih6d.png", + "social_link": null + }, + { + "id": 1087, + "user_id": 34, + "description": "59W满改AS Val", + "scheme_content": "AS Val突击步枪-烽火地带-6GCI31407ODLT6ETQT3GS", + "category": "突击步枪", + "weapon_name": "AS Val突击步枪", + "price": "57W", + "tags": [], + "likes": null, + "uses": 6768, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:49:30.000Z", + "source": 2, + "total_historical_uses": 6768, + "username": "捡破烂的鼠鼠", + "avatar": "https://tuku.maqt.top/i/2026/03/22/su35cy.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 1234, + "user_id": 999, + "description": "老鼠最爱", + "scheme_content": "AUG突击步枪-烽火地带-6HM4TOS0FSNK3AL67MM2Q", + "category": "突击步枪", + "weapon_name": "AUG突击步枪", + "price": "30W", + "tags": [], + "likes": null, + "uses": 6647, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-20T16:00:00.000Z", + "updated_at": "2026-05-23T15:44:11.000Z", + "source": 1, + "total_historical_uses": 6647, + "username": "揽贝电竞-汉", + "avatar": "https://q6.itc.cn/q_70/images03/20240624/e21208063d4347fb87f4af311043bc61.jpeg", + "partner_type": "club", + "partner_level": "gold", + "partner_badge": "揽贝电竞", + "partner_logo": "https://tuku.maqt.top/i/2026/03/22/sxih6d.png", + "social_link": null + }, + { + "id": 1150, + "user_id": 36, + "description": "27W性价比M14", + "scheme_content": "M14射手步枪-烽火地带-6GQ0VK00FIAS4OUQQ081T", + "category": "射手步枪", + "weapon_name": "M14射手步枪", + "price": "36W", + "tags": [], + "likes": null, + "uses": 5928, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:08:40.000Z", + "source": 2, + "total_historical_uses": 5927, + "username": "威风的虫", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sv3fg9.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 1133, + "user_id": 36, + "description": "28W性价比KC17", + "scheme_content": "KC17突击步枪-烽火地带-6GUF9TC0FIAS4OUQQ081T", + "category": "突击步枪", + "weapon_name": "KC17突击步枪", + "price": "39W", + "tags": [], + "likes": null, + "uses": 5539, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T17:01:09.000Z", + "source": 2, + "total_historical_uses": 5539, + "username": "威风的虫", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sv3fg9.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 3375, + "user_id": 2661, + "description": "37w半改巨好用以小博大", + "scheme_content": "MK47突击步枪-烽火地带-6J435M000S7DJO512U7FE", + "category": "突击步枪", + "weapon_name": "MK47突击步枪", + "price": "37W", + "tags": [], + "likes": null, + "uses": 4192, + "status": null, + "comments": null, + "shares": null, + "created_at": "2026-03-08T04:32:18.000Z", + "updated_at": "2026-05-23T17:16:02.000Z", + "source": null, + "total_historical_uses": 4192, + "username": "3272602682", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sv3fg9.png", + "partner_type": null, + "partner_level": null, + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 893, + "user_id": 865, + "description": "M7性价比", + "scheme_content": "M7战斗步枪-烽火地带-6HTPDTG0A6PIA75LU5T70", + "category": "突击步枪", + "weapon_name": "M7战斗步枪", + "price": "30W", + "tags": [], + "likes": null, + "uses": 3825, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:56:03.000Z", + "source": 1, + "total_historical_uses": 3825, + "username": "柏辰惜", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sv0h1u.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 1067, + "user_id": 18, + "description": "43W性价比K416", + "scheme_content": "K416突击步枪-烽火地带-6FNMH1S07FGCB0BL90FLR", + "category": "突击步枪", + "weapon_name": "K416突击步枪", + "price": "54W", + "tags": [], + "likes": null, + "uses": 3607, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:17:23.000Z", + "source": 2, + "total_historical_uses": 3607, + "username": "猛攻鼠鼠", + "avatar": "https://tuku.maqt.top/i/2026/03/22/suikyd.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 1110, + "user_id": 19, + "description": "18W性价比腾龙", + "scheme_content": "腾龙突击步枪-烽火地带-6H5C4SC0FUH1E5MQ63E4O", + "category": "突击步枪", + "weapon_name": "腾龙突击步枪", + "price": "21W", + "tags": [], + "likes": null, + "uses": 3603, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T15:37:42.000Z", + "source": 2, + "total_historical_uses": 3603, + "username": "大坝皇帝", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sufdeq.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 909, + "user_id": 51, + "description": "半改41640内稳压", + "scheme_content": "K416突击步枪-烽火地带-6HR7CTS09ON8JGRV06LJB", + "category": "突击步枪", + "weapon_name": "K416突击步枪", + "price": "32W", + "tags": [], + "likes": null, + "uses": 3599, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T15:59:07.000Z", + "source": 1, + "total_historical_uses": 3599, + "username": "Li", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sunvy9.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 2145, + "user_id": 1179, + "description": "28w机密得吃巨浪!", + "scheme_content": "AS Val突击步枪-烽火地带-6HHKBJS08C6MCDLP0IF72", + "category": "突击步枪", + "weapon_name": "AS Val突击步枪", + "price": "28W", + "tags": [], + "likes": null, + "uses": 3486, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-12-02T16:00:00.000Z", + "updated_at": "2026-05-23T15:23:04.000Z", + "source": 3, + "total_historical_uses": 3486, + "username": "何必在忆", + "avatar": "https://q6.itc.cn/q_70/images03/20240624/e21208063d4347fb87f4af311043bc61.jpeg", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 933, + "user_id": 17, + "description": "48W满改ASh-12", + "scheme_content": "ASh-12战斗步枪-烽火地带-6HR3IAG01PILQNO8CBO2G", + "category": "突击步枪", + "weapon_name": "ASh-12战斗步枪", + "price": "43W", + "tags": [], + "likes": null, + "uses": 3388, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:12:54.000Z", + "source": 2, + "total_historical_uses": 3388, + "username": "不知名用户", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sufdeq.png", + "partner_type": null, + "partner_level": null, + "partner_badge": null, + "partner_logo": null, + "social_link": null + } + ], + "pagination": { + "page": 1, + "limit": 12, + "hasMore": true + } + }, + "error": null + }, + "schemes_aob": { + "ok": true, + "data": { + "success": true, + "data": [ + { + "id": 171, + "user_id": 19, + "description": "战场AS Val-突击兵用", + "scheme_content": "AS Val突击步枪-全面战场-6H8BMQG00HC1FJHVLCQK3", + "category": "突击步枪", + "weapon_name": "AS Val突击步枪", + "tags": [], + "likes": null, + "uses": 2909, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:07:05.000Z", + "source": 2, + "total_historical_uses": 2909, + "username": "大坝皇帝", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sufdeq.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 163, + "user_id": 18, + "description": "战场M7-突击兵用", + "scheme_content": "M7战斗步枪-全面战场-6H8BMGG00HC1FJHVLCQK3", + "category": "突击步枪", + "weapon_name": "M7战斗步枪", + "tags": [], + "likes": null, + "uses": 1941, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:10:45.000Z", + "source": 2, + "total_historical_uses": 1941, + "username": "猛攻鼠鼠", + "avatar": "https://tuku.maqt.top/i/2026/03/22/suikyd.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 221, + "user_id": 604, + "description": "大战场SR-25开镜快", + "scheme_content": "SR-25射手步枪-全面战场-6I30VK805D4ELBTTOKUN8", + "category": "射手步枪", + "weapon_name": "SR-25射手步枪", + "tags": [], + "likes": null, + "uses": 1198, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:12:56.000Z", + "source": 1, + "total_historical_uses": 1198, + "username": "浅梦qqq", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sufdeq.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 220, + "user_id": 19, + "description": "蜂医K416无后座", + "scheme_content": "K416突击步枪-全面战场-6G6E3VK00ES0HEAQBTB8O", + "category": "突击步枪", + "weapon_name": "K416突击步枪", + "tags": [], + "likes": null, + "uses": 1064, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:55:50.000Z", + "source": 2, + "total_historical_uses": 1064, + "username": "大坝皇帝", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sufdeq.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 218, + "user_id": 18, + "description": "版本强势武器SR-3M", + "scheme_content": "SR-3M紧凑突击步枪-全面战场-6F39EN80A7UO62K4HI8TR", + "category": "冲锋枪", + "weapon_name": "SR-3M紧凑突击步枪", + "tags": [], + "likes": null, + "uses": 885, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T16:27:18.000Z", + "source": 2, + "total_historical_uses": 885, + "username": "猛攻鼠鼠", + "avatar": "https://tuku.maqt.top/i/2026/03/22/suikyd.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 196, + "user_id": 38, + "description": "战场射速腾龙", + "scheme_content": "腾龙突击步枪-全面战场-6GV7PF002N6I0QIIIAFK2", + "category": "突击步枪", + "weapon_name": "腾龙突击步枪", + "tags": [], + "likes": null, + "uses": 879, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T11:53:29.000Z", + "source": 2, + "total_historical_uses": 879, + "username": "麦小雯", + "avatar": "https://tuku.maqt.top/i/2026/03/22/suikyd.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 158, + "user_id": 34, + "description": "战场腰射型MP7", + "scheme_content": "MP7冲锋枪-全面战场-6HF2FJC0BNVH9DOH2R78E", + "category": "冲锋枪", + "weapon_name": "MP7冲锋枪", + "tags": [], + "likes": null, + "uses": 847, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T09:00:30.000Z", + "source": 2, + "total_historical_uses": 847, + "username": "捡破烂的鼠鼠", + "avatar": "https://tuku.maqt.top/i/2026/03/22/su35cy.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 183, + "user_id": 36, + "description": "战场KC17", + "scheme_content": "KC17突击步枪-全面战场-6H37AA002N6I0QIIIAFK2", + "category": "突击步枪", + "weapon_name": "KC17突击步枪", + "tags": [], + "likes": null, + "uses": 564, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T04:55:52.000Z", + "source": 2, + "total_historical_uses": 564, + "username": "威风的虫", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sv3fg9.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 120, + "user_id": 17, + "description": "战场M4A1-突击兵用", + "scheme_content": "M4A1突击步枪-全面战场-6HGK47G0E3GG6TI3ID6B6", + "category": "突击步枪", + "weapon_name": "M4A1突击步枪", + "tags": [], + "likes": null, + "uses": 545, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T02:09:35.000Z", + "source": 2, + "total_historical_uses": 545, + "username": "不知名用户", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sufdeq.png", + "partner_type": null, + "partner_level": null, + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 139, + "user_id": 19, + "description": "战场大弹匣AUG", + "scheme_content": "AUG突击步枪-全面战场-6HCDMN80CQ1R6AUL0MHND", + "category": "突击步枪", + "weapon_name": "AUG突击步枪", + "tags": [], + "likes": null, + "uses": 520, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T14:32:35.000Z", + "source": 2, + "total_historical_uses": 520, + "username": "大坝皇帝", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sufdeq.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 172, + "user_id": 17, + "description": "战场M7-突击和工程兵可用", + "scheme_content": "M7战斗步枪-全面战场-6HE333O0CQ1R6AUL0MHND", + "category": "突击步枪", + "weapon_name": "M7战斗步枪", + "tags": [], + "likes": null, + "uses": 502, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T12:32:14.000Z", + "source": 2, + "total_historical_uses": 502, + "username": "不知名用户", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sufdeq.png", + "partner_type": null, + "partner_level": null, + "partner_badge": null, + "partner_logo": null, + "social_link": null + }, + { + "id": 144, + "user_id": 38, + "description": "战场R93-侦察兵用", + "scheme_content": "R93狙击步枪-全面战场-6GQ6JM40EKCRG16BBHEI9", + "category": "狙击步枪", + "weapon_name": "R93狙击步枪", + "tags": [], + "likes": null, + "uses": 501, + "status": "normal", + "comments": null, + "shares": null, + "created_at": "2025-11-13T16:00:00.000Z", + "updated_at": "2026-05-23T05:10:48.000Z", + "source": 2, + "total_historical_uses": 501, + "username": "麦小雯", + "avatar": "https://tuku.maqt.top/i/2026/03/22/suikyd.png", + "partner_type": "none", + "partner_level": "none", + "partner_badge": null, + "partner_logo": null, + "social_link": null + } + ], + "pagination": { + "page": 1, + "limit": 12, + "hasMore": true + } + }, + "error": null + }, + "adverts": { + "ok": true, + "data": { + "success": true, + "data": [ + { + "id": "ad_9", + "title": "为您的猛攻之路保驾护航", + "author": "Stevenma", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sw9b3o.jpg", + "category": "advert", + "shareTime": "2025-09-29T16:00:00.000Z", + "likes": 61, + "views": 211, + "description": "码枪堂软件版", + "link_url": "https://pro.maqt.top/", + "price": 0, + "isAdvert": true, + "image_url": "https://tuku.maqt.top/i/2026/03/22/svtsmd.png", + "click_count": 17969, + "isVip": true + } + ] + }, + "error": null + }, + "login": { + "ok": true, + "data": { + "success": true, + "message": "登录成功", + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NDc5MTcsInVzZXJuYW1lIjoic2l4dGVlbnRoIiwidG9rZW5WZXJzaW9uIjoxMiwiaWF0IjoxNzc5NTU2NzU3LCJleHAiOjIwOTUxMzI3NTd9.pMVjKHxHMg7E-NQo8NbovMQcmEURJ-ooAvkekxPqvOc", + "user": { + "id": 47917, + "username": "sixteenth", + "avatar": "https://tuku.maqt.top/i/2026/03/22/sv3fg9.png", + "email": "sixteenth@126.com", + "status": "active", + "isVip": 1, + "vipExpireAt": "2036-05-04T14:47:24.000Z", + "freezeUntil": null + } + }, + "error": null + }, + "session-status": { + "ok": true, + "data": { + "success": true, + "loggedIn": true, + "user": { + "id": 47917, + "username": "sixteenth", + "status": "active", + "isVip": true, + "vipExpireAt": "2036-05-04T14:47:24.000Z", + "freezeUntil": null + } + }, + "error": null + }, + "vip-status": { + "ok": true, + "data": { + "success": true, + "isVip": 1, + "vipExpireAt": "2036-05-04T14:47:24.000Z", + "daysRemaining": 3634 + }, + "error": null + }, + "favorites": { + "ok": false, + "data": null, + "error": "401 Client Error: Unauthorized for url: https://maqt.top/api/favorites?sort=hot&page=1&limit=12" + }, + "favorites/count": { + "ok": true, + "data": { + "success": true, + "count": 0 + }, + "error": null + }, + "user/stats/47917": { + "ok": true, + "data": { + "success": true, + "data": { + "sharedCount": 0, + "totalUsage": "0", + "filterShareCount": 0, + "filterShareCopyCount": 0, + "filterShareLikeCount": 0, + "coins": 0 + } + }, + "error": null + }, + "activity/ping": { + "ok": false, + "data": null, + "error": "404 Client Error: Not Found for url: https://maqt.top/api/activity/ping" + } +} \ No newline at end of file diff --git a/origet/__pycache__/api_spec.cpython-313.pyc b/origet/__pycache__/api_spec.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9bd3befa2983c5ac5dcb15ce931c928ec6955164 GIT binary patch literal 8694 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 literal 0 HcmV?d00001 diff --git a/origet/__pycache__/decrypt.cpython-313.pyc b/origet/__pycache__/decrypt.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b233c57608644a0e0149fb30ff618b02cf7706b5 GIT binary patch literal 3311 zcma)8|8o<^72ngHbkfPPWc&@gm|he@5wUDyAOW?Iacl^-83Y2H?c3e=R`1K_-HOA(AsDuY75zVE5&8#N7{gj*R%R%Kt|9?pBv68>i^7ynP1ppK z?xH&x%M@dqyODck!1gGyUghUyUx4XJ3JF9RN zkAhWhRMK4?toD1?S}pKGg|KNqg=>SG-AJem*7|pEaHh(5eL31~GI-GcjMF=cs>J6I z3Od0@wZ>gsPwWLv{+IvT8p!K~YN1A`-A^0md34G|{ydwLH{k}ilsUI}^Ow2I`+Vym z!P~O;WpCSSZTzDzKFv*in4A7A_mgRk%Z+8oYU;z~k3aMA1LE7NHzLJU(R(tE!;-gU zSIZu+B89P}dQVHk-rX(S;&0C_O@8F#yAJ(;_a5YhBdtU=VRyH9PYkOPvBtw;A|i%~ z(Fmv*PN+MggN=MdR7DTBOny_hhtlX)c~~ch1R&<5oDd@;&;K7U`L{W#p7ie19FnXn zmm;C~iGIxjZ%tx3Tudq5brzUu_+RPPQ@d9elF3h`>qY?5!wfRRtupn@^QNcHn|c{T zrJq<{H{7V#C^fX^q+Xa$9}Pgc?WbkB*I~#5wBKp)t29tbw>A1)tNRAG*HqwSrgxJe z+qh5z%!Y-^7(OxRHsmoU&x0pX8o-)l$GE>pmlQ=#AW-y76M$6JW8VflZf@IdLZyaqu6oPEU zB$^sq%vp^)5sQaUhm`1uq%r+UT-MC7xEN713!I2YB##*bl%j$;JGp8JM-zP#)@(%; zQbZvtc`~$Z?Y`jgI6kc;#IO_`cw51P!8nedlGI@FcvE5+llbUU1u%*NQwlvPN1SuK z;X*_DOr~e9c4yZ1V(PU8yKDTwg#!}}nZdcbrmVd=)xO|xjUOL7e&zU$@U7VO*d(5F zw4@F%xT@19ugRC?Oi#9E=a+3$-FLdPuJ5Kg7VOS(-@k!Hn`l8DQI0&7c(6pmg}?Z8|`0pwr1OD@6?C?in>)Ax}G&gm@`T%c57+u$}N z5}hQdn*03y#hW(@DU_T3O%b0)uNOl8c;=_M^yj(J>$yv}7Bka@Y|w0_jOy{2G#Xr~ zyUs)5Z-GXIJdDSrrD%2)4~L3w#@_}B`B$EYDTN-g&hzh`doSIUW%*3|pV=J?&YJX4 z*2&LW`FVR~>L{)!D%gZLOyd8PH%b80qXUfIFHt8YQ~cTz-w+G{ZfJoK%=>A-4fL-Y zg2nKlYzk1&eM-F&V4(yV{<3w~UxR*F1D5}_E7+T8$d0n42-l1KYVqpb#f!gwJTtm< zW%8S^FXeu5F*o{$#TyrMW4D)nHT8JrLJ=pPg*NM8#(jpv1R|jixgd!`Sd=62fshUz zhat15Mvd|TEt6y=iKURJgriZ7Q>285MKz8U9c`A0i!q4^X=~8UdOS34ATk}02ts(u zHAfq1i18-BZUei?KKW+S%#q|k0>A}w8o)&dDoijR>uL!cXqCmg0W}(HdQ*%<05LK7 zj?ma*CE!Z3q5m9pAIw&~n(CadYsmP&IClHkr*GXInLhi~+3YK? z&)JX6GDiwkXbpu1;HQK_;A8F$_-tv5MI~8XCbbSCCLx}ZMpiq}0X+bRm-XnH@C$HC zvqa?xT=8tt*ia}E4~Ie;+b1f0vFM3HBrNK1f_RodRw-U>IZ(DKjH!4hEbbuPCk2GFes3TiNyemu_;uJK?ojeDsu$;Y~8Lb_tHIX-yF9u%lT4l z-eRX-n%I*^Kr-!52+40@sH%x=c?2Z0=LsSCatGBxrF-&-(22+so#uJOl#PyL>AD>A z+~2L6J}OJK&fClMwk3`pn6>k%_WO)&v@@+<8@fD{v1e-=XKTE(T+?5e=6TkBe(2m# z+J2ASGRJPYU$J?j>XU|1%YCb3G&0^l)<01*DgCZ>uKeI%t*_?I$l8#1BBoyV$bSHu CtP7t2 literal 0 HcmV?d00001 diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 8990871..efbf89d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -280,3 +280,31 @@ model DeviceBinding { @@unique([userId, installId]) @@map("device_bindings") } + +// ============================================ +// 地图密码批次表 +// ============================================ +model MapPassword { + id String @id @default(uuid()) + createdAt DateTime @default(now()) @map("created_at") + + maps MapPasswordItem[] + + @@map("map_passwords") +} + +// ============================================ +// 地图密码明细表 +// ============================================ +model MapPasswordItem { + id String @id @default(uuid()) + batchId String @map("batch_id") + mapName String @map("map_name") @db.VarChar(50) + password String @db.VarChar(20) + location String @db.Text + image String @db.VarChar(500) + + batch MapPassword @relation(fields: [batchId], references: [id], onDelete: Cascade) + + @@map("map_password_items") +} diff --git a/src/index.ts b/src/index.ts index 974b5a6..f8dbd60 100644 --- a/src/index.ts +++ b/src/index.ts @@ -158,9 +158,30 @@ app.get('/api/software-version-ad', (req, res) => { res.json({ success: true, data: { items: [] } }); }); -// 游戏地图密码缓存 -app.get('/api/game/map-password/cached', (req, res) => { - res.json({ success: true, data: [] }); +// 游戏地图密码缓存(对齐 maqt.top 格式) +app.get('/api/game/map-password/cached', async (_req, res) => { + try { + // 从 DB 取最新一批地图密码 + const latest = await prisma.mapPassword.findFirst({ + orderBy: { createdAt: 'desc' }, + include: { maps: { select: { mapName: true, password: true, location: true, image: true } } }, + }); + if (latest) { + const d = new Date(latest.createdAt); + res.json({ + success: true, + data: { + maps: latest.maps, + updateTime: `${String(d.getDate()).padStart(2,'0')}月${String(d.getMonth()+1).padStart(2,'0')}日`, + }, + }); + } else { + // 默认空数据 + res.json({ success: true, data: { maps: [], updateTime: '' } }); + } + } catch { + res.json({ success: true, data: { maps: [], updateTime: '' } }); + } }); // 筛选分类 @@ -360,6 +381,37 @@ app.post('/api/admin/set-vip', async (req, res) => { } }); +// 管理员更新地图密码 +app.post('/api/admin/map-passwords', async (req, res) => { + const secret = process.env.ADMIN_SECRET; + if (!secret || req.headers['x-admin-secret'] !== secret) { + return res.status(403).json({ success: false, message: '禁止访问' }); + } + try { + const { maps } = req.body; + if (!Array.isArray(maps) || maps.length === 0) { + return res.status(400).json({ success: false, message: '缺少 maps 数组' }); + } + const batch = await prisma.mapPassword.create({ + data: { + maps: { + create: maps.map((m: any) => ({ + mapName: m.mapName, + password: m.password, + location: m.location || '', + image: m.image || '', + })), + }, + }, + include: { maps: true }, + }); + res.json({ success: true, data: batch }); + } catch (e: any) { + console.error('Admin map-password error:', e); + res.status(500).json({ success: false, message: '更新失败: ' + e.message }); + } +}); + // ============================================ // 错误处理 // ============================================