Esempio n. 1
0
        public async Task <Result> Submit([FromBody] SurveySubmission response)
        {
            var survey = await _db.Surveys
                         .Include(x => x.questions)
                         .ThenInclude(x => x.answers)
                         .ThenInclude(x => x.answercards)
                         .ThenInclude(x => x.card)
                         .SingleOrDefaultAsync(x => x.id == response.surveyid);

            var choices = survey.questions
                          .Select(x => {
                var c = new Choice {
                    question = x,
                    type     = x.type
                };

                var q_and_a = response.choices.SingleOrDefault(y => y.Key == x.id);

                switch (x.type)
                {
                case AnswerType.MultiLineText:
                case AnswerType.SingleLineText:
                    c.text = q_and_a.Value.choice;
                    break;

                case AnswerType.SelectBox:
                case AnswerType.RadioButtons:
                    int.TryParse(q_and_a.Value.choice, out int result);

                    c.answer = _db.Answers.SingleOrDefault(y => y.id == result);

                    break;

                case AnswerType.Checkbox:
                    c.choiceanswers = q_and_a.Value?.selections?
                                      .Where(y => y.Value)
                                      .Select(y => new ChoiceAnswer {
                        answerid = int.Parse(y.Key)
                    }).ToList();
                    break;

                default:
                    break;
                }

                return(c);
            })
                          .ToList();

            var submission = new Submission {
                surveyid = survey.id,
                answers  = choices
            };

            _db.Submissions.Add(submission);

            await _db.SaveChangesAsync();

            if (response.cards != null && response.cards.Any())
            {
                var choiceid = submission.answers.SingleOrDefault(x => x.type == AnswerType.Cards);

                var cards = response.cards
                            .Where(x => x.Value == true)
                            .Select(x => new CardChoice {
                    cardid   = x.Key,
                    choiceid = choiceid.id
                })
                            .ToList();

                choiceid.cardchoices = cards;

                await _db.SaveChangesAsync();
            }

            return(Result.Success());
        }
        public async Task <Result> Sync()
        {
            var url = "api/cacheddata/";

            var response = await client.GetAsync(url);

            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();

                var obj = JsonConvert.DeserializeObject <CachedResponse>(content);

                var units = obj.cards_info.sub_units.Select(x => new Subunit {
                    name = x
                });

                foreach (var su in units)
                {
                    if (!_db.Subunits.Any(x => x.name == su.name))
                    {
                        _db.Subunits.Add(su);
                    }
                }

                var result = await _db.SaveChangesAsync();

                url = "api/cards/";

                do
                {
                    var resp = await client.GetStringAsync(url);

                    var respObj = JsonConvert.DeserializeObject <ApiResponse>(resp);

                    url = respObj.next;

                    foreach (var card in respObj.results)
                    {
                        if (_db.Cards.Any(x => x.apiid == card.id))
                        {
                            continue;
                        }

                        var idol = _db.Idols.FirstOrDefault(x => x.name == card.idol.name);

                        if (idol == null)
                        {
                            var g  = _db.Groups.Include(x => x.subunits).FirstOrDefault(x => x.name == card.idol.main_unit);
                            var su = _db.Subunits.Include(x => x.idols).FirstOrDefault(x => x.name == card.idol.sub_unit);

                            if (g == null)
                            {
                                g = new Group {
                                    name = card.idol.main_unit,
                                };

                                if (su != null)
                                {
                                    g.subunits = new List <Subunit> {
                                        su
                                    };
                                }

                                _db.Groups.Add(g);
                                _db.SaveChanges();
                            }
                            else if (su != null)
                            {
                                if (g.subunits == null)
                                {
                                    g.subunits = new List <Subunit>();
                                }

                                if (!g.subunits.Any(x => x.id == su.id))
                                {
                                    g.subunits.Add(su);
                                }
                            }

                            idol = new Idol {
                                name    = card.idol.name,
                                subunit = su,
                                group   = g
                            };
                        }

                        if (!card.is_promo)
                        {
                            var unidlz = new Card {
                                apiid     = card.id,
                                gameid    = card.game_id,
                                rarity    = (Rarity)Enum.Parse(typeof(Rarity), card.rarity),
                                attribute = (IdolAttribute)Enum.Parse(typeof(IdolAttribute), card.attribute),
                                imageurl  = card.card_image,
                                ispromo   = card.is_promo,
                                isidol    = false
                            };

                            unidlz.idol = idol;
                            _db.Cards.Add(unidlz);
                        }

                        var idlz = new Card {
                            apiid     = card.id,
                            gameid    = card.game_id,
                            rarity    = (Rarity)Enum.Parse(typeof(Rarity), card.rarity),
                            attribute = (IdolAttribute)Enum.Parse(typeof(IdolAttribute), card.attribute),
                            imageurl  = card.card_idolized_image,
                            ispromo   = card.is_promo,
                            isidol    = true
                        };

                        idlz.idol = idol;

                        _db.Cards.Add(idlz);

                        _db.SaveChanges();
                    }
                } while (url != null);

                return(Result.Success());
            }

            return(Result.Failure(response.ReasonPhrase));
        }