Archived
- Add mobile/ directory with Expo React Native project - Create API client with JWT auth and token refresh using AsyncStorage - Implement AuthContext for login/register/logout flow - Add screens: Login, Register, Library, Search, Settings - Set up React Navigation with AuthStack and MainTabs - Create packages/shared/ with shared types and utilities - Add shared validation utilities (email, password strength) - Update root package.json workspaces to include mobile + shared - Add spec document docs/backend/009-expo-integration.md
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import api from "./client";
|
|
import type {
|
|
Bookmark,
|
|
Note,
|
|
CreateBookmarkPayload,
|
|
CreateNotePayload,
|
|
PaginatedResponse,
|
|
} from "@cloud-reader/shared";
|
|
|
|
export function fetchBookmarks(
|
|
bookId?: string,
|
|
): Promise<PaginatedResponse<Bookmark>> {
|
|
const params = bookId ? { book: bookId } : {};
|
|
return api
|
|
.get<PaginatedResponse<Bookmark>>("/api/annotations/bookmarks/", { params })
|
|
.then((res) => res.data);
|
|
}
|
|
|
|
export function createBookmark(
|
|
payload: CreateBookmarkPayload,
|
|
): Promise<Bookmark> {
|
|
return api
|
|
.post<Bookmark>("/api/annotations/bookmarks/", payload)
|
|
.then((res) => res.data);
|
|
}
|
|
|
|
export function deleteBookmark(id: string): Promise<void> {
|
|
return api.delete(`/api/annotations/bookmarks/${id}/`).then(() => {});
|
|
}
|
|
|
|
export function fetchNotes(bookId?: string): Promise<PaginatedResponse<Note>> {
|
|
const params = bookId ? { book: bookId } : {};
|
|
return api
|
|
.get<PaginatedResponse<Note>>("/api/annotations/notes/", { params })
|
|
.then((res) => res.data);
|
|
}
|
|
|
|
export function createNote(payload: CreateNotePayload): Promise<Note> {
|
|
return api
|
|
.post<Note>("/api/annotations/notes/", payload)
|
|
.then((res) => res.data);
|
|
}
|
|
|
|
export function updateNote(
|
|
id: string,
|
|
content: string,
|
|
): Promise<Note> {
|
|
return api
|
|
.patch<Note>(`/api/annotations/notes/${id}/`, { content })
|
|
.then((res) => res.data);
|
|
}
|
|
|
|
export function deleteNote(id: string): Promise<void> {
|
|
return api.delete(`/api/annotations/notes/${id}/`).then(() => {});
|
|
} |