import baseRequest from "./baseRequest"; import Toast from "react-native-toast-message"; import { generateSignature } from "./crypto"; export async function follow(follower, followed) { const apiUrl = process.env.EXPO_PUBLIC_API_URL; try { const base = await baseRequest(); const signature = await generateSignature({ account_relations: [ { sub_mid: follower, obj_mid: followed, predicate: 0 }, { sub_mid: followed, obj_mid: follower, predicate: 1 }, ], ...base, }); const response = await fetch( `${apiUrl}/api/account_relation/create?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ account_relations: [ { sub_mid: follower, obj_mid: followed, predicate: 0 }, { sub_mid: followed, obj_mid: follower, predicate: 1 }, ], ...base, }), } ); const data = await response.json(); if (data.ret === -1) { Toast.show({ type: "error", text1: data.msg, topOffset: 60, }); return; } } catch (error) { console.error(error); } } export async function unfollow(unfollower, unfollowed) { const apiUrl = process.env.EXPO_PUBLIC_API_URL; try { const base = await baseRequest(); const signature = await generateSignature({ sentences: [ { sub_mid: unfollower, obj_mid: unfollowed, predicate: 0 }, { sub_mid: unfollowed, obj_mid: unfollower, predicate: 1 }, ], ...base, }); const response = await fetch( `${apiUrl}/api/account_relation/delete?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ sentences: [ { sub_mid: unfollower, obj_mid: unfollowed, predicate: 0 }, { sub_mid: unfollowed, obj_mid: unfollower, predicate: 1 }, ], ...base, }), } ); const data = await response.json(); if (data.ret === -1) { Toast.show({ type: "error", text1: data.msg, topOffset: 60, }); return; } } catch (error) { console.error(error); } } export async function block(blocker, blocked) { const apiUrl = process.env.EXPO_PUBLIC_API_URL; try { const base = await baseRequest(); const signature = await generateSignature({ account_relations: [ { sub_mid: blocker, obj_mid: blocked, predicate: 2 }, { sub_mid: blocked, obj_mid: blocker, predicate: 3 }, ], ...base, }); const response = await fetch( `${apiUrl}/api/account_relation/create?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ account_relations: [ { sub_mid: blocker, obj_mid: blocked, predicate: 2 }, { sub_mid: blocked, obj_mid: blocker, predicate: 3 }, ], ...base, }), } ); const data = await response.json(); if (data.ret === -1) { Toast.show({ type: "error", text1: data.msg, topOffset: 60, }); return; } Toast.show({ type: "success", text1: "拉黑成功,将不再向您推荐Ta", topOffset: 60, }); } catch (error) { console.error(error); } } export async function unblock(unblocker, unblocked) { const apiUrl = process.env.EXPO_PUBLIC_API_URL; try { const base = await baseRequest(); const signature = await generateSignature({ sentences: [ { sub_mid: unblocker, obj_mid: unblocked, predicate: 2 }, { sub_mid: unblocked, obj_mid: unblocker, predicate: 3 }, ], ...base, }); const response = await fetch( `${apiUrl}/api/account_relation/delete?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ sentences: [ { sub_mid: unblocker, obj_mid: unblocked, predicate: 2 }, { sub_mid: unblocked, obj_mid: unblocker, predicate: 3 }, ], ...base, }), } ); const data = await response.json(); if (data.ret === -1) { Toast.show({ type: "error", text1: data.msg, topOffset: 60, }); return; } } catch (error) { console.error(error); } } export async function checkRelation(subMid, objMid, predicate) { const apiUrl = process.env.EXPO_PUBLIC_API_URL; try { const base = await baseRequest(); const signature = await generateSignature({ ...base, sub_mid: subMid, obj_mid: objMid, predicate: predicate, }); const response = await fetch( `${apiUrl}/api/account_relation/list_by_sentence?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ ...base, sub_mid: subMid, obj_mid: objMid, predicate: predicate, }), } ); const relationData = await response.json(); if (relationData.ret === -1) { Toast.show({ type: "error", text1: relationData.msg, topOffset: 60, }); return; } return relationData.data.is_account_relation_existed; } catch (error) { console.error(error); } }