Exemple #1
0
        [ProducesResponseType(typeof(BlogPostDTO), StatusCodes.Status201Created)] //[Note] Co definiuje się w takich przypadkach jako typ zwracany? Muszę podawać zawsze typ rzeczywisty, bo interface nie może być obiektem typeof? ODP: tak, podaje się typ rzeczywisty
        public async Task <IActionResult> Post([FromBody] BlogPostDTO postToAdd)  //[note] Czy tutaj to FromBody jest konieczne? Czy domyślnie typy złożone nie powinny być odczytywane z body? ODP: nie jest konieczne, bo domyślnie są odczytywane z body, ale poprawia czytelność
        {
            //TODO: [Przekazać Id - sprawdzić foreign key EF]?? Czy w jakiś sposób mam tutaj przetwarzać typy referencyjne (np. jak z postmana chcę dodać post z autorem już istniejącym, to czy muszę zawsze podawać wszystkie pola, czy mogę podać id?)
            //np. mam sprawdzać id autora w DTO i jeśli != 0 to próbować go znaleźć w kontekście i przypisać?
            logger.LogInformation("Calling post for the following object: {@0} ", postToAdd); //?? Czy przy tym nie ma tej automatycznej weryfikacji modelu? W body post'a miałem więcej pól i wszystko przeszło. Czy da się wymusić kontrolę 1:1 (żeby body było w 100% zgodne z modelem?
//           postToAdd.Modified = DateTime.Now.ToLongDateString();
            BlogPost addedPost = await repository.AddAsync(mappingProvider.Map <BlogPostDTO, BlogPost>(postToAdd));

            var addedPostDTO = mappingProvider.Map <BlogPostDTO>(addedPost);            //[Note] - w tego typu aplikacjach narzut wynikający z mapowania jest powszechnym i akceptowanym minusem, bo mapowanie jest konieczne - Czy to podwójne mapowanie nie jest już za dużym narzutem na taką akcję?

            return(CreatedAtRoute("GetBlog", new { id = addedPost.Id }, addedPostDTO)); //[note] W jaki sposób przerobić to na pojedynczy punkt wyjścia? Czy jest jakiś typ wspólny dla tych helpersów i czy tak się w ogóle robie w web dev'ie? ODP: nie stosuje się tego podejścia w aplikacjach web'owych
            //[Note] - createAtRoute wysyła URL w header'ze i stamtąd można odczytać adres -  Czy ten middleware CreatedAtRoute nie powienien zwracać też URL'a do nowego obiektu? Postman pokazuje tam tylko w JSON'ie body tego obiektu.s
        }
        public async Task <IActionResult> Create(PostEditViewModel newBlogPostModel, IFormCollection collection)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(View(newBlogPostModel));
                }
                BlogPost newBlogPost = newBlogPostModel.BlogPost;
                newBlogPost.PostDate     = DateTime.Now;
                newBlogPost.ModifiedDate = DateTime.Now;
                await _blogPostRepository.AddAsync(newBlogPost);

                var editId = newBlogPostModel.BlogPost.BlogPostId;
                return(RedirectToAction("Edit", new { id = editId }));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return(View(newBlogPostModel));
        }
 public async Task Post([FromBody] BlogPost post)
 {
     await _postsRepo.AddAsync(post);
 }