feat: add UploadZone component and database utility for file processing
This commit is contained in:
@@ -70,7 +70,7 @@ const UploadZone = ({ onUploadComplete }) => {
|
|||||||
<p className="font-medium text-lg">Drag files here</p>
|
<p className="font-medium text-lg">Drag files here</p>
|
||||||
<p className="text-sm text-fg-muted mb-4">Supports .txt and .md (max 5MB)</p>
|
<p className="text-sm text-fg-muted mb-4">Supports .txt and .md (max 5MB)</p>
|
||||||
<Button variant="outline" type="button" disabled={isProcessing}>
|
<Button variant="outline" type="button" disabled={isProcessing}>
|
||||||
{isProcessing && !syncProgress ? 'AI extraction in progress...' : 'Browse files'}
|
{isProcessing ? 'AI extraction in progress...' : 'Browse files'}
|
||||||
</Button>
|
</Button>
|
||||||
<input
|
<input
|
||||||
type="file"
|
type="file"
|
||||||
|
|||||||
@@ -8,22 +8,26 @@ export async function getTopics() {
|
|||||||
|
|
||||||
export async function saveTopics(topics) {
|
export async function saveTopics(topics) {
|
||||||
const existing = await pb.collection('topics').getFullList({ fields: 'id' });
|
const existing = await pb.collection('topics').getFullList({ fields: 'id' });
|
||||||
await Promise.all(existing.map(r => pb.collection('topics').delete(r.id, { requestKey: null })));
|
for (const r of existing) {
|
||||||
return Promise.all(topics.map(t => pb.collection('topics').create({
|
await pb.collection('topics').delete(r.id, { requestKey: null });
|
||||||
|
}
|
||||||
|
for (const t of topics) {
|
||||||
|
await pb.collection('topics').create({
|
||||||
id: t.id,
|
id: t.id,
|
||||||
label: t.label,
|
label: t.label,
|
||||||
type: t.type,
|
type: t.type,
|
||||||
description: t.description,
|
description: t.description,
|
||||||
learning_relevance: t.learning_relevance || 'standard',
|
learning_relevance: t.learning_relevance || 'standard',
|
||||||
}, { requestKey: null })));
|
}, { requestKey: null });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function upsertTopic(topic) {
|
export async function upsertTopic(topic) {
|
||||||
try {
|
try {
|
||||||
await pb.collection('topics').getOne(topic.id);
|
await pb.collection('topics').getOne(topic.id);
|
||||||
return pb.collection('topics').update(topic.id, topic);
|
return await pb.collection('topics').update(topic.id, topic);
|
||||||
} catch {
|
} catch {
|
||||||
return pb.collection('topics').create({ id: topic.id, ...topic });
|
return await pb.collection('topics').create({ id: topic.id, ...topic });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,8 +39,12 @@ export async function getRelations() {
|
|||||||
|
|
||||||
export async function saveRelations(relations) {
|
export async function saveRelations(relations) {
|
||||||
const existing = await pb.collection('relations').getFullList({ fields: 'id' });
|
const existing = await pb.collection('relations').getFullList({ fields: 'id' });
|
||||||
await Promise.all(existing.map(r => pb.collection('relations').delete(r.id, { requestKey: null })));
|
for (const r of existing) {
|
||||||
return Promise.all(relations.map(r => pb.collection('relations').create(r, { requestKey: null })));
|
await pb.collection('relations').delete(r.id, { requestKey: null });
|
||||||
|
}
|
||||||
|
for (const r of relations) {
|
||||||
|
await pb.collection('relations').create(r, { requestKey: null });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function addRelation(relation) {
|
export async function addRelation(relation) {
|
||||||
|
|||||||
Reference in New Issue
Block a user