forked from dotnet-presentations/aspnetcore-app-workshop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDevIntersectionLoader.cs
76 lines (66 loc) · 2.83 KB
/
DevIntersectionLoader.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
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using BackEnd.Data;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace BackEnd
{
public class DevIntersectionLoader : DataLoader
{
public override async Task LoadDataAsync(string conferenceName, Stream fileStream, ApplicationDbContext db)
{
var reader = new JsonTextReader(new StreamReader(fileStream));
var conference = new Conference { Name = conferenceName };
var speakerNames = new Dictionary<string, Speaker>();
var tracks = new Dictionary<string, Track>();
JArray doc = await JArray.LoadAsync(reader);
foreach (JObject item in doc)
{
var theseSpeakers = new List<Speaker>();
foreach (var thisSpeakerName in item["speakerNames"])
{
if (!speakerNames.ContainsKey(thisSpeakerName.Value<string>()))
{
var thisSpeaker = new Speaker { Name = thisSpeakerName.Value<string>() };
db.Speakers.Add(thisSpeaker);
speakerNames.Add(thisSpeakerName.Value<string>(), thisSpeaker);
Console.WriteLine(thisSpeakerName.Value<string>());
}
theseSpeakers.Add(speakerNames[thisSpeakerName.Value<string>()]);
}
var theseTracks = new List<Track>();
foreach (var thisTrackName in item["trackNames"])
{
if (!tracks.ContainsKey(thisTrackName.Value<string>()))
{
var thisTrack = new Track { Name = thisTrackName.Value<string>(), Conference = conference };
db.Tracks.Add(thisTrack);
tracks.Add(thisTrackName.Value<string>(), thisTrack);
}
theseTracks.Add(tracks[thisTrackName.Value<string>()]);
}
var session = new Session
{
Conference = conference,
Title = item["title"].Value<string>(),
StartTime = item["startTime"].Value<DateTime>(),
EndTime = item["endTime"].Value<DateTime>(),
Track = theseTracks[0],
Abstract = item["abstract"].Value<string>()
};
session.SessionSpeakers = new List<SessionSpeaker>();
foreach (var sp in theseSpeakers)
{
session.SessionSpeakers.Add(new SessionSpeaker
{
Session = session,
Speaker = sp
});
}
db.Sessions.Add(session);
}
}
}
}