1+ using Microsoft . Extensions . Logging ;
2+ using Newtonsoft . Json ;
3+ using PowerSync . Common . Client ;
4+ using SQLite ;
5+ using TodoSQLite . Models ;
6+
7+ namespace TodoSQLite . Data ;
8+
9+ public class TodoItemDatabase
10+ {
11+ SQLiteAsyncConnection Database ;
12+ public TodoItemDatabase ( )
13+ {
14+ }
15+ async Task Init ( )
16+ {
17+
18+ var db = new PowerSyncDatabase ( new PowerSyncDatabaseOptions
19+ {
20+ Database = new SQLOpenOptions { DbFilename = "cli-example.db" } ,
21+ Schema = AppSchema . PowerSyncSchema ,
22+ } ) ;
23+ await db . Init ( ) ;
24+ var x = await db . GetAll < object > ( "select * from lists;" ) ;
25+ await Application . Current . MainPage . DisplayAlert ( "Title" , JsonConvert . SerializeObject ( x ) , "OK" ) ;
26+
27+ if ( Database is not null )
28+ return ;
29+
30+
31+ Database = new SQLiteAsyncConnection ( Constants . DatabasePath , Constants . Flags ) ;
32+ var result = await Database . CreateTableAsync < TodoItem > ( ) ;
33+
34+
35+
36+ }
37+
38+ public async Task < List < TodoItem > > GetItemsAsync ( )
39+ {
40+ await Init ( ) ;
41+ return await Database . Table < TodoItem > ( ) . ToListAsync ( ) ;
42+ }
43+
44+ public async Task < List < TodoItem > > GetItemsNotDoneAsync ( )
45+ {
46+ await Init ( ) ;
47+ return await Database . Table < TodoItem > ( ) . Where ( t => t . Done ) . ToListAsync ( ) ;
48+
49+ // SQL queries are also possible
50+ //return await Database.QueryAsync<TodoItem>("SELECT * FROM [TodoItem] WHERE [Done] = 0");
51+ }
52+
53+ public async Task < TodoItem > GetItemAsync ( int id )
54+ {
55+ await Init ( ) ;
56+ return await Database . Table < TodoItem > ( ) . Where ( i => i . ID == id ) . FirstOrDefaultAsync ( ) ;
57+ }
58+
59+ public async Task < int > SaveItemAsync ( TodoItem item )
60+ {
61+ await Init ( ) ;
62+ if ( item . ID != 0 )
63+ {
64+ return await Database . UpdateAsync ( item ) ;
65+ }
66+ else
67+ {
68+ return await Database . InsertAsync ( item ) ;
69+ }
70+ }
71+
72+ public async Task < int > DeleteItemAsync ( TodoItem item )
73+ {
74+ await Init ( ) ;
75+ return await Database . DeleteAsync ( item ) ;
76+ }
77+ }
0 commit comments