public async Task <bool> Handle(Example.Events.Event e, Guid exampleId) { if (e.IsCreated) { var created = ((Example.Events.Event.Created)e).Item; var template = await _dexie.GetTemplateState(created.TemplateRevisionId.Item1); var example = await _dexie.GetExampleState(created.Id); return(await _transact(created.Id, Example.decideCreate(template, created, example))); } else if (e.IsEdited) { var edited = ((Example.Events.Event.Edited)e).Item; var template = await _dexie.GetTemplateState(edited.TemplateRevisionId.Item1); var example = await _dexie.GetExampleState(exampleId); return(await _transact(exampleId, Example.decideEdit(template, edited, exampleId, example))); } else { throw new Exception("Unsupported event:" + e.GetType().FullName); } }
public async Task <bool> Collect(Tuple <Guid, int> exampleRevisionId, FSharpOption <Guid> deckId) // highTODO this needs serious fixing { var meta = await _metaFactory.Create(); var exampleState = await _dexie.GetExampleState(exampleRevisionId.Item1); var exampleRevision = Domain.Example.getRevision(exampleRevisionId.Item1, exampleRevisionId.Item2, exampleState).ResultValue; var templateState = await _dexie.GetTemplateState(exampleRevision.TemplateRevisionId.Item1); var templateRevision = toTemplateRevision(await _dexie.GetTemplateInstance(exampleRevision.TemplateRevisionId)); var pointers = PublicTemplate.getCardTemplatePointers(templateRevision, exampleRevision.FieldValues).ResultValue; var user = await _userProvider.ForceSummary(); var cardSetting = user.CardSettings.Single(x => x.IsDefault); var deckIds = deckId.IsSome() ? SetModule.Singleton(deckId.Value) : (await _dexie.GetViewDecks()).Where(x => x.IsDefault).Select(x => x.Id).Pipe(SetModule.OfSeq); var cards = pointers.Select(p => Stack.initCard(_clock.GetCurrentInstant(), cardSetting.Id, cardSetting.NewCardsStartingEaseFactor, p)).ToFList(); var stackId = Guid.NewGuid(); var created = Stack.init(stackId, meta, exampleRevision.TemplateRevisionId.Item1, exampleRevision.TemplateRevisionId.Item2, deckIds, exampleRevision.Title, exampleRevision.FieldValues, cards); var stackState = await _dexie.GetStackState(stackId); return(await _transact(stackId, Stack.decideCreate(created, templateState, stackState))); }