room.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import {
  2. GET_ROOM_LIST,
  3. GET_ROOM_MINI_CODE,
  4. DEL_ROOM,
  5. SET_ROOM,
  6. GET_ROOM,
  7. GET_ROOM_LEADER_MINI_CODE
  8. } from './constant'
  9. import axios from './instance'
  10. import type { PageResult, Scene } from './'
  11. import type { SScene } from './scene'
  12. type SRoom = {
  13. roomId: number
  14. roomTitle: string
  15. roomInfo: string
  16. roomHostName: string
  17. roomStatus: number
  18. roomCoverUrl: string
  19. roomViewCount: number
  20. createTime: string
  21. }
  22. export interface RoomScene {
  23. num: string
  24. title: string
  25. cover: string
  26. }
  27. export interface Room {
  28. id: number
  29. title: string
  30. desc: string
  31. time: string
  32. viewCount: number
  33. cover: string
  34. leaderName: string
  35. roomStatus?: number
  36. }
  37. export type Rooms = Room[]
  38. const serverToLocal = (sroom: SRoom): Room => ({
  39. id: sroom.roomId,
  40. title: sroom.roomTitle,
  41. desc: sroom.roomInfo,
  42. time: sroom.createTime,
  43. viewCount: sroom.roomViewCount,
  44. cover: sroom.roomCoverUrl,
  45. leaderName: sroom.roomHostName,
  46. roomStatus: sroom.roomStatus
  47. })
  48. const localToServer = (room: Room): SRoom => ({
  49. roomId: room.id,
  50. roomTitle: room.title,
  51. roomInfo: room.desc,
  52. roomHostName: room.leaderName,
  53. roomCoverUrl: room.cover,
  54. roomViewCount: room.viewCount,
  55. createTime: room.time,
  56. roomStatus: room.roomStatus || 0
  57. })
  58. export const fetchRomms = async (): Promise<Rooms> => {
  59. const res = await axios.post<PageResult<SRoom>>(GET_ROOM_LIST, {
  60. pageNum: 1,
  61. pageSize: 1000
  62. })
  63. const rooms = res.list.map(serverToLocal)
  64. return rooms
  65. }
  66. export const deleteRoom = async (room: Room) => {
  67. await axios.post(DEL_ROOM, { roomId: room.id })
  68. }
  69. export const insertRoom = async (
  70. room: Omit<Room, 'id'>,
  71. numList: Scene['num'][]
  72. ) => {
  73. const sroom = await axios.post<SRoom>(SET_ROOM, {
  74. ...localToServer({ ...room, id: -1 }),
  75. roomId: null,
  76. createTime: null,
  77. numList
  78. })
  79. return serverToLocal(sroom)
  80. }
  81. export const updateRoom = async (room: Room, numList: Scene['num'][]) => {
  82. await axios.post(SET_ROOM, {
  83. ...localToServer(room),
  84. numList
  85. })
  86. }
  87. export const fetchRoomMiniCode = async (room: Room) => {
  88. return axios.get<string>(GET_ROOM_MINI_CODE, { params: { roomId: room.id } })
  89. }
  90. export const fetchLeaderRoomMiniCode = async (room: Room) => {
  91. return axios.get<string>(GET_ROOM_LEADER_MINI_CODE, {
  92. params: { roomId: room.id }
  93. })
  94. }
  95. interface RoomDetailType extends SRoom {
  96. sceneData: SScene[],
  97. }
  98. export const fetchRoomDetail = async (roomId: Room['id']) => {
  99. const res = await axios.get<RoomDetailType>(GET_ROOM, {
  100. params: { roomId }
  101. })
  102. return res
  103. }