In the previous posting we saw how to create an API to get all the cars in our database. In this posting we’ll look at the remaining CRUD (Create Review Update Delete) operations.
As you may remember, we created a controller named CarController. ASP.NET will strip off the word Controller, leaving us with Car, which we will use to access the endpoints of our API.
An endpoint is just a URL that takes us to the operation we want.
We looked at GetAll, let’s take a look at Get. In this case, we have an id for the car we want, but we want all the details of that car. Simple!
First we need a method in our controller:
[HttpGet("{id}")] public async Task<ActionResult<Car>> Get(int id) { var car = await _carRepository.Get(id); if (car == null) { return NotFound(); } return car; }
Notice that next to the HttpGet attribute we indicate that the endpoint will take the id of the car we want
[HttpGet("{id}")]
This means we need to modify the URL to access the endpoint by adding the actual id of the desired record.
The first thing we do is call the repository, passing in the id.
public async Task<Car?> Get(int id) { var query = "select * from car where id=@id"; using var db = databaseConnectionFactory.GetConnection(); return await db.QuerySingleOrDefaultAsync<Car>(query, new {id}); }
In the Get method of the repo we create our query, get our connection and execute the query returning the value we retrieved (if any). This is very close to what we did previously.
Back in the controller, we check to ensure that we received a Car. If not, we return NotFound which is a shorthand way of returning a 404 message. Otherwise we return the Car as a Json object. You can see this in Postman:
We’ll issue a Get command passing in the URL, ending with the id of the car we want (in this case 4)
Notice that we get back a 200, indicating success. In the body of the returned Json we get back all the details of the Car. (If you decide to use DTOs you can get whatever subset of the information makes sense):
Post
Adding a Car to the database is quite similar. We need a method in the controller and one in the repo. Here is the controller method:
[HttpPost] public async Task<ActionResult<Car>> Post([FromBody] Car car) { try { car = await _carService.Insert(car); } catch (Exception e) { return BadRequest(e); } return CreatedAtAction(nameof(Get), new { id = car.Id }, car); }
Look at the attribute in the parameter ([FromBody]. This indicates to the API that the data needed to insert this Car will be in the body of the call. The alternative is FromQuery. You can, in fact, use both in one call.
Note: CreatedAction causes a return code of 201, which is what we want. Here’s the body we’ll insert:
When we click Send this data is sent to the API which returns 201 (created) and in the body of the returned data we see the new id assigned to this car
Service Class
Notice that this time, instead of calling the Repo directly, the method in the controller calls into a service class. A service class is a great way to get the logic out of the controller, where it does not belong, without putting it into the repo, where it also does not belong.
Here’s the top of the CarService
public class CarService : ICarService { private readonly ICarRepository _carRepository; public CarService(ICarRepository carRepository) { _carRepository = carRepository; } public async Task<Car> Insert(Car car) { var newId = await _carRepository.UpsertAsync(car); if (newId > 0) { car.Id = newId; } else { throw new Exception("Failed to insert car"); } return car; }
All the logic associated with this insert (e.g., making sure we get back a legitimate id from the repository, etc.) is encapsulated in the service.
This leaves the repository free to just talk to the database,
public async Task<int> UpsertAsync(Car car) { using var db = databaseConnectionFactory.GetConnection(); var sql = @" DECLARE @InsertedRows AS TABLE (Id int); MERGE INTO Car AS target USING (SELECT @Id AS Id, @Name AS Name, @Model_Year AS Model_Year, @Is_Deleted AS Is_Deleted, @Origin AS origin ) AS source ON target.Id = source.Id WHEN MATCHED THEN UPDATE SET Name = source.Name, Model_Year = source.Model_Year, Is_Deleted = source.Is_Deleted, Origin = source.Origin WHEN NOT MATCHED THEN INSERT (Name, Model_Year, Is_Deleted, Origin) VALUES (source.Name, source.Model_Year, source.Is_Deleted, source.Origin) OUTPUT inserted.Id INTO @InsertedRows ; SELECT Id FROM @InsertedRows; "; var newId = await db.QuerySingleOrDefaultAsync<int>(sql, car); return newId == 0 ? car.Id : newId; }
Rather than having an insert and an update method, we combine that logic into this upsert method. This is a common idiom for database manipulation.
Note: to make this work, be sure to fill in all the fields for a car (or at least as many as you want to have in the Database.
Delete
As noted earlier, we will implement a soft delete; that is, rather than actually removing the data from the database, we’ll just set the is_deleted column to true. This allows us to reverse the action, and make the row not-deleted by simply changing that value to false.
[HttpDelete(“{id}”)]
public async Task<IActionResult> Delete(int id)
{
try
{
await _carService.Delete(id);
}
catch (Exception e)
{
return BadRequest(e);
}
return NoContent();
}
As you would expect, the endpoint takes an id (the id of the car we want to delete). The controller then hands that off to the service, which calls the repository which, in turn, marks that id as deleted:
public async Task<int> DeleteAsync(int id) { using var db = databaseConnectionFactory.GetConnection(); var query = "UPDATE car SET Is_Deleted = 1 WHERE Id = @Id"; return await db.ExecuteAsync(query, new { Id = id }); }
If you are comfortable with SQL none of this will be very surprising. The key walkaway is:
Summary
In this post we saw that endpoints are just URLs with (potentially) data in the body of the request. The controller handles the URL and in our case passes the id or other data to the service. The service handles the (business) logic and then delegates talking to the database to the repository.
Book
This posting is excerpted from my forthcoming book Building APIs with .NET and C# to be released next year by Packt.
how to use a bong
This is a great overview. Thanks for sharing.
Врач уточняет длительность запоя, тип употребляемого алкоголя и наличие сопутствующих заболеваний. Тщательный анализ этой информации позволяет оперативно определить степень интоксикации и подобрать наиболее эффективные методы терапии, минимизируя риск осложнений.
Детальнее – наркологический вывод из запоя
Использование автоматизированных систем дозирования обеспечивает точное введение медикаментов, минимизируя риск передозировки и побочных эффектов. Постоянный мониторинг жизненно важных показателей позволяет врачу оперативно корректировать терапевтическую схему, адаптируя её к изменяющемуся состоянию пациента и обеспечивая максимальную безопасность лечения.
Детальнее – наркологический вывод из запоя тула
Анализ рынка услуг экстренной помощи в Тюмени позволяет выделить следующие ориентировочные цены:
Получить дополнительные сведения – вывод из запоя круглосуточно владимир
крипторынок аналитика Топ токенов роста демонстрируют устойчивую динамику и потенциал для дальнейшего увеличения стоимости.
Запой — одно из самых опасных проявлений алкогольной зависимости. Он сопровождается глубокой интоксикацией организма, нарушением работы сердца, печени, головного мозга и других жизненно важных систем. Когда человек не может остановиться самостоятельно, а организм больше не справляется с нагрузкой, требуется медицинская помощь. В наркологической клинике «Спасение» в Мытищах мы проводим экстренные процедуры инфузионной терапии, позволяющие эффективно и безопасно вывести пациента из состояния запоя. Капельница — это первый шаг на пути к восстановлению здоровья и возвращению к нормальной жизни.
Получить дополнительные сведения – поставить капельницу от запоя
Whats up are using WordPress for your blog platform? I’m new to the blog world but I’m trying to get started and set up my own. Do you need any html coding expertise to make your own blog? Any help would be greatly appreciated!
Trusted by pros — 88fb login is the best casino to join
Вызов врача-нарколога на дом в Санкт-Петербурге начинается с детального осмотра и оценки состояния пациента. Врач измеряет давление, пульс, уровень кислорода в крови и определяет степень интоксикации.
Подробнее тут – https://narcolog-na-dom-sankt-peterburg00.ru/narkolog-na-dom-czena-spb/
Медикаментозное кодирование проводится с помощью препаратов, блокирующих ферменты, ответственные за расщепление этанола, что вызывает выраженное неприятие алкоголя при попытке его употребления. Препараты вводятся внутримышечно или с помощью подкожных имплантов и действуют в течение нескольких месяцев, обеспечивая длительный эффект.
Подробнее – http://kodirovanie-ot-alkogolizma-odintsovo2.ru/kodirovanie-ot-alkogolizma-cena/
«Сибирский Доктор» оснащён передовыми медицинскими аппаратами и программным обеспечением для контроля за пациентом на каждом этапе лечения:
Подробнее можно узнать тут – вывод из запоя на дому круглосуточно
индивидуальное обучение кайтсёрфингу в хургаде с нуля за дня.
293936 909396We clean up on completion. This may sound obvious but not numerous a plumber in Sydney does. We wear uniforms and always treat your home or workplace with respect. 717578
двутавр Продажа в Алматы Шымкенте и Астане Продажа металлопроката в Алматы, Шымкенте, Астане. Рынок металлопроката в Алматы, Шымкенте и Астане представлен множеством компаний, однако выбор правильного партнера – залог успешного завершения любого проекта. Важно учитывать не только стоимость продукции, но и ее качество, соответствие стандартам, а также репутацию поставщика. Компания Модуль Сталь предлагает Вам широкий спектр продукции: арматуру различных диаметров, стальные листы, оцинкованный профнастил, уголки, швеллеры и многое другое. Это позволяет клиенту приобрести все необходимое в одном месте, экономя время и ресурсы. Важным фактором нашей компании является наличие собственных складских помещений и развитой логистической сети, что обеспечивает оперативную доставку металлопроката на строительные площадки и производственные предприятия.
Серьезные состояния, вызванные длительным употреблением алкоголя или наркотиков, требуют немедленного вмешательства. Если пациент испытывает ухудшение самочувствия вследствие продолжительного запоя, его организм начинает накапливать токсичные вещества, что ведёт к нарушению работы внутренних органов. При появлении таких симптомов, как сильная рвота, спутанность сознания, судороги, резкие скачки артериального давления, а также выраженные признаки абстинентного синдрома (сильная дрожь, панические атаки, бессонница, тревожность), вызов нарколога становится жизненно необходимым. Экстренное вмешательство позволяет стабилизировать состояние больного и предотвратить развитие серьёзных осложнений, включая сердечно-сосудистые нарушения, повреждение печени и развитие алкогольного психоза. В таких ситуациях профессиональное лечение на дому — лучший способ сохранить здоровье и жизнь пациента.
Углубиться в тему – https://narcolog-na-dom-ekaterinburg000.ru/zapoj-narkolog-na-dom-ekb
best crypto wallet Bitcoin, Ethereum, DeFi и Blockchain Новости: Оставайтесь в Курсе Событий Чтобы не упустить важные события, следите за Bitcoin, Ethereum, DeFi и blockchain новостями. Актуальная информация поможет принимать взвешенные решения.
Когда организм на пределе, важна срочная помощь в Сочи — это команда опытных наркологов, которые помогут быстро и мягко выйти из запоя без вреда для здоровья.
Подробнее тут – наркология вывод из запоя
Hi are using WordPress for your blog platform? I’m new to the blog world but I’m trying to get started and set up my own. Do you need any coding knowledge to make your own blog? Any help would be greatly appreciated!
abu dhabi bus card balance check online
Запой — одно из самых опасных проявлений алкогольной зависимости. Он сопровождается глубокой интоксикацией организма, нарушением работы сердца, печени, головного мозга и других жизненно важных систем. Когда человек не может остановиться самостоятельно, а организм больше не справляется с нагрузкой, требуется медицинская помощь. В наркологической клинике «Спасение» в Мытищах мы проводим экстренные процедуры инфузионной терапии, позволяющие эффективно и безопасно вывести пациента из состояния запоя. Капельница — это первый шаг на пути к восстановлению здоровья и возвращению к нормальной жизни.
Исследовать вопрос подробнее – https://kapelnica-ot-zapoya-moskva2.ru/kapelnica-ot-zapoya-cena-v-mytishchah/
Обращение за медицинской помощью становится необходимым, когда пациент пребывает в состоянии, требующем немедленного вмешательства, так как самостоятельное лечение может только усугубить ситуацию. Это происходит, если запой продолжается несколько дней, и организм не успевает справляться с накопившимися токсинами, что ведёт к нарушению работы внутренних органов. Если у пациента регулярно наблюдаются симптомы, такие как частая рвота, сильное головокружение, спутанность сознания, судороги или резкие колебания артериального давления, это является явным сигналом к вызову специалиста. Особенно важно обращаться за помощью при выраженных признаках абстинентного синдрома, когда сильная дрожь, панические атаки, бессонница, тревожность и даже галлюцинации свидетельствуют о том, что организм испытывает критическую нехватку поддержки. Наличие психических нарушений, таких как агрессивное поведение, спутанность сознания или признаки алкогольного психоза, также требует незамедлительного вмешательства. В таких ситуациях обращение за профессиональной помощью помогает быстро стабилизировать состояние пациента, предотвратить развитие тяжелых осложнений и сохранить жизнь.
Подробнее можно узнать тут – нарколог на дом анонимно
погода в хургаде в апреле 2023
This is very interesting, You’re a very skilled blogger. I have joined your rss feed and look forward to seeking more of your excellent post. Also, I’ve shared your site in my social networks!
how to get bus card in abu dhabi
Для максимальной эффективности и безопасности «Красмед» использует комбинированные подходы:
Ознакомиться с деталями – narkolog-vyvod-iz-zapoya krasnojarsk
straight goods vape
Very informative blog, highly recommended
steam mobile authenticator it is a desktop emulator of the Steam authentication mobile application. This desktop application allows users to manage their two-factor authentication easily, ensuring that only you can access your account.
sda steam it is a desktop emulator of the Steam authentication mobile application. This desktop application allows users to manage their two-factor authentication easily, ensuring that only you can access your account.
I’ve been surfing online greater than three hours today,
yet I by no means found any fascinating article like yours.
It is pretty worth enough for me. Personally, if all website owners and bloggers made just right content material as you probably did, the web
can be a lot more useful than ever before.
Feel free to visit my web page; slimjaro
Клиника «Стоп Алко» — надёжная медицинская поддержка при острой интоксикации. Наши специалисты приезжают на вызов, очищают организм, стабилизируют общее состояние. Эффективно, бережно, с минимальным дискомфортом.
Получить дополнительные сведения – 2 стадия алкоголизма
Эта статья полна интересного контента, который побудит вас исследовать новые горизонты. Мы собрали полезные факты и удивительные истории, которые обогащают ваше понимание темы. Читайте, погружайтесь в детали и наслаждайтесь процессом изучения!
Детальнее – https://jyan.fr/bonjour-tout-le-monde
Эта статья полна интересного контента, который побудит вас исследовать новые горизонты. Мы собрали полезные факты и удивительные истории, которые обогащают ваше понимание темы. Читайте, погружайтесь в детали и наслаждайтесь процессом изучения!
Узнать больше – http://autosport.news/ean2-2
Эта статья предлагает живое освещение актуальной темы с множеством интересных фактов. Мы рассмотрим ключевые моменты, которые делают данную тему важной и актуальной. Подготовьтесь к насыщенному путешествию по неизвестным аспектам и узнайте больше о значимых событиях.
Выяснить больше – http://www.andyliffner.com/?attachment_id=99
Эта статья предлагает захватывающий и полезный контент, который привлечет внимание широкого круга читателей. Мы постараемся представить тебе идеи, которые вдохновят вас на изменения в жизни и предоставят практические решения для повседневных вопросов. Читайте и вдохновляйтесь!
Исследовать вопрос подробнее – https://debalzaq.com/life/mysterious-ways
I absolutely love your blog and find most of your post’s to be just what I’m looking for. Do you offer guest writers to write content in your case? I wouldn’t mind producing a post or elaborating on a lot of the subjects you write regarding here. Again, awesome site!
hafilat balance check
Hi, I think your website might be having browser compatibility issues. When I look at your blog site in Opera, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, fantastic blog!
japan porno
В этой информационной статье вы найдете интересное содержание, которое поможет вам расширить свои знания. Мы предлагаем увлекательный подход и уникальные взгляды на обсуждаемые темы, побуждая пользователей к активному мышлению и критическому анализу!
Получить больше информации – https://amvibiotech.com/discuss-the-top-online-dating-sites-in-to-the
Сергей Бидус кидало
Today, I went to the beachfront with my kids. I found a sea shell and gave it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She placed the shell to her ear and screamed. There was a hermit crab inside and it pinched her ear. She never wants to go back! LoL I know this is completely off topic but I had to tell someone!
https://eebc.net.ua/idealne-osvitlennya-yak-obrati-optimalni-bi-led-linzi
I’m gone to inform my little brother, that he should also pay a visit this blog on regular basis to get updated from most up-to-date gossip.
hafilat card
Когда организм на пределе, важна срочная помощь в Сочи — это команда опытных наркологов, которые помогут быстро и мягко выйти из запоя без вреда для здоровья.
Разобраться лучше – наркология вывод из запоя
После диагностики начинается активная фаза капельничного лечения. Современные препараты вводятся с помощью автоматизированных систем дозирования, что обеспечивает быстрое снижение уровня токсинов в крови и восстановление обменных процессов. Этот этап направлен на стабилизацию работы печени, почек и сердечно-сосудистой системы.
Получить больше информации – https://kapelnica-ot-zapoya-lugansk-lnr00.ru/vyzvat-kapelniczu-ot-zapoya-lugansk-lnr/
Hello there, You’ve done a great job. I’ll certainly digg it and personally recommend to my friends. I’m confident they’ll be benefited from this web site.
hafilat
I savour, lead to I found just what I was having a look for. You’ve ended my 4 day long hunt! God Bless you man. Have a great day. Bye
hafilat balance check