Commit 18ab60c3 authored by Chunchi Che's avatar Chunchi Che

update mdproDeck API

parent 5d3048b6
Pipeline #27778 passed with stages
in 8 minutes and 54 seconds
import { useConfig } from "@/config"; import { useConfig } from "@/config";
import { MdproDeck } from "./schema"; import { handleHttps, mdproHeaders } from "./util";
import { mdproHeaders } from "./util";
const { mdproServer } = useConfig(); const { mdproServer } = useConfig();
const API_PATH = "api/mdpro3/deck/update";
interface UpdateResp { const API_PATH = "/api/mdpro3/deck/deckId";
code: number;
message: string;
data: MdproDeck;
}
export async function updateDeck( export async function generateDeck(): Promise<string | undefined> {
req: MdproDeck,
): Promise<UpdateResp | undefined> {
const myHeaders = mdproHeaders(); const myHeaders = mdproHeaders();
const resp = await fetch(`${mdproServer}/${API_PATH}`, { const resp = await fetch(`${mdproServer}/${API_PATH}`, {
method: "PUT", method: "GET",
headers: myHeaders, headers: myHeaders,
body: JSON.stringify(req),
redirect: "follow", redirect: "follow",
}); });
if (!resp.ok) { return await handleHttps(resp, API_PATH);
console.error(`[Update of MdproDeck] HTTPS error! status: ${resp.status}`);
return undefined;
} else {
return await resp.json();
}
} }
export * from "./generate";
export * from "./mget"; export * from "./mget";
export * from "./pull"; export * from "./pull";
export * from "./update";
export * from "./upload"; export * from "./upload";
import { useConfig } from "@/config"; import { useConfig } from "@/config";
import { MdproDeck } from "./schema"; import { MdproDeck, MdproResp } from "./schema";
import { mdproHeaders } from "./util"; import { handleHttps, mdproHeaders } from "./util";
const { mdproServer } = useConfig(); const { mdproServer } = useConfig();
const API_PATH = "/api/mdpro3/deck"; const API_PATH = "/api/mdpro3/deck";
interface MgetResp { export async function mgetDeck(
code: number; id: string,
message: string; ): Promise<MdproResp<MdproDeck> | undefined> {
data?: MdproDeck;
}
export async function mgetDeck(id: string): Promise<MgetResp | undefined> {
const myHeaders = mdproHeaders(); const myHeaders = mdproHeaders();
const resp = await fetch(`${mdproServer}/${API_PATH}/${id}`, { const resp = await fetch(`${mdproServer}/${API_PATH}/${id}`, {
...@@ -22,10 +18,5 @@ export async function mgetDeck(id: string): Promise<MgetResp | undefined> { ...@@ -22,10 +18,5 @@ export async function mgetDeck(id: string): Promise<MgetResp | undefined> {
redirect: "follow", redirect: "follow",
}); });
if (!resp.ok) { return await handleHttps(resp, API_PATH);
console.error(`[Mget of Mdpro Decks] HTTPS error! status: ${resp.status}`);
return undefined;
} else {
return await resp.json();
}
} }
import { useConfig } from "@/config"; import { useConfig } from "@/config";
import { MdproDeck } from "./schema"; import { MdproDeck, MdproResp } from "./schema";
import { mdproHeaders } from "./util"; import { handleHttps, mdproHeaders } from "./util";
const { mdproServer } = useConfig(); const { mdproServer } = useConfig();
const API_PATH = "api/mdpro3/deck/list"; const API_PATH = "api/mdpro3/deck/list";
...@@ -20,21 +20,17 @@ const defaultPullReq: PullReq = { ...@@ -20,21 +20,17 @@ const defaultPullReq: PullReq = {
size: 20, size: 20,
}; };
interface PullResp { interface RespData {
code: number;
message: string;
data?: {
current: number; current: number;
size: number; size: number;
total: number; total: number;
pages: number; pages: number;
records: MdproDeck[]; records: MdproDeck[];
};
} }
export async function pullDecks( export async function pullDecks(
req: PullReq = defaultPullReq, req: PullReq = defaultPullReq,
): Promise<PullResp | undefined> { ): Promise<MdproResp<RespData> | undefined> {
const myHeaders = mdproHeaders(); const myHeaders = mdproHeaders();
const params = new URLSearchParams(); const params = new URLSearchParams();
...@@ -53,10 +49,5 @@ export async function pullDecks( ...@@ -53,10 +49,5 @@ export async function pullDecks(
redirect: "follow", redirect: "follow",
}); });
if (!resp.ok) { return await handleHttps(resp, API_PATH);
console.error(`[Pull of Mdpro Decks] HTTPS error! status: ${resp.status}`);
return undefined;
} else {
return await resp.json();
}
} }
export interface MdproResp<T> {
code: number;
message: string;
data?: T;
}
export interface MdproDeck { export interface MdproDeck {
/* /*
*`ID` of the online deck. *`ID` of the online deck.
......
import { useConfig } from "@/config"; import { useConfig } from "@/config";
import { MdproDeck } from "./schema"; import { MdproDeck, MdproResp } from "./schema";
import { mdproHeaders } from "./util"; import { handleHttps, mdproHeaders } from "./util";
const { mdproServer } = useConfig(); const { mdproServer } = useConfig();
const API_PATH = "api/mdpro3/deck/upload"; const API_PATH = "api/mdpro3/deck/upload";
interface UploadResp {
code: number;
message: string;
data: MdproDeck;
}
export async function uploadDeck( export async function uploadDeck(
req: MdproDeck, req: MdproDeck,
): Promise<UploadResp | undefined> { ): Promise<MdproResp<MdproDeck> | undefined> {
const myHeaders = mdproHeaders(); const myHeaders = mdproHeaders();
myHeaders.append("Content-Type", "application/json"); myHeaders.append("Content-Type", "application/json");
...@@ -25,12 +19,5 @@ export async function uploadDeck( ...@@ -25,12 +19,5 @@ export async function uploadDeck(
redirect: "follow", redirect: "follow",
}); });
if (!resp.ok) { return await handleHttps(resp, API_PATH);
console.error(
`[Upload of Mdpro Decks] HTTPS error! status: ${resp.status}`,
);
return undefined;
} else {
return await resp.json();
}
} }
...@@ -4,3 +4,17 @@ export function mdproHeaders(): Headers { ...@@ -4,3 +4,17 @@ export function mdproHeaders(): Headers {
return myHeaders; return myHeaders;
} }
export async function handleHttps<T>(
resp: Response,
api: string,
): Promise<T | undefined> {
if (!resp.ok) {
console.error(
`[Mdpro] Https error from api ${api}! status: ${resp.status}`,
);
return undefined;
} else {
return await resp.json();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment