aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/reviewDB/Utils/ReviewDBAPI.ts
blob: 62c89f5c95b7024a33d70d9cc7ac0c34e21d061e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
 * Vencord, a modification for Discord's desktop app
 * Copyright (c) 2022 Vendicated and contributors
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/

import { Settings } from "@api/Settings";

import { Review } from "../entities/Review";
import { ReviewDBUser } from "../entities/User";
import { authorize, showToast } from "./Utils";

const API_URL = "https://manti.vendicated.dev";

const getToken = () => Settings.plugins.ReviewDB.token;

interface Response {
    success: boolean,
    message: string;
    reviews: Review[];
    updated: boolean;
}

const WarningFlag = 0b00000010;

export async function getReviews(id: string): Promise<Review[]> {
    var flags = 0;
    if (!Settings.plugins.ReviewDB.showWarning) flags |= WarningFlag;
    const req = await fetch(API_URL + `/api/reviewdb/users/${id}/reviews?flags=${flags}`);

    const res = (req.status === 200) ? await req.json() as Response : { success: false, message: "An Error occured while fetching reviews. Please try again later.", reviews: [], updated: false };
    if (!res.success) {
        showToast(res.message);
        return [
            {
                id: 0,
                comment: "An Error occured while fetching reviews. Please try again later.",
                star: 0,
                timestamp: 0,
                sender: {
                    id: 0,
                    username: "Error",
                    profilePhoto: "https://cdn.discordapp.com/attachments/1045394533384462377/1084900598035513447/646808599204593683.png?size=128",
                    discordID: "0",
                    badges: []
                }
            }
        ];
    }
    return res.reviews;
}

export async function addReview(review: any): Promise<Response | null> {
    review.token = getToken();

    if (!review.token) {
        showToast("Please authorize to add a review.");
        authorize();
        return null;
    }

    return fetch(API_URL + `/api/reviewdb/users/${review.userid}/reviews`, {
        method: "PUT",
        body: JSON.stringify(review),
        headers: {
            "Content-Type": "application/json",
        }
    })
        .then(r => r.json())
        .then(res => {
            showToast(res.message);
            return res ?? null;
        });
}

export function deleteReview(id: number): Promise<Response> {
    return fetch(API_URL + `/api/reviewdb/users/${id}/reviews`, {
        method: "DELETE",
        headers: new Headers({
            "Content-Type": "application/json",
            Accept: "application/json",
        }),
        body: JSON.stringify({
            token: getToken(),
            reviewid: id
        })
    }).then(r => r.json());
}

export async function reportReview(id: number) {
    const res = await fetch(API_URL + "/api/reviewdb/reports", {
        method: "PUT",
        headers: new Headers({
            "Content-Type": "application/json",
            Accept: "application/json",
        }),
        body: JSON.stringify({
            reviewid: id,
            token: getToken()
        })
    }).then(r => r.json()) as Response;
    showToast(await res.message);
}

export function getCurrentUserInfo(token: string): Promise<ReviewDBUser> {
    return fetch(API_URL + "/api/reviewdb/users", {
        body: JSON.stringify({ token }),
        method: "POST",
    })
        .then(r => r.json());
}