import APIClient from 'App/api_client'; export const tagProps = { ISSUE: 'red', DESIGN: 'geekblue', NOTE: 'purple', }; export type iTag = keyof typeof tagProps | 'ALL'; export const TAGS = Object.keys( tagProps, ) as unknown as (keyof typeof tagProps)[]; export interface WriteNote { message: string; tag: string; isPublic: boolean; timestamp?: number; startAt: number; endAt: number; thumbnail: string; } export interface Note { createdAt: string; deletedAt: string | null; isPublic: boolean; message: string; noteId: number; projectId: number; sessionId: string; tag: iTag; timestamp: number; userId: number; userName: string; startAt: number; endAt: number; thumbnail: string; } export interface NotesFilter { page: number; limit: number; sort: string; order: 'DESC' | 'ASC'; tags: iTag[]; sharedOnly: boolean; mineOnly: boolean; search: string; } export default class NotesService { private client: APIClient; constructor(client?: APIClient) { this.client = client || new APIClient(); } initClient(client?: APIClient) { this.client = client || new APIClient(); } fetchNotes(filter: NotesFilter): Promise<{ notes: Note[]; count: number }> { return this.client .post('/notes', filter) .then((r) => r.json().then((r) => r.data)); } fetchNoteById(noteId: string): Promise { return this.client .get(`/notes/${noteId}`) .then((r) => r.json().then((r) => r.data)); } getNotesBySessionId(sessionID: string): Promise { return this.client .get(`/sessions/${sessionID}/notes`) .then((r) => r.json().then((r) => r.data)); } addNote(sessionID: string, note: WriteNote): Promise { return this.client .post(`/sessions/${sessionID}/notes`, note) .then((r) => r.json().then((r) => r.data)); } updateNote(noteID: string, note: WriteNote): Promise { return this.client .post(`/notes/${noteID}`, note) .then((r) => r.json().then((r) => r.data)); } deleteNote(noteID: number) { return this.client .delete(`/notes/${noteID}`) .then((r) => r.json().then((r) => r.data)); } sendSlackNotification(noteId: string, webhook: string) { return this.client .get(`/notes/${noteId}/slack/${webhook}`) .then((r) => r.json().then((r) => r.data)); } sendMsTeamsNotification(noteId: string, webhook: string) { return this.client .get(`/notes/${noteId}/msteams/${webhook}`) .then((r) => r.json().then((r) => r.data)); } }