albums.controller.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. const router_1 = __importDefault(require("@koa/router"));
  7. const albums_service_1 = require("./albums.service");
  8. const router = new router_1.default();
  9. /**
  10. * 获取或创建默认专辑
  11. * GET /api/albums/default
  12. */
  13. router.get('/default', async (ctx) => {
  14. try {
  15. const defaultAlbum = await albums_service_1.albumsService.getOrCreateDefaultAlbum();
  16. ctx.body = {
  17. code: 0,
  18. message: 'success',
  19. data: defaultAlbum,
  20. };
  21. }
  22. catch (error) {
  23. ctx.body = {
  24. code: 400,
  25. message: error.message || '获取默认专辑失败',
  26. };
  27. }
  28. });
  29. /**
  30. * 创建专辑
  31. * POST /api/albums
  32. */
  33. router.post('/', async (ctx) => {
  34. try {
  35. const data = ctx.request.body;
  36. if (!data.name) {
  37. ctx.body = { code: 400, message: '专辑名称不能为空' };
  38. return;
  39. }
  40. const album = await albums_service_1.albumsService.createAlbum(data);
  41. ctx.body = {
  42. code: 0,
  43. message: 'success',
  44. data: album,
  45. };
  46. }
  47. catch (error) {
  48. ctx.body = {
  49. code: 400,
  50. message: error.message || '创建专辑失败',
  51. };
  52. }
  53. });
  54. /**
  55. * 获取专辑列表
  56. * GET /api/albums
  57. */
  58. router.get('/', async (ctx) => {
  59. try {
  60. const { page, pageSize } = ctx.query;
  61. const result = await albums_service_1.albumsService.getAlbums({
  62. page: page ? parseInt(page) : 1,
  63. pageSize: pageSize ? parseInt(pageSize) : 20,
  64. });
  65. ctx.body = {
  66. code: 0,
  67. message: 'success',
  68. data: result,
  69. };
  70. }
  71. catch (error) {
  72. ctx.body = {
  73. code: 400,
  74. message: error.message || '获取专辑列表失败',
  75. };
  76. }
  77. });
  78. /**
  79. * 获取专辑详情
  80. * GET /api/albums/:id
  81. */
  82. router.get('/:id', async (ctx) => {
  83. try {
  84. const { id } = ctx.params;
  85. const album = await albums_service_1.albumsService.getAlbumById(parseInt(id));
  86. ctx.body = {
  87. code: 0,
  88. message: 'success',
  89. data: album,
  90. };
  91. }
  92. catch (error) {
  93. ctx.body = {
  94. code: 400,
  95. message: error.message || '获取专辑详情失败',
  96. };
  97. }
  98. });
  99. /**
  100. * 更新专辑
  101. * PUT /api/albums/:id
  102. */
  103. router.put('/:id', async (ctx) => {
  104. try {
  105. const { id } = ctx.params;
  106. const data = ctx.request.body;
  107. const album = await albums_service_1.albumsService.updateAlbum(parseInt(id), data);
  108. ctx.body = {
  109. code: 0,
  110. message: 'success',
  111. data: album,
  112. };
  113. }
  114. catch (error) {
  115. ctx.body = {
  116. code: 400,
  117. message: error.message || '更新专辑失败',
  118. };
  119. }
  120. });
  121. /**
  122. * 删除专辑
  123. * DELETE /api/albums/:id
  124. */
  125. router.delete('/:id', async (ctx) => {
  126. try {
  127. const { id } = ctx.params;
  128. await albums_service_1.albumsService.deleteAlbum(parseInt(id));
  129. ctx.body = {
  130. code: 0,
  131. message: 'success',
  132. };
  133. }
  134. catch (error) {
  135. ctx.body = {
  136. code: 400,
  137. message: error.message || '删除专辑失败',
  138. };
  139. }
  140. });
  141. /**
  142. * 获取专辑内的音频列表
  143. * GET /api/albums/:id/audios
  144. */
  145. router.get('/:id/audios', async (ctx) => {
  146. try {
  147. const { id } = ctx.params;
  148. const audios = await albums_service_1.albumsService.getAlbumAudios(parseInt(id));
  149. ctx.body = {
  150. code: 0,
  151. message: 'success',
  152. data: audios,
  153. };
  154. }
  155. catch (error) {
  156. ctx.body = {
  157. code: 400,
  158. message: error.message || '获取专辑音频列表失败',
  159. };
  160. }
  161. });
  162. /**
  163. * 添加音频到专辑
  164. * POST /api/albums/:id/audio
  165. */
  166. router.post('/:id/audio', async (ctx) => {
  167. try {
  168. const { id } = ctx.params;
  169. const { audioId, order } = ctx.request.body;
  170. if (!audioId) {
  171. ctx.body = { code: 400, message: 'audioId 不能为空' };
  172. return;
  173. }
  174. const albumAudio = await albums_service_1.albumsService.addAudioToAlbum(parseInt(id), audioId, order || 0);
  175. ctx.body = {
  176. code: 0,
  177. message: 'success',
  178. data: albumAudio,
  179. };
  180. }
  181. catch (error) {
  182. ctx.body = {
  183. code: 400,
  184. message: error.message || '添加音频到专辑失败',
  185. };
  186. }
  187. });
  188. /**
  189. * 从专辑移除音频
  190. * DELETE /api/albums/:id/audio/:audioId
  191. */
  192. router.delete('/:id/audio/:audioId', async (ctx) => {
  193. try {
  194. const { id, audioId } = ctx.params;
  195. await albums_service_1.albumsService.removeAudioFromAlbum(parseInt(id), parseInt(audioId));
  196. ctx.body = {
  197. code: 0,
  198. message: 'success',
  199. };
  200. }
  201. catch (error) {
  202. ctx.body = {
  203. code: 400,
  204. message: error.message || '从专辑移除音频失败',
  205. };
  206. }
  207. });
  208. /**
  209. * 调整专辑中音频的顺序
  210. * PUT /api/albums/:id/audio/:audioId
  211. */
  212. router.put('/:id/audio/:audioId', async (ctx) => {
  213. try {
  214. const { id, audioId } = ctx.params;
  215. const { order } = ctx.request.body;
  216. if (order === undefined) {
  217. ctx.body = { code: 400, message: 'order 不能为空' };
  218. return;
  219. }
  220. const albumAudio = await albums_service_1.albumsService.reorderAudio(parseInt(id), parseInt(audioId), order);
  221. ctx.body = {
  222. code: 0,
  223. message: 'success',
  224. data: albumAudio,
  225. };
  226. }
  227. catch (error) {
  228. ctx.body = {
  229. code: 400,
  230. message: error.message || '调整音频顺序失败',
  231. };
  232. }
  233. });
  234. /**
  235. * 检查订阅状态
  236. * GET /api/albums/:id/check-subscribe
  237. */
  238. router.get('/:id/check-subscribe', async (ctx) => {
  239. try {
  240. const { id } = ctx.params;
  241. const { userId } = ctx.query;
  242. if (!userId) {
  243. ctx.body = { code: 400, message: 'userId 不能为空' };
  244. return;
  245. }
  246. const isSubscribed = await albums_service_1.albumsService.isSubscribed(parseInt(userId), parseInt(id));
  247. ctx.body = {
  248. code: 0,
  249. message: 'success',
  250. data: { isSubscribed },
  251. };
  252. }
  253. catch (error) {
  254. ctx.body = {
  255. code: 400,
  256. message: error.message || '检查订阅状态失败',
  257. };
  258. }
  259. });
  260. /**
  261. * 订阅专辑
  262. * POST /api/albums/:id/subscribe
  263. */
  264. router.post('/:id/subscribe', async (ctx) => {
  265. try {
  266. const { id } = ctx.params;
  267. const { userId } = ctx.request.body;
  268. if (!userId) {
  269. ctx.body = { code: 400, message: 'userId 不能为空' };
  270. return;
  271. }
  272. await albums_service_1.albumsService.subscribeAlbum(userId, parseInt(id));
  273. ctx.body = {
  274. code: 0,
  275. message: 'success',
  276. };
  277. }
  278. catch (error) {
  279. ctx.body = {
  280. code: 400,
  281. message: error.message || '订阅专辑失败',
  282. };
  283. }
  284. });
  285. /**
  286. * 取消订阅专辑
  287. * DELETE /api/albums/:id/subscribe
  288. */
  289. router.delete('/:id/subscribe', async (ctx) => {
  290. try {
  291. const { id } = ctx.params;
  292. const { userId } = ctx.query;
  293. if (!userId) {
  294. ctx.body = { code: 400, message: 'userId 不能为空' };
  295. return;
  296. }
  297. await albums_service_1.albumsService.unsubscribeAlbum(parseInt(userId), parseInt(id));
  298. ctx.body = {
  299. code: 0,
  300. message: 'success',
  301. };
  302. }
  303. catch (error) {
  304. ctx.body = {
  305. code: 400,
  306. message: error.message || '取消订阅专辑失败',
  307. };
  308. }
  309. });
  310. /**
  311. * 获取用户已订阅的专辑列表
  312. * GET /api/albums/subscribed
  313. */
  314. router.get('/subscribed/list', async (ctx) => {
  315. try {
  316. const { userId } = ctx.query;
  317. if (!userId) {
  318. ctx.body = { code: 400, message: 'userId 不能为空' };
  319. return;
  320. }
  321. const albums = await albums_service_1.albumsService.getSubscribedAlbums(parseInt(userId));
  322. ctx.body = {
  323. code: 0,
  324. message: 'success',
  325. data: albums,
  326. };
  327. }
  328. catch (error) {
  329. ctx.body = {
  330. code: 400,
  331. message: error.message || '获取已订阅专辑列表失败',
  332. };
  333. }
  334. });
  335. exports.default = router;