Exemplo n.º 1
0
        public async Task <IHttpActionResult> NewQuestion([FromBody] Question q)
        {
            var user = await _repository.GetUserByEmailAsync(q.UserName);

            /*
             * Se non si fa così, cioè se non si leggono le
             * Entity Tags dal context, EF pensa che i Tags associati
             * alla Question q che gli arrivano dal FromBody
             * (tra l'altro correttamente deserializzati) siano delle
             * Entity Nuove e ne crea di nuovi nel DB. Questo penso sia
             * Dovuto alla relazione NxM che lega tags a Questions.
             * Così funziona. C'è un altro metodo per fare prima e
             * non leggere dal context i tags?
             *
             */

            List <Tag> _tags = new List <Tag>();

            foreach (var t in q.Tags)
            {
                Tag contextTag = await _repository.GetTagByIdAsync(t.Id);

                if (contextTag != null)
                {
                    _tags.Add(contextTag);
                }
            }
            q.Tags = _tags;

            if (user != null)
            {
                q.UserId = user.UserId;
            }
            else
            {
                q.UserId = new Guid("00000000-0000-0000-0000-000000000000");
            }
            //to do   alert user not found

            q.UpdateDate = DateTime.Now;

            RepositoryActionResult <Question> result = _repository.AddQuestion(q);

            switch (result.Status)
            {
            case RepositoryActionStatus.Created:
                return(Content(System.Net.HttpStatusCode.OK, "Domanda inserita Correttamente"));

            case RepositoryActionStatus.NothingModified:
                return(Content(System.Net.HttpStatusCode.OK, "Risultato Not Modified?"));    //TODO have I to return OK?

            case RepositoryActionStatus.Error:
                return(Content(System.Net.HttpStatusCode.InternalServerError, result.Exception.InnerException.Message));

            default:
                break;
            }


            return(Content(System.Net.HttpStatusCode.Ambiguous, result.Status.ToString() + "  " + result.Entity.Title));
        }