Anlatıma geçmeden önce AspNet Core 8.0 ile geliştirdiğimiz bu projeye ait linkleri aşağıda sıraladım.
AspNet Core 8.0 projesi için linkler
Ayrıca bir önceki yazıyı okumadıysanız;
AspNet Core ile geliştirdiğimiz projenin bu bölümünde “hizmetler” kısmına verilerimizi getirerek devam ediyoruz.
API Tarafını Güncelleyelim – REAL ESTATE ASPNET CORE 8.0
İlk olarak api tarafı ile başladık. Çünkü ServiceComponent’e veri çekebilmemiz için data tarafı ile bağlantımızın hazır olması gerekiyor.
API Projesi > Repositories > ServiceRepository
Yukarıdaki adresin içerisine iki öğe ekliyoruz. Bu öğeler;
- ServiceRepository.cs ( Class’dan türettik )
- IServiceRepository.cs ( Interface’den türettik )
Şimdi datadan dönen veriyi bir class’a oturtabilmek için DTO’lar ekleyeceğiz. Bunun için şu yolda yeni bir klasör oluşturuyoruz;
API Projesi > Dtos > ServiceDtos
SerivceDtos adında bir klasör oluşturduk. Ardından içerisine DTO’larımızı tanımlayacağız. Bunun için klasörün içine ResultServiceDto adından ilk DTO’muzu class olarak oluşturalım.
namespace RealEstate_Dapper_Api.Dtos.ServiceDtos
{
public class ResultServiceDto
{
public int ServiceID { get; set; }
public string ServiceName { get; set; }
public bool ServiceStatus { get; set; }
}
}
ResultServiceDto’muz yukarıdaki koddaki gibi olacak. Create metodumuz için de DTO oluşturalım.
namespace RealEstate_Dapper_Api.Dtos.ServiceDtos
{
public class CreateServiceDto
{
public string ServiceName { get; set; }
public bool ServiceStatus { get; set; }
}
}
Burada ID’ye ihtiyacımız yok. ID Database tarafından otomatik olarak atanacak.
Update metodumuz için de bir DTO hazırlayalım;
namespace RealEstate_Dapper_Api.Dtos.ServiceDtos
{
public class UpdateServiceDto
{
public int ServiceID { get; set; }
public string ServiceName { get; set; }
public bool ServiceStatus { get; set; }
}
}
Burada ID’ye de ihtiyaç duyacağız. Çünkü hangi Service olduğunu bilmemizi sağlayacak. ID’ler benzersiz numaralar olduğu için direkt olarak ilgili service’i işaret edecek. Bir de GetByID işlemi için DTO tanımlayalım;
namespace RealEstate_Dapper_Api.Dtos.ServiceDtos
{
public class GetByIDServiceDto
{
public int ServiceID { get; set; }
public string ServiceName { get; set; }
public bool ServiceStatus { get; set; }
}
}
Şimdi IServiceRepository interface’ine dönelim ve ilgili metodlarımızın imzalarını tanımlayalım.
using RealEstate_Dapper_Api.Dtos.ServiceDtos;
namespace RealEstate_Dapper_Api.Repositories.ServiceRepository
{
public interface IServiceRepository
{
Task<List<ResaultServiceDto>> GetAllServiceAsync();
void CreateService(CreateServiceDto serviceDto);
void DeleteService(int id);
void UpdateService(UpdateServiceDto serviceDto);
Task<GetByIDServiceDto> GetService(int id);
}
}
Interface’i tanımladığımıza göre ServiceRepository’e giderek kalıtım almasını ve metodların implemente edilmesini sağlamalıyız;
using RealEstate_Dapper_Api.Dtos.ServiceDtos;
namespace RealEstate_Dapper_Api.Repositories.ServiceRepository
{
public class ServiceRepository : IServiceRepository
{
public Task<List<ResaultServiceDto>> GetAllServiceAsync()
{
throw new NotImplementedException();
}
public void CreateService(CreateServiceDto serviceDto)
{
throw new NotImplementedException();
}
public void DeleteService(int id)
{
throw new NotImplementedException();
}
public void UpdateService(UpdateServiceDto serviceDto)
{
throw new NotImplementedException();
}
public Task<GetByIDServiceDto> GetService(int id)
{
throw new NotImplementedException();
}
}
}
Sınıfın yanına “: IServiceRepository” yazdıktan sonra üzerine gelip açılan menüde implement interface dedik ve tüm metotlar boş bir şekilde bizim için oluşturuldu.
Burada ilk olarak context sınıfı oluşturarak db’ye bağlantı isteği atabilmemizi sağlayalım;
private readonly Context _context;
public ServiceRepository(Context context)
{
_context = context;
}
Bu kodları class’ın içinde, metodların hizasında yazmalıyız. Ardından ilk metodumuz olarak GetAllServiceAsync metodunu güncelleyeceğiz. Diğerlerine ilerleyen derslerde bakacağız.
public async Task<List<ResaultServiceDto>> GetAllServiceAsync()
{
string query = "Select * From Service";
using(var connection = _context.CreateConnection())
{
var values = await connection.QueryAsync<ResaultServiceDto>(query);
return values.ToList();
}
}
Metodumuzu yukarıdaki koddaki gibi düzenliyoruz. Bu sayede Service tablosundaki tüm verileri ResaultServiceDto’dan bir neste türeterek bir listenin içinde bize verecek. Burada dikkat etmemiz gereken metodu async ile işaretlemek. Çünkü asenkron bir işlem yapıyoruz. values değerini doldururken await ile zaman isteyecek bir işlem yapıyoruz.
Şimdi API tarafında gözükebilmesi için API Controller‘a ihtiyacımız var. Bunun için aşağıdaki adreste bir kontroller tanımlıyoruz;
API Projesi > Controller
ServiceController’ımızı oluşturduktan sonra bir IServiceRepository’den serviceRepository örneği oluşturacağız ve aynı zamanda constructor metodunu da oluşturacağız.
private readonly IServiceRepository _serviceRepository;
public ServicesController(IServiceRepository serviceRepository)
{
_serviceRepository = serviceRepository;
}
Ardından ilk API end pointimizi yazalım.
[HttpGet]
public IActionResult GetServiceList()
{
var result = _serviceRepository.GetAllServiceAsync();
return Ok(result);
}
Kodları yazdıktan sonra APIController’ımız bu şekilde gözükmeli.
Şimdi ise Program.cs tarafında bir işlem yapacağız.
builder.Services.AddTransient<IServiceRepository, ServiceRepository>();
kodunu uygun yere yapıştırmalıyız.
Bir de unutmadan API’mizi async olarak işaretlemeliyiz. Yani ServiceController’da GetServiceList metodu şu şekilde gözükmeli;
[HttpGet]
public async Task<IActionResult> GetServiceList()
{
var result = await _serviceRepository.GetAllServiceAsync();
return Ok(result);
}
Result’a veri aktaracak kısmı da await ile bekliyor olmalıyız. IActionResult’u da Task olarak işaretlemeliyiz.
Bunu yapıp test ettiğimizde;
Verilerin geldiğini görüyoruz.
UI Katmanında Verileri Getirelim
Verileri düzgün bir formatta getirebilmek için Dtos klasöründe Service için bir klasör oluşturup ilgili dto sınıflarını burada tanımlayacağız. ServiceDtos klasörü oluşturduktan sonra içine bir class oluşturuyoruz ve adına ReaultServiceDto diyoruz.
namespace RealEstate_Dapper_UI.Dtos.ServiceDtos
{
public class ResaultServiceDto
{
public int ServiceID { get; set; }
public string ServiceName { get; set; }
public bool ServiceStatus { get; set; }
}
}
Sınıfı da yukarıdaki gibi dolduruyoruz.
Evet bu derslik bu kadardı. Bir sonraki derste verilerimizi componente çekiyor olacağız.