Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import Router from '@koa/router'; import { Context } from 'koa'; import * as FavoritesService from './favorites.service'; import { BadRequestError } from '../../middleware/errorHandler'; import { optionalAuth } from '../../middleware/auth'; // 测试用户ID(开发环境使用) const TEST_USER_ID = '1'; const router = new Router(); // 获取收藏列表 router.get('/', optionalAuth, async (ctx: Context) => { // 开发环境使用测试用户ID const userId = ctx.state.user?.userId || TEST_USER_ID; const favorites = await FavoritesService.getFavorites(userId); ctx.body = { code: 0, message: 'success', data: favorites, }; }); // 添加收藏 router.post('/', optionalAuth, async (ctx: Context) => { // 开发环境使用测试用户ID const userId = ctx.state.user?.userId || TEST_USER_ID; const body = ctx.request.body as { audioId: number }; const { audioId } = body; if (!audioId) { throw new BadRequestError('音频ID不能为空'); } const favorite = await FavoritesService.addFavorite(userId, audioId); ctx.body = { code: 0, message: '收藏成功', data: favorite, }; }); // 取消收藏 router.delete('/:audioId', optionalAuth, async (ctx: Context) => { // 开发环境使用测试用户ID const userId = ctx.state.user?.userId || TEST_USER_ID; const audioId = parseInt(ctx.params.audioId as string); await FavoritesService.removeFavorite(userId, audioId); ctx.body = { code: 0, message: '已取消收藏', }; }); // 检查是否已收藏 router.get('/check/:audioId', optionalAuth, async (ctx: Context) => { // 开发环境使用测试用户ID const userId = ctx.state.user?.userId || TEST_USER_ID; const audioId = parseInt(ctx.params.audioId as string); const isFavorited = await FavoritesService.isFavorited(userId, audioId); ctx.body = { code: 0, message: 'success', data: { isFavorited }, }; }); export default router; |