{"id":1726835,"user_name":null,"score":0,"text":"Czy zwracanie obiektu takiej klasy jest powszechn\u0105 praktyk\u0105? Przegl\u0105daj\u0105c githuby i artyku\u0142y cz\u0119sto widuj\u0119, i\u017c ludzie zwracaj\u0105 zdefiniowane przez siebie wyj\u0105tki.\nPoni\u017cej mam kod, kt\u00f3ry ma na celu dodanie przez u\u017cytkownika recenzji do wybranego produktu. Czy o to mniej wi\u0119cej chodzi, czy jest to poprawne pod wzgl\u0119dem \"best practise\"?\n\nKod w kontrolerze:\n```csharp\npublic async Task<ActionResult> AddReview(CreateReviewDto createReviewDto)\n{\n             var result = await productService.AddReview(createReviewDto);\n\n             if (!result.Succeeded)\n                         return BadRequest(new { errors = result.Errors });\n\n            return Ok(result.Data);\n}\n```\n\nMetoda serwisu, kt\u00f3ra wywo\u0142ywana jest w kontrolerze:\n```csharp\npublic async Task<ReviewDto> CreateReview(CreateReviewDto createReviewDto)\n{\n             var product = await context.Products\n                .Include(i => i.Reviews)\n                .SingleOrDefaultAsync(i => i.Id == productId);\n\n            if (product == null)\n                return new Result<ReviewDto>(\"Product not found.\", null);\n\n            var user = await context.Users.SingleOrDefaultAsync(i => i.Id == userContext.GetCurrentUserId());\n\n            var result = product.AddReview(user, createReviewDto.reviewText, createReviewDto.rating);\n            \n            if (!result.Succeed)\n                return new Result<ReviewDto>(result.Errors, null);\n\n            context.Entry(product);\n            await context.SaveChangesAsync();\n\n           return new Result<ReviewDto>(mapper.Map<ReviewDto>(review));\n}\n```\n\nMetoda w Product, kt\u00f3ra sprawdza dane, tworzy i dodaje Review do kolekcji:\n```csharp\npublic Result<Review> AddReview(CreateReviewDto createReviewDto)\n{\n             if (rating > 5 || rating < 1)\n                throw new ArgumentException(nameof(rating));        \/\/ wyj\u0105tek jest w tej sytuacji poprawny?\n\n            if (string.IsNullOrEmpty(reviewText))\n                return new Result<Review>(\"Review text cannot be null.\", null);\n\n            if (Reviews.Any(i => i.UserId == user.Id))\n                return new Result<Review>(\"You have already rated this product.\", null);\n\n            var review = new Review(this, user, reviewText, rating);\n            Reviews.Add(review);\n\n            return new Result<Review>(review);\n}\n```","edit_count":3,"is_voted":null,"is_accepted":null,"is_subscribed":null,"user_id":109966,"deleter_name":null,"delete_reason":null,"orderingScore":0,"created_at":"2020-11-24T19:32:37+01:00","updated_at":"2020-11-24T19:44:56+01:00","deleted_at":null,"user":{"id":109966,"name":"twoj_stary","is_online":false,"location":"Internet","allow_sig":1,"allow_count":1,"allow_smilies":0,"posts":29,"visited_at":"2026-07-01T17:01:59.000000Z","created_at":"2020-10-27T23:43:52.000000Z","initials":"TS","is_verified":false,"is_deleted":false,"is_incognito":false,"is_blocked":false,"is_blocked_perm":false,"deleted_at":null,"photo":"\/uploads\/photo\/VsaQTpLQzXCygXuMNl1Zy32tqgNNsWjciHSNnzNT.jpg"},"html":"<p>Czy zwracanie obiektu takiej klasy jest powszechn\u0105 praktyk\u0105? Przegl\u0105daj\u0105c githuby i artyku\u0142y cz\u0119sto widuj\u0119, i\u017c ludzie zwracaj\u0105 zdefiniowane przez siebie wyj\u0105tki.<br \/>\nPoni\u017cej mam kod, kt\u00f3ry ma na celu dodanie przez u\u017cytkownika recenzji do wybranego produktu. Czy o to mniej wi\u0119cej chodzi, czy jest to poprawne pod wzgl\u0119dem \"best practise\"?<\/p>\n<p>Kod w kontrolerze:<\/p>\n<div class=\"markdown-code\"><div class=\"copy-button\">Kopiuj<\/div><pre><code class=\"language-csharp line-numbers\">public async Task&lt;ActionResult&gt; AddReview(CreateReviewDto createReviewDto)\n{\n             var result = await productService.AddReview(createReviewDto);\n\n             if (!result.Succeeded)\n                         return BadRequest(new { errors = result.Errors });\n\n            return Ok(result.Data);\n}\n<\/code><\/pre><\/div>\n<p>Metoda serwisu, kt\u00f3ra wywo\u0142ywana jest w kontrolerze:<\/p>\n<div class=\"markdown-code\"><div class=\"copy-button\">Kopiuj<\/div><pre><code class=\"language-csharp line-numbers\">public async Task&lt;ReviewDto&gt; CreateReview(CreateReviewDto createReviewDto)\n{\n             var product = await context.Products\n                .Include(i =&gt; i.Reviews)\n                .SingleOrDefaultAsync(i =&gt; i.Id == productId);\n\n            if (product == null)\n                return new Result&lt;ReviewDto&gt;(\"Product not found.\", null);\n\n            var user = await context.Users.SingleOrDefaultAsync(i =&gt; i.Id == userContext.GetCurrentUserId());\n\n            var result = product.AddReview(user, createReviewDto.reviewText, createReviewDto.rating);\n            \n            if (!result.Succeed)\n                return new Result&lt;ReviewDto&gt;(result.Errors, null);\n\n            context.Entry(product);\n            await context.SaveChangesAsync();\n\n           return new Result&lt;ReviewDto&gt;(mapper.Map&lt;ReviewDto&gt;(review));\n}\n<\/code><\/pre><\/div>\n<p>Metoda w Product, kt\u00f3ra sprawdza dane, tworzy i dodaje Review do kolekcji:<\/p>\n<div class=\"markdown-code\"><div class=\"copy-button\">Kopiuj<\/div><pre><code class=\"language-csharp line-numbers\">public Result&lt;Review&gt; AddReview(CreateReviewDto createReviewDto)\n{\n             if (rating &gt; 5 || rating &lt; 1)\n                throw new ArgumentException(nameof(rating));        \/\/ wyj\u0105tek jest w tej sytuacji poprawny?\n\n            if (string.IsNullOrEmpty(reviewText))\n                return new Result&lt;Review&gt;(\"Review text cannot be null.\", null);\n\n            if (Reviews.Any(i =&gt; i.UserId == user.Id))\n                return new Result&lt;Review&gt;(\"You have already rated this product.\", null);\n\n            var review = new Review(this, user, reviewText, rating);\n            Reviews.Add(review);\n\n            return new Result&lt;Review&gt;(review);\n}\n<\/code><\/pre><\/div>\n","url":"http:\/\/static.175.128.202.116.clients.your-server.de\/Forum\/C_i_.NET\/345421-zwracanie_odpowiedzi_serwisu?p=1726835#id1726835","is_locked":false,"editor":{"id":109966,"name":"twoj_stary","is_online":false,"location":"Internet","allow_sig":1,"allow_count":1,"allow_smilies":0,"posts":29,"visited_at":"2026-07-01T17:01:59.000000Z","created_at":"2020-10-27T23:43:52.000000Z","initials":"TS","is_verified":false,"is_deleted":false,"is_incognito":false,"is_blocked":false,"is_blocked_perm":false,"deleted_at":null,"photo":"\/uploads\/photo\/VsaQTpLQzXCygXuMNl1Zy32tqgNNsWjciHSNnzNT.jpg"},"permissions":{"write":false,"delete":false,"update":false,"accept":false},"moderatorPermissions":{"delete":false,"update":false,"accept":false,"merge":false,"sticky":false,"admAccess":false},"comments":[],"comments_count":0,"assets":[],"metadata":"eyJpdiI6ImFwZzFVRjVhaExKOEZBeFpOeHdLcVE9PSIsInZhbHVlIjoiZHp0N2N4aTFTeXp3ZEpGYk1FU3FJZWhadUlWcVhSSEt1T3FhZjY4VnAxbDB2MGllMlkvWHFIZWgwbWVBaFZYRzhLNEhFdUpoeHZpcVhNM2hnNk5QWGNmSFd4RGJrTXdqTi91TXEwZzNTd3A0UFZycFh4UkM3TlQ2enZ5bGRTSmsiLCJtYWMiOiIyM2YzNGVmNjQ0MWI0MTc3NGYyYzYyMzQ0MzNiZmVmZGI3NjJhZmQ0OTQxMmQxYjljYTQ1MjI5MTIxYjhlMTg0IiwidGFnIjoiIn0=","has_review":false,"review_style":"info","parentPostId":null,"childrenFolded":false,"type":"regular","highlighted":false}