feat: uv config other feats

- add uv configuration for the backend
- update frontend to make auth work
- add new auth endpoints
- add bookmars feat
- add reader feat
This commit is contained in:
2026-06-03 22:06:01 -05:00
parent 730c748f5f
commit 6b4c0c43f8
137 changed files with 20319 additions and 2340 deletions
+9 -73
View File
@@ -1,96 +1,32 @@
import api from "@/api/client";
import type {
Bookmark,
CreateBookmarkPayload,
Note,
CreateNotePayload,
UpdateNotePayload,
CreateMarkerPayload,
PaginatedResponse,
} from "@/types";
/** Fetch bookmarks for the current user, optionally filtered by book */
export async function fetchBookmarks(
bookId?: string
ebookId?: string | number,
): Promise<PaginatedResponse<Bookmark>> {
const params: Record<string, string> = {};
if (bookId) params.book = bookId;
if (ebookId != null && ebookId !== "") params.ebook = String(ebookId);
const { data } = await api.get<PaginatedResponse<Bookmark>>(
"/annotations/bookmarks/",
{ params }
{ params },
);
return data;
}
/** Create a new bookmark */
export async function createBookmark(
payload: CreateBookmarkPayload
export async function createMarker(
payload: CreateMarkerPayload,
): Promise<Bookmark> {
const { data } = await api.post<Bookmark>(
"/annotations/bookmarks/",
payload
);
const { data } = await api.post<Bookmark>("/annotations/bookmarks/", payload);
return data;
}
/** Delete a bookmark by id */
export async function deleteBookmark(id: string): Promise<void> {
await api.delete(`/annotations/bookmarks/${id}/`);
}
/** Batch delete bookmarks */
export async function batchDeleteBookmarks(
ids: string[]
): Promise<{ deleted: number }> {
const { data } = await api.delete<{ deleted: number }>(
"/annotations/bookmarks/batch-delete/",
{ data: { ids } }
);
return data;
}
/** Fetch notes for the current user, optionally filtered by book */
export async function fetchNotes(
bookId?: string
): Promise<PaginatedResponse<Note>> {
const params: Record<string, string> = {};
if (bookId) params.book = bookId;
const { data } = await api.get<PaginatedResponse<Note>>(
"/annotations/notes/",
{ params }
);
return data;
}
/** Create a new note */
export async function createNote(payload: CreateNotePayload): Promise<Note> {
const { data } = await api.post<Note>("/annotations/notes/", payload);
return data;
}
/** Update a note's content */
export async function updateNote(
id: string,
payload: UpdateNotePayload
): Promise<Note> {
const { data } = await api.patch<Note>(
`/annotations/notes/${id}/`,
payload
);
return data;
}
/** Delete a note by id */
export async function deleteNote(id: string): Promise<void> {
await api.delete(`/annotations/notes/${id}/`);
}
/** Batch delete notes */
export async function batchDeleteNotes(
ids: string[]
): Promise<{ deleted: number }> {
const { data } = await api.delete<{ deleted: number }>(
"/annotations/notes/batch-delete/",
{ data: { ids } }
);
return data;
}
/** @deprecated Use createMarker */
export const createBookmark = createMarker;