added comment sql
This commit is contained in:
@@ -85,5 +85,6 @@ CREATE TABLE
|
|||||||
kind INTEGER NOT NULL DEFAULT 1,
|
kind INTEGER NOT NULL DEFAULT 1,
|
||||||
tags TEXT NOT NULL,
|
tags TEXT NOT NULL,
|
||||||
content TEXT NOT NULL,
|
content TEXT NOT NULL,
|
||||||
parent_id TEXT
|
parent_id TEXT,
|
||||||
|
parent_comment_id TEXT
|
||||||
);
|
);
|
||||||
@@ -4,6 +4,8 @@ import { RelayContext } from '@components/relaysProvider';
|
|||||||
|
|
||||||
import { relaysAtom } from '@stores/relays';
|
import { relaysAtom } from '@stores/relays';
|
||||||
|
|
||||||
|
import { createCacheCommentNote } from '@utils/storage';
|
||||||
|
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
import { useContext, useEffect, useState } from 'react';
|
import { useContext, useEffect, useState } from 'react';
|
||||||
|
|
||||||
@@ -37,7 +39,10 @@ export default function NoteMetadata({
|
|||||||
(event: any) => {
|
(event: any) => {
|
||||||
switch (event.kind) {
|
switch (event.kind) {
|
||||||
case 1:
|
case 1:
|
||||||
|
// update state
|
||||||
setComments((comments) => (comments += 1));
|
setComments((comments) => (comments += 1));
|
||||||
|
// save comment to database
|
||||||
|
createCacheCommentNote(event, eventID);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
if (event.content === '🤙' || event.content === '+') {
|
if (event.content === '🤙' || event.content === '+') {
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ export const NoteRepost = memo(function NoteRepost({ id }: { id: string }) {
|
|||||||
|
|
||||||
if (event) {
|
if (event) {
|
||||||
return (
|
return (
|
||||||
<div className="relative mt-3 rounded-lg border border-zinc-700 bg-zinc-800 p-2 py-3">
|
<div className="relative mt-3 mb-2 rounded-lg border border-zinc-700 bg-zinc-800 p-2 py-3">
|
||||||
<div className="relative z-10 flex flex-col">
|
<div className="relative z-10 flex flex-col">
|
||||||
<UserExtend pubkey={event.pubkey} time={event.created_at} />
|
<UserExtend pubkey={event.pubkey} time={event.created_at} />
|
||||||
<div className="-mt-5 pl-[52px]">
|
<div className="-mt-5 pl-[52px]">
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { RelayContext } from '@components/relaysProvider';
|
|||||||
|
|
||||||
import { relaysAtom } from '@stores/relays';
|
import { relaysAtom } from '@stores/relays';
|
||||||
|
|
||||||
import { getNoteByID } from '@utils/storage';
|
import { getAllCommentNotes, getNoteByID } from '@utils/storage';
|
||||||
|
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
import { useRouter } from 'next/router';
|
import { useRouter } from 'next/router';
|
||||||
@@ -33,31 +33,12 @@ export default function Page() {
|
|||||||
const [comments, setComments] = useState([]);
|
const [comments, setComments] = useState([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let unsubscribe: () => void;
|
|
||||||
|
|
||||||
getNoteByID(id)
|
getNoteByID(id)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
// update state
|
|
||||||
setRootEvent(res);
|
setRootEvent(res);
|
||||||
// get all comments
|
getAllCommentNotes(id).then((res: any) => setComments(res));
|
||||||
unsubscribe = pool.subscribe(
|
|
||||||
[
|
|
||||||
{
|
|
||||||
'#e': [id],
|
|
||||||
kinds: [1],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
relays,
|
|
||||||
(event: any) => {
|
|
||||||
setComments((comments) => [...comments, event]);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.catch(console.error);
|
.catch(console.error);
|
||||||
|
|
||||||
return () => {
|
|
||||||
unsubscribe();
|
|
||||||
};
|
|
||||||
}, [id, pool, relays]);
|
}, [id, pool, relays]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ export async function getCacheProfile(id) {
|
|||||||
return result[0];
|
return result[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
// get note by id
|
// get all notes
|
||||||
export async function getAllNotes() {
|
export async function getAllNotes() {
|
||||||
const db = await connect();
|
const db = await connect();
|
||||||
return await db.select(`SELECT * FROM cache_notes GROUP BY parent_id ORDER BY created_at DESC LIMIT 1000`);
|
return await db.select(`SELECT * FROM cache_notes GROUP BY parent_id ORDER BY created_at DESC LIMIT 1000`);
|
||||||
@@ -117,3 +117,29 @@ export async function createCacheNote(data) {
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get all comment notes
|
||||||
|
export async function getAllCommentNotes(eid) {
|
||||||
|
const db = await connect();
|
||||||
|
return await db.select(
|
||||||
|
`SELECT * FROM cache_notes WHERE parent_comment_id = "${eid}" ORDER BY created_at DESC LIMIT 1000`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// create cache comment note
|
||||||
|
export async function createCacheCommentNote(data, eid) {
|
||||||
|
const db = await connect();
|
||||||
|
return await db.execute(
|
||||||
|
'INSERT OR IGNORE INTO cache_notes (id, pubkey, created_at, kind, content, tags, parent_id, parent_comment_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?);',
|
||||||
|
[
|
||||||
|
data.id,
|
||||||
|
data.pubkey,
|
||||||
|
data.created_at,
|
||||||
|
data.kind,
|
||||||
|
data.content,
|
||||||
|
JSON.stringify(data.tags),
|
||||||
|
getParentID(data.tags, data.id),
|
||||||
|
eid,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user