nostros/frontend/Functions/DatabaseFunctions/Relays/index.ts

78 lines
2.1 KiB
TypeScript
Raw Normal View History

2022-10-31 00:37:42 +00:00
import { SQLiteDatabase } from 'react-native-sqlite-storage'
import { getItems } from '..'
import { errorCallback } from '../Errors'
2022-10-24 17:27:31 +00:00
export interface Relay {
2022-10-31 00:37:42 +00:00
url: string
name?: string
2022-10-24 17:27:31 +00:00
}
const databaseToEntity: (object: any) => Relay = (object) => {
2022-10-31 00:37:42 +00:00
return object as Relay
}
2022-10-24 17:27:31 +00:00
export const storeRelay: (relay: Relay, db: SQLiteDatabase) => void = async (relay, db) => {
if (relay.url) {
2022-10-31 00:37:42 +00:00
const relays: Relay[] = await searchRelays(relay.url, db)
2022-10-24 17:27:31 +00:00
if (relays.length === 0) {
const eventQuery = `
INSERT INTO nostros_relays
(url)
VALUES
(
'${relay.url.split("'").join("''")}'
);
2022-10-31 00:37:42 +00:00
`
2022-10-24 17:27:31 +00:00
await new Promise<void>((resolve, reject) => {
db.transaction((transaction) => {
2022-10-31 01:23:27 +00:00
transaction.executeSql(eventQuery, [], () => resolve(), errorCallback(eventQuery, reject))
2022-10-31 00:37:42 +00:00
})
})
2022-10-24 17:27:31 +00:00
}
}
2022-10-31 00:37:42 +00:00
}
2022-10-24 17:27:31 +00:00
export const searchRelays: (relayUrl: string, db: SQLiteDatabase) => Promise<Relay[]> = async (
relayUrl,
2022-10-31 01:23:27 +00:00
db,
2022-10-24 17:27:31 +00:00
) => {
const searchQuery = `
SELECT * FROM nostros_relays WHERE url = '${relayUrl}';
2022-10-31 00:37:42 +00:00
`
2022-10-24 17:27:31 +00:00
return await new Promise<Relay[]>((resolve, reject) => {
db.transaction((transaction) => {
transaction.executeSql(
searchQuery,
[],
(_transaction, resultSet) => {
2022-10-31 00:37:42 +00:00
const items: object[] = getItems(resultSet)
const notes: Relay[] = items.map((object) => databaseToEntity(object))
resolve(notes)
2022-10-24 17:27:31 +00:00
},
2022-10-31 01:23:27 +00:00
errorCallback(searchQuery, reject),
2022-10-31 00:37:42 +00:00
)
})
})
}
2022-10-24 17:27:31 +00:00
export const getRelays: (db: SQLiteDatabase) => Promise<Relay[]> = async (db) => {
2022-10-31 00:37:42 +00:00
const notesQuery = 'SELECT * FROM nostros_relays;'
2022-10-24 17:27:31 +00:00
return await new Promise<Relay[]>((resolve, reject) => {
db.readTransaction((transaction) => {
transaction.executeSql(
notesQuery,
[],
(_transaction, resultSet) => {
2022-10-31 00:37:42 +00:00
const items: object[] = getItems(resultSet)
const relays: Relay[] = items.map((object) => databaseToEntity(object))
resolve(relays)
2022-10-24 17:27:31 +00:00
},
2022-10-31 01:23:27 +00:00
errorCallback(notesQuery, reject),
2022-10-31 00:37:42 +00:00
)
})
})
}