aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/reviewDB/Utils/ReviewDBAPI.ts
blob: a4c8dbfdb5697a7101ecc26f70e7f5662ba35b1c (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
/*
 * 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 { authorize, showToast } from "./Utils";

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

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

enum Response {
    "Added your review" = 0,
    "Updated your review" = 1,
    "Error" = 2,
}

export async function getReviews(id: string): Promise<Review[]> {
    const res = await fetch(API_URL + "/getUserReviews?snowflakeFormat=string&discordid=" + id);
    return await res.json() as Review[];
}

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

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

    return fetch(API_URL + "/addUserReview", {
        method: "POST",
        body: JSON.stringify(review),
        headers: {
            "Content-Type": "application/json",
        }
    })
        .then(r => r.text())
        .then(res => {
            showToast(res);
            return Response[res] ?? Response.Error;
        });
}

export function deleteReview(id: number): Promise<any> {
    return fetch(API_URL + "/deleteReview", {
        method: "POST",
        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 + "/reportReview", {
        method: "POST",
        headers: new Headers({
            "Content-Type": "application/json",
            Accept: "application/json",
        }),
        body: JSON.stringify({
            reviewid: id,
            token: getToken()
        })
    });
    showToast(await res.text());
}

export function getLastReviewID(id: string): Promise<number> {
    return fetch(API_URL + "/getLastReviewID?discordid=" + id)
        .then(r => r.text())
        .then(Number);
}