import 'dart:typed_data'; import 'package:http/http.dart' as http; import '../../../api_params.dart'; import '../../../api_response.dart'; import '../talk_api.dart'; /// Small POST/DELETE-only Talk endpoints that have no response payload. /// Each class extends [TalkApi] with `assemble` returning `null`. They share /// no state — they're collected here purely to avoid eight near-empty files. class SetFavorite extends TalkApi { final String chatToken; final bool favoriteState; SetFavorite(this.chatToken, this.favoriteState) : super('v4/room/$chatToken/favorite', null); @override ApiResponse? assemble(String raw) => null; @override Future request( Uri uri, ApiParams? body, Map? headers, ) => favoriteState ? http.post(uri, headers: headers) : http.delete(uri, headers: headers); } class LeaveRoom extends TalkApi { final String chatToken; LeaveRoom(this.chatToken) : super('v4/room/$chatToken/participants/self', null); @override ApiResponse? assemble(String raw) => null; @override Future request( Uri uri, ApiParams? body, Map? headers, ) => http.delete(uri, headers: headers); } class DeleteMessage extends TalkApi { final String chatToken; final int messageId; DeleteMessage(this.chatToken, this.messageId) : super('v1/chat/$chatToken/$messageId', null); @override ApiResponse? assemble(String raw) => null; @override Future request( Uri uri, ApiParams? body, Map? headers, ) => http.delete(uri, headers: headers); } class SetRoomAvatar extends TalkApi { final String chatToken; final Uint8List bytes; final String filename; SetRoomAvatar(this.chatToken, this.bytes, {this.filename = 'avatar.jpg'}) : super('v1/room/$chatToken/avatar', null); @override ApiResponse? assemble(String raw) => null; @override Future request( Uri uri, ApiParams? body, Map? headers, ) async { final req = http.MultipartRequest('POST', uri) ..headers.addAll(headers ?? const {}) ..files.add(http.MultipartFile.fromBytes('file', bytes, filename: filename)); final streamed = await req.send(); return http.Response.fromStream(streamed); } } class DeleteRoomAvatar extends TalkApi { final String chatToken; DeleteRoomAvatar(this.chatToken) : super('v1/room/$chatToken/avatar', null); @override ApiResponse? assemble(String raw) => null; @override Future request( Uri uri, ApiParams? body, Map? headers, ) => http.delete(uri, headers: headers); }