186 lines
4.0 KiB
TypeScript
186 lines
4.0 KiB
TypeScript
import axios from 'axios'
|
|
|
|
const API_BASE_URL = 'http://localhost:8001/api/v1'
|
|
|
|
const api = axios.create({
|
|
baseURL: API_BASE_URL,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
})
|
|
|
|
// Source Folders API
|
|
export const sourceFolders = {
|
|
list: async () => {
|
|
const response = await api.get('/folders')
|
|
return response.data
|
|
},
|
|
|
|
add: async (path: string, recursive: boolean = true) => {
|
|
const response = await api.post('/folders', {
|
|
path,
|
|
recursive,
|
|
watch: false, // Can be made configurable later
|
|
})
|
|
return response.data
|
|
},
|
|
|
|
scan: async (folderId: string) => {
|
|
const response = await api.post(`/folders/${folderId}/scan`)
|
|
return response.data
|
|
},
|
|
|
|
delete: async (folderId: string) => {
|
|
const response = await api.delete(`/folders/${folderId}`)
|
|
return response.data
|
|
},
|
|
}
|
|
|
|
// Photos API
|
|
export const photos = {
|
|
list: async (params?: {
|
|
limit?: number
|
|
offset?: number
|
|
folder_id?: string
|
|
heap_id?: string
|
|
rating?: number
|
|
flag?: string
|
|
}) => {
|
|
const response = await api.get('/photos', { params })
|
|
return response.data
|
|
},
|
|
|
|
get: async (photoId: string) => {
|
|
const response = await api.get(`/photos/${photoId}`)
|
|
return response.data
|
|
},
|
|
|
|
update: async (photoId: string, data: {
|
|
rating?: number
|
|
flag?: string
|
|
user_title?: string
|
|
user_notes?: string
|
|
}) => {
|
|
const response = await api.patch(`/photos/${photoId}`, data)
|
|
return response.data
|
|
},
|
|
|
|
bulkUpdate: async (photoIds: string[], data: {
|
|
rating?: number
|
|
flag?: string
|
|
heap_id?: string
|
|
trash?: boolean
|
|
}) => {
|
|
const response = await api.post('/photos/bulk', {
|
|
photo_ids: photoIds,
|
|
...data,
|
|
})
|
|
return response.data
|
|
},
|
|
|
|
getThumbnailUrl: (photoId: string, size: 'small' | 'medium' | 'large' = 'medium') => {
|
|
return `${API_BASE_URL}/photos/${photoId}/thumb/${size}`
|
|
},
|
|
|
|
getOriginalUrl: (photoId: string) => {
|
|
return `${API_BASE_URL}/photos/${photoId}/original`
|
|
},
|
|
}
|
|
|
|
// Library API
|
|
export const library = {
|
|
scan: async () => {
|
|
const response = await api.post('/library/scan')
|
|
return response.data
|
|
},
|
|
|
|
scanStatus: async () => {
|
|
const response = await api.get('/library/scan/status')
|
|
return response.data
|
|
},
|
|
|
|
stats: async () => {
|
|
const response = await api.get('/library/stats')
|
|
return response.data
|
|
},
|
|
}
|
|
|
|
// Heaps API
|
|
export const heaps = {
|
|
list: async () => {
|
|
const response = await api.get('/heaps')
|
|
return response.data
|
|
},
|
|
|
|
create: async (name: string, description?: string) => {
|
|
const response = await api.post('/heaps', {
|
|
name,
|
|
description,
|
|
})
|
|
return response.data
|
|
},
|
|
|
|
update: async (heapId: string, data: {
|
|
name?: string
|
|
description?: string
|
|
}) => {
|
|
const response = await api.patch(`/heaps/${heapId}`, data)
|
|
return response.data
|
|
},
|
|
|
|
delete: async (heapId: string) => {
|
|
const response = await api.delete(`/heaps/${heapId}`)
|
|
return response.data
|
|
},
|
|
}
|
|
|
|
// Tags API
|
|
export const tags = {
|
|
list: async () => {
|
|
const response = await api.get('/tags')
|
|
return response.data
|
|
},
|
|
|
|
create: async (name: string, color?: string) => {
|
|
const response = await api.post('/tags', {
|
|
name,
|
|
color,
|
|
})
|
|
return response.data
|
|
},
|
|
|
|
update: async (tagId: string, data: {
|
|
name?: string
|
|
color?: string
|
|
}) => {
|
|
const response = await api.patch(`/tags/${tagId}`, data)
|
|
return response.data
|
|
},
|
|
|
|
delete: async (tagId: string) => {
|
|
const response = await api.delete(`/tags/${tagId}`)
|
|
return response.data
|
|
},
|
|
}
|
|
|
|
// Trash API
|
|
export const trash = {
|
|
list: async () => {
|
|
const response = await api.get('/trash')
|
|
return response.data
|
|
},
|
|
|
|
restore: async (photoIds: string[]) => {
|
|
const response = await api.post('/trash/restore', {
|
|
photo_ids: photoIds,
|
|
})
|
|
return response.data
|
|
},
|
|
|
|
empty: async () => {
|
|
const response = await api.delete('/trash/empty')
|
|
return response.data
|
|
},
|
|
}
|
|
|
|
export default api |