· 4 years ago · Mar 17, 2021, 12:36 PM
1import { TabRouter } from '@react-navigation/routers';
2import { openDatabase, Database, SQLTransaction, SQLResultSet, SQLError, Query } from 'expo-sqlite';
3import Note from '../models/Note';
4import { useCallback } from 'react';
5
6const databaseName: string = 'writings';
7
8const getDb = (name: string = databaseName): Database => {
9 return openDatabase(name);
10}
11
12
13
14const transaction = (db: Database): Promise<SQLTransaction> => {
15 return new Promise(function(resolve, reject) {
16 db.transaction((tx: SQLTransaction) => {
17 resolve(tx);
18 },
19 (error) => {
20 reject(error);
21 },
22 () => {
23 console.info('Transaction Succeeded');
24 },
25 )
26 });
27}
28
29const query = (tx: SQLTransaction, query: Query): Promise<SQLResultSet> => {
30 return new Promise(function(resolve, reject) {
31 tx.executeSql(
32 query.sql,
33 query.args,
34 (tx: SQLTransaction, res: SQLResultSet) => {
35 resolve(res);
36 },
37 (transaction: SQLTransaction, error: SQLError): boolean => {
38 reject(error);
39 return true;
40 }
41 )
42 });
43};
44// DB INIT
45export const initWritings = async () => {
46 const db = getDb();
47 const tx = await transaction(db).catch(error => console.error(error));
48 if (tx) {
49 await query(tx, {
50 sql: "CREATE TABLE IF NOT EXISTS `writings` (id integer primary key autoincrement, title text, author text, note text)",
51 args: [],
52 });
53 }
54}
55
56export const writings = {
57 create: (n: Note): Promise<SQLResultSet> => {
58 return new Promise(async function(resolve, reject) {
59 const db = getDb();
60 const tx = await transaction(db);
61
62 const res = await query(tx, {
63 sql: "INSERT INTO `writings` (id, title, author, note) VALUES (?, ?, ?, ?)",
64 args: [null, n.title, n.author, n.text],
65 }).catch((error) => {
66 reject(error);
67 });
68
69 if (res) {
70 resolve(res);
71 }
72 });
73 }
74}
75// TABLE INIT
76
77// ALLES PREPARED
78
79// CRUD