Initial move
This commit is contained in:
103
frontend/src/api.ts
Normal file
103
frontend/src/api.ts
Normal file
@@ -0,0 +1,103 @@
|
||||
import { IChannel } from "./model/channel";
|
||||
import { IChannelList } from "./model/channel-list";
|
||||
import { IMessage } from "./model/message";
|
||||
import { IUnsentMessage } from "./model/unsent-message";
|
||||
import { state } from "./state";
|
||||
|
||||
|
||||
export const API = {
|
||||
token: "",
|
||||
path: "http://localhost:3000",
|
||||
|
||||
async request(method: string, path: string, body?: any) {
|
||||
if (!API.token) {
|
||||
throw new Error("API token was not set.");
|
||||
}
|
||||
return fetch(`${API.path}/${path}`, {
|
||||
method,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": API.token
|
||||
},
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
},
|
||||
|
||||
async checkToken() {
|
||||
const response = await API.request("GET", "check-token");
|
||||
if (response.status !== 200) {
|
||||
throw new Error("Invalid token in request");
|
||||
}
|
||||
},
|
||||
|
||||
async getChannels() {
|
||||
const response = await API.request("GET", "channels");
|
||||
const json = await response.json();
|
||||
return json.channels as IChannel[];
|
||||
},
|
||||
|
||||
async getChannel(id: string) {
|
||||
const response = await API.request("GET", `channels/${id}`);
|
||||
const json = await response.json();
|
||||
return json.channel as IChannel;
|
||||
},
|
||||
|
||||
async createChannel(name: string) {
|
||||
const response = await API.request("POST", "channels", { name });
|
||||
const json = await response.json();
|
||||
return json as IChannel;
|
||||
},
|
||||
|
||||
async deleteChannel(id: string) {
|
||||
await API.request("DELETE", `channels/${id}`);
|
||||
},
|
||||
|
||||
async getMessages(channelId: string) {
|
||||
const response = await API.request("GET", `channels/${channelId}/messages`);
|
||||
const json = await response.json();
|
||||
return json.messages as IMessage[];
|
||||
},
|
||||
|
||||
async createMessage(channelId: string, content: string) {
|
||||
const response = await API.request("POST", `channels/${channelId}/messages`, { content });
|
||||
const json = await response.json();
|
||||
return json as IMessage;
|
||||
},
|
||||
|
||||
async deleteMessage(channelId: string, messageId: string) {
|
||||
await API.request("DELETE", `channels/${channelId}/messages/${messageId}`);
|
||||
},
|
||||
|
||||
async uploadFile(channelId: string, messageId: string, file: File | Blob) {
|
||||
const formData = new FormData();
|
||||
formData.append("file", file);
|
||||
|
||||
const response = await fetch(`${API.path}/channels/${channelId}/messages/${messageId}/files`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Authorization": API.token
|
||||
},
|
||||
body: formData,
|
||||
});
|
||||
|
||||
const json = await response.json();
|
||||
return json;
|
||||
},
|
||||
|
||||
async mergeChannels(channelId: string, targetChannelId: string) {
|
||||
await API.request("PUT", `channels/${channelId}/merge`, { targetChannelId });
|
||||
},
|
||||
|
||||
async search(query: string, channelId?: string) {
|
||||
const queryPath = channelId ? `search?query=${encodeURIComponent(query)}&channelId=${channelId}` : `search?query=${encodeURIComponent(query)}`;
|
||||
const response = await API.request("GET", queryPath);
|
||||
const json = await response.json();
|
||||
return json.results as IMessage[];
|
||||
},
|
||||
|
||||
async getFiles(channelId: string, messageId: string) {
|
||||
const response = await API.request("GET", `channels/${channelId}/messages/${messageId}/files`);
|
||||
const json = await response.json();
|
||||
return json.files as string[];
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user