1- using Microsoft . Extensions . Logging ;
2- using Newtonsoft . Json ;
3- using PowerSync . Common . Client ;
4- using SQLite ;
1+ using SQLite ;
52using TodoSQLite . Models ;
63
74namespace TodoSQLite . Data ;
85
96public class TodoItemDatabase
107{
11- SQLiteAsyncConnection Database ;
12- public TodoItemDatabase ( )
13- {
14- }
8+ SQLiteAsyncConnection database ;
9+
1510 async Task Init ( )
1611 {
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 )
12+ if ( database is not null )
2813 return ;
2914
15+ database = new SQLiteAsyncConnection ( Constants . DatabasePath , Constants . Flags ) ;
16+ await database . CreateTableAsync < TodoList > ( ) ;
17+ await database . CreateTableAsync < TodoItem > ( ) ;
18+ }
3019
31- Database = new SQLiteAsyncConnection ( Constants . DatabasePath , Constants . Flags ) ;
32- var result = await Database . CreateTableAsync < TodoItem > ( ) ;
33-
20+ // List operations
21+ public async Task < List < TodoList > > GetListsAsync ( )
22+ {
23+ await Init ( ) ;
24+ return await database . Table < TodoList > ( ) . OrderByDescending ( l => l . CreatedAt ) . ToListAsync ( ) ;
25+ }
3426
27+ public async Task < TodoList > GetListAsync ( int id )
28+ {
29+ await Init ( ) ;
30+ return await database . Table < TodoList > ( ) . Where ( l => l . ID == id ) . FirstOrDefaultAsync ( ) ;
31+ }
3532
33+ public async Task < int > SaveListAsync ( TodoList list )
34+ {
35+ await Init ( ) ;
36+ if ( list . ID != 0 )
37+ {
38+ return await database . UpdateAsync ( list ) ;
39+ }
40+ else
41+ {
42+ return await database . InsertAsync ( list ) ;
43+ }
3644 }
3745
38- public async Task < List < TodoItem > > GetItemsAsync ( )
46+ public async Task < int > DeleteListAsync ( TodoList list )
3947 {
4048 await Init ( ) ;
41- return await Database . Table < TodoItem > ( ) . ToListAsync ( ) ;
49+ // First delete all todo items in this list
50+ await database . Table < TodoItem > ( ) . Where ( t => t . ListId == list . ID ) . DeleteAsync ( ) ;
51+ return await database . DeleteAsync ( list ) ;
4252 }
4353
44- public async Task < List < TodoItem > > GetItemsNotDoneAsync ( )
54+ // Todo item operations
55+ public async Task < List < TodoItem > > GetItemsAsync ( int listId )
4556 {
4657 await Init ( ) ;
47- return await Database . Table < TodoItem > ( ) . Where ( t => t . Done ) . ToListAsync ( ) ;
58+ return await database . Table < TodoItem > ( )
59+ . Where ( t => t . ListId == listId )
60+ . OrderByDescending ( t => t . ID )
61+ . ToListAsync ( ) ;
62+ }
4863
49- // SQL queries are also possible
50- //return await Database.QueryAsync<TodoItem>("SELECT * FROM [TodoItem] WHERE [Done] = 0");
64+ public async Task < List < TodoItem > > GetItemsNotDoneAsync ( int listId )
65+ {
66+ await Init ( ) ;
67+ return await database . Table < TodoItem > ( )
68+ . Where ( t => t . ListId == listId && ! t . Done )
69+ . OrderByDescending ( t => t . ID )
70+ . ToListAsync ( ) ;
5171 }
5272
5373 public async Task < TodoItem > GetItemAsync ( int id )
5474 {
5575 await Init ( ) ;
56- return await Database . Table < TodoItem > ( ) . Where ( i => i . ID == id ) . FirstOrDefaultAsync ( ) ;
76+ return await database . Table < TodoItem > ( ) . Where ( i => i . ID == id ) . FirstOrDefaultAsync ( ) ;
5777 }
5878
5979 public async Task < int > SaveItemAsync ( TodoItem item )
6080 {
6181 await Init ( ) ;
6282 if ( item . ID != 0 )
6383 {
64- return await Database . UpdateAsync ( item ) ;
84+ return await database . UpdateAsync ( item ) ;
6585 }
6686 else
6787 {
68- return await Database . InsertAsync ( item ) ;
88+ return await database . InsertAsync ( item ) ;
6989 }
7090 }
7191
7292 public async Task < int > DeleteItemAsync ( TodoItem item )
7393 {
7494 await Init ( ) ;
75- return await Database . DeleteAsync ( item ) ;
95+ return await database . DeleteAsync ( item ) ;
7696 }
7797}
0 commit comments