using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
public int Id { get; set; }
public string Model { get; set; } = string.Empty;
public decimal HourlyRate { get; set; }
public decimal PerKmRate { get; set; }
public int Id { get; set; }
public string FullName { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public int Id { get; set; }
public int CustomerId { get; set; }
public int TeslaCarId { get; set; }
public DateTime RentalStart { get; set; }
public DateTime? RentalEnd { get; set; }
public int? KilometersDriven { get; set; }
public decimal? TotalPayment { get; set; }
public Customer? Customer { get; set; }
public TeslaCar? TeslaCar { get; set; }
public class RentalDbContext : DbContext
public DbSet<TeslaCar> TeslaCars { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Rental> Rentals { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseSqlite("Data Source=tesla_rental.db");
protected override void OnModelCreating(ModelBuilder modelBuilder)
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<TeslaCar>().HasData(
new TeslaCar { Id = 1, Model = "Model 3", HourlyRate = 15, PerKmRate = 0.5M },
new TeslaCar { Id = 2, Model = "Model Y", HourlyRate = 20, PerKmRate = 0.7M }
public class CustomerService
public Customer RegisterCustomer(string fullName, string email)
using var context = new RentalDbContext();
var customer = new Customer { FullName = fullName, Email = email };
context.Customers.Add(customer);
public class RentalService
public List<TeslaCar> GetAvailableCars()
using var context = new RentalDbContext();
return context.TeslaCars.ToList();
public Rental StartRental(int customerId, int carId)
using var context = new RentalDbContext();
RentalStart = DateTime.Now
context.Rentals.Add(rental);
public Rental EndRental(int rentalId, int kilometersDriven)
using var context = new RentalDbContext();
var rental = context.Rentals
.Include(r => r.TeslaCar)
.FirstOrDefault(r => r.Id == rentalId);
if (rental == null || rental.RentalEnd != null)
throw new Exception("Rental not found or already ended!");
rental.RentalEnd = DateTime.Now;
rental.KilometersDriven = kilometersDriven;
var hours = (rental.RentalEnd.Value - rental.RentalStart).TotalHours;
rental.TotalPayment = (decimal)hours * rental.TeslaCar!.HourlyRate +
kilometersDriven * rental.TeslaCar.PerKmRate;
static void Main(string[] args)
using var context = new RentalDbContext();
context.Database.EnsureCreated();
var customerService = new CustomerService();
var rentalService = new RentalService();
var customer = customerService.RegisterCustomer("John Doe", "john.doe@example.com");
Console.WriteLine($"Customer registered: {customer.FullName} ({customer.Email})");
var cars = rentalService.GetAvailableCars();
Console.WriteLine("Available Tesla cars:");
foreach (var car in cars)
Console.WriteLine($"- {car.Model}: {car.HourlyRate} EUR/h, {car.PerKmRate} EUR/km");
var rental = rentalService.StartRental(customer.Id, cars.First().Id);
Console.WriteLine($"Rental started for customer {customer.FullName} with car {cars.First().Model} at {rental.RentalStart}");
var endedRental = rentalService.EndRental(rental.Id, 100);
Console.WriteLine($"Rental ended. Total payment: {endedRental.TotalPayment} EUR");