-
Notifications
You must be signed in to change notification settings - Fork 0
/
BookChaptersService.cs
117 lines (109 loc) · 4.17 KB
/
BookChaptersService.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using BooksServiceSampleHost.Models;
using Microsoft.Extensions.Logging;
using BooksServiceSampleHost.DataBaseConf;
using SQLite;
using System.Diagnostics;
using System.IO;
namespace BooksServiceSampleHost.Services
{
public class BookChaptersService:IBookChaptersService
{
private SampleChapters _sampleChapters;
public BookChaptersService(SampleChapters sampleChapters)
{
_sampleChapters = sampleChapters;
InitializeAsync().SafeFireAndForget(false);
}
//private readonly ConcurrentDictionary<Guid, BookChapter> _chapters =
//new ConcurrentDictionary<Guid, BookChapter>();
static readonly Lazy<SQLiteAsyncConnection> lazyInitializer = new Lazy<SQLiteAsyncConnection>(() =>
{
Debug.WriteLine(Contants.DatabasePath);
return new SQLiteAsyncConnection(Contants.DatabasePath, Contants.Flags);
});
static SQLiteAsyncConnection DatabaseConnection => lazyInitializer.Value;
static bool initialized = false;
async Task InitializeAsync()
{
if (!initialized)
{
if (!File.Exists(Contants.DatabasePath))
{
await DatabaseConnection.CreateTablesAsync(CreateFlags.None, typeof(BookChapter)).ConfigureAwait(false);
await AddRangeAsync(_sampleChapters.CreateSampleChaptersData());
}
initialized = true;
}
}
public async Task AddAsync(BookChapter bookChapter)
{
//bookChapter.Id = Guid.NewGuid();
//_chapters[bookChapter.Id] = bookChapter;
await DatabaseConnection.InsertAsync(bookChapter);
}
public async Task AddRangeAsync(IEnumerable<BookChapter> chapters)
{
//foreach (var chapter in chapters)
//{
//chapter.Id = Guid.NewGuid();
// //_chapters[chapter.Id] = chapter;
//if (!DatabaseConnection.TableMappings.Any(m => m.MappedType.Name == nameof(BookChapter)))
//{
//foreach (var chapter in chapters)
//{
// chapter.Id = Guid.NewGuid();
//}
await DatabaseConnection.InsertAllAsync(chapters);
//}
//}
//return Task.CompletedTask;
}
public async Task<BookChapter> FindAsync(Guid id)
{
//_chapters.TryGetValue(id, out BookChapter bookChapter);
//return Task.FromResult<BookChapter>(bookChapter);
return await DatabaseConnection.Table<BookChapter>().Where(c => c.Id == id).FirstOrDefaultAsync();
}
public async Task<IEnumerable<BookChapter>> GetAllAsync()
{
//Task.FromResult<IEnumerable<BookChapter>>(_chapters.Values);
return await DatabaseConnection.Table<BookChapter>().ToListAsync();
}
public async Task<BookChapter> RemoveAsync(Guid id)
{
var chapter = await DatabaseConnection.Table<BookChapter>().Where(c => c.Id == id).FirstOrDefaultAsync();
//_chapters.TryRemove(id, out BookChapter remove);
//return Task.FromResult<BookChapter>(remove);
if (chapter != null)
{
await DatabaseConnection.DeleteAsync(chapter);
}
return chapter;
}
public async Task UpdateAsync(BookChapter bookChapter)
{
//_chapters[bookChapter.Id] = bookChapter;
//return Task.CompletedTask;
await DatabaseConnection.UpdateAsync(bookChapter);
}
}
public static class TaskExtensions
{
public static async void SafeFireAndForget(this Task task, bool returnToCallingContext, Action<Exception> onException = null)
{
try
{
await task.ConfigureAwait(returnToCallingContext);
}
catch (Exception ex) when (onException != null)
{
onException(ex);
}
}
}
}