import 'package:new_learn/core/api/class/model.dart'; import 'package:new_learn/core/network/dio_client.dart'; /// ============================================================ /// 【class 模块接口】班级模块请求 —— 对标 Vue3 端 api/class/index.ts + api/userPoint/index.ts /// /// ClassApi:班级动态/成员/点赞/评论 /// getUserClassPost → 班级动态分页(游标 pageIndex + prevPageId) /// getClassUsers → 班级成员在线状态 /// addUserLike → 点赞 / 取消点赞 /// addUserComment → 评论 /// /// UserRankApi:积分排行榜 /// getUserCount → 排行榜总人数(本班级 / 同年级 / 同云校) /// getRankPage → 排行榜分页(游标分页:pageIndex + prevPageId) /// /// 注意:页面只调这里,不直接碰 Dio;异常不在这里 catch,交页面统一处理。 /// ============================================================ class ClassApi { ClassApi._(); static final ClassApi instance = ClassApi._(); /// 班级动态列表(queryType: 0 我的动态 / 1 班级动态) Future getUserClassPost({ int queryType = 1, int pageIndex = 1, int pageSize = 10, int prevPageId = 0, }) async { final data = await DioClient.instance.get( '/api/v1/UserPost/GetUserClassPost', query: { 'queryType': queryType, 'pageIndex': pageIndex, 'pageSize': pageSize, 'prevPageId': prevPageId, }, ); return UserPostResponse.fromJson(data as Map); } /// 班级成员(在线状态) Future> getClassUsers() async { final data = await DioClient.instance.get('/api/v1/User/GetClassUsers'); final list = data is Map ? data['data'] : data; if (list is List) { return list .whereType>() .map(ClassUser.fromJson) .toList(); } return const []; } /// 点赞 / 取消点赞(likeStatus: true 点赞 / false 取消) Future addUserLike({ required int userPostId, required bool likeStatus, }) async { await DioClient.instance.post('/api/v1/UserLike/AddUserLike', data: { 'userPostId': userPostId, 'likeStatus': likeStatus, }); } /// 评论动态 Future addUserComment({ required int userPostId, required String content, }) async { await DioClient.instance.post('/api/v1/UserPost/AddUserCommon', data: { 'userPostId': userPostId, 'content': content, }); } } /// 积分排行榜接口 class UserRankApi { UserRankApi._(); static final UserRankApi instance = UserRankApi._(); /// 排行榜总人数(本班级 / 同年级 / 同云校) Future getUserCount() async { final data = await DioClient.instance.get( '/api/v1/UserPointsRecord/GetUserCount', ); return UserCountResult.fromJson(data as Map); } /// 排行榜分页(游标分页:pageIndex + prevPageId) /// [userRankType] 0 总榜 / 1 本周 / 2 上周 / 3 今天 / 4 昨天 /// [userClass] 0 本班级 / 1 同年级 / 2 同云校 Future getRankPage({ required int pageIndex, required int pageSize, required int prevPageId, required int userRankType, required int userClass, required bool desc, }) async { final data = await DioClient.instance.get( '/api/v1/UserPointsRecord/GetUserRank', query: { 'pageIndex': pageIndex, 'pageSize': pageSize, 'prevPageId': prevPageId, 'UserRankType': userRankType, 'UserClass': userClass, 'desc': desc, }, ); return UserRankPagedList.fromJson(data as Map); } }