diff --git a/barkmanAPI/Migrations/20260725205242_change_datetimeoffset_to_datetime.Designer.cs b/barkmanAPI/Migrations/20260725205242_change_datetimeoffset_to_datetime.Designer.cs
new file mode 100644
index 0000000..ff88fbd
--- /dev/null
+++ b/barkmanAPI/Migrations/20260725205242_change_datetimeoffset_to_datetime.Designer.cs
@@ -0,0 +1,294 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using barkmanapi;
+
+#nullable disable
+
+namespace barkmanapi.Migrations
+{
+ [DbContext(typeof(BarkContext))]
+ [Migration("20260725205242_change_datetimeoffset_to_datetime")]
+ partial class change_datetimeoffset_to_datetime
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.1")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("barkmanapi.Customers", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .HasColumnType("text")
+ .HasColumnName("address");
+
+ b.Property("BillingTerms")
+ .HasColumnType("text")
+ .HasColumnName("billing_terms");
+
+ b.Property("Company")
+ .HasColumnType("text")
+ .HasColumnName("company");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("email");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Notes")
+ .HasColumnType("text")
+ .HasColumnName("notes");
+
+ b.Property("PhoneNumber")
+ .HasColumnType("text")
+ .HasColumnName("phone_number");
+
+ b.HasKey("Id")
+ .HasName("pk_customers");
+
+ b.ToTable("customers", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.InventoryItems", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Barcode")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("barcode");
+
+ b.Property("Brand")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("brand");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Notes")
+ .HasColumnType("text")
+ .HasColumnName("notes");
+
+ b.Property("RentalPrice")
+ .HasColumnType("real")
+ .HasColumnName("rental_price");
+
+ b.Property("ReplacementCost")
+ .HasColumnType("real")
+ .HasColumnName("replacement_cost");
+
+ b.Property("SerialNumber")
+ .HasColumnType("text")
+ .HasColumnName("serial_number");
+
+ b.Property("StatusId")
+ .HasColumnType("text")
+ .HasColumnName("status_id");
+
+ b.Property("Weight")
+ .HasColumnType("real")
+ .HasColumnName("weight");
+
+ b.HasKey("Id")
+ .HasName("pk_inventory");
+
+ b.HasIndex("Barcode")
+ .IsUnique()
+ .HasDatabaseName("ix_inventory_barcode");
+
+ b.HasIndex("StatusId")
+ .HasDatabaseName("ix_inventory_status_id");
+
+ b.ToTable("inventory", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.ItemStatus", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("text")
+ .HasColumnName("id");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.HasKey("Id")
+ .HasName("pk_item_status");
+
+ b.ToTable("item_status", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.JobItems", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ItemId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("item_id");
+
+ b.Property("JobId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("job_id");
+
+ b.Property("JobsId")
+ .HasColumnType("integer")
+ .HasColumnName("jobs_id");
+
+ b.Property("Quantity")
+ .HasColumnType("integer")
+ .HasColumnName("quantity");
+
+ b.HasKey("Id")
+ .HasName("pk_job_items");
+
+ b.HasIndex("JobsId")
+ .HasDatabaseName("ix_job_items_jobs_id");
+
+ b.ToTable("job_items", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.JobStatus", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("text")
+ .HasColumnName("id");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.HasKey("Id")
+ .HasName("pk_job_status");
+
+ b.ToTable("job_status", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .HasColumnType("text")
+ .HasColumnName("address");
+
+ b.Property("CustomerId")
+ .HasColumnType("integer")
+ .HasColumnName("customer_id");
+
+ b.Property("EndDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("end_date");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Notes")
+ .HasColumnType("text")
+ .HasColumnName("notes");
+
+ b.Property("StartDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("start_date");
+
+ b.Property("StatusId")
+ .HasColumnType("text")
+ .HasColumnName("status_id");
+
+ b.Property("TotalPrice")
+ .HasColumnType("numeric")
+ .HasColumnName("total_price");
+
+ b.Property("Venue")
+ .HasColumnType("text")
+ .HasColumnName("venue");
+
+ b.HasKey("Id")
+ .HasName("pk_jobs");
+
+ b.HasIndex("StatusId")
+ .HasDatabaseName("ix_jobs_status_id");
+
+ b.ToTable("jobs", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.InventoryItems", b =>
+ {
+ b.HasOne("barkmanapi.ItemStatus", "Status")
+ .WithMany()
+ .HasForeignKey("StatusId")
+ .HasConstraintName("fk_inventory_item_status_status_id");
+
+ b.Navigation("Status");
+ });
+
+ modelBuilder.Entity("barkmanapi.JobItems", b =>
+ {
+ b.HasOne("barkmanapi.Jobs", null)
+ .WithMany("Items")
+ .HasForeignKey("JobsId")
+ .HasConstraintName("fk_job_items_jobs_jobs_id");
+ });
+
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
+ {
+ b.HasOne("barkmanapi.JobStatus", "Status")
+ .WithMany()
+ .HasForeignKey("StatusId")
+ .HasConstraintName("fk_jobs_job_status_status_id");
+
+ b.Navigation("Status");
+ });
+
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
+ {
+ b.Navigation("Items");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/barkmanAPI/Migrations/20260725205242_change_datetimeoffset_to_datetime.cs b/barkmanAPI/Migrations/20260725205242_change_datetimeoffset_to_datetime.cs
new file mode 100644
index 0000000..44809f2
--- /dev/null
+++ b/barkmanAPI/Migrations/20260725205242_change_datetimeoffset_to_datetime.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace barkmanapi.Migrations
+{
+ ///
+ public partial class change_datetimeoffset_to_datetime : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+
+ }
+ }
+}
diff --git a/barkmanAPI/Migrations/20260725205905_splitdatetimeIntoSeprateFeileds.Designer.cs b/barkmanAPI/Migrations/20260725205905_splitdatetimeIntoSeprateFeileds.Designer.cs
new file mode 100644
index 0000000..4142fc1
--- /dev/null
+++ b/barkmanAPI/Migrations/20260725205905_splitdatetimeIntoSeprateFeileds.Designer.cs
@@ -0,0 +1,302 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using barkmanapi;
+
+#nullable disable
+
+namespace barkmanapi.Migrations
+{
+ [DbContext(typeof(BarkContext))]
+ [Migration("20260725205905_splitdatetimeIntoSeprateFeileds")]
+ partial class splitdatetimeIntoSeprateFeileds
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.1")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("barkmanapi.Customers", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .HasColumnType("text")
+ .HasColumnName("address");
+
+ b.Property("BillingTerms")
+ .HasColumnType("text")
+ .HasColumnName("billing_terms");
+
+ b.Property("Company")
+ .HasColumnType("text")
+ .HasColumnName("company");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("email");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Notes")
+ .HasColumnType("text")
+ .HasColumnName("notes");
+
+ b.Property("PhoneNumber")
+ .HasColumnType("text")
+ .HasColumnName("phone_number");
+
+ b.HasKey("Id")
+ .HasName("pk_customers");
+
+ b.ToTable("customers", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.InventoryItems", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Barcode")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("barcode");
+
+ b.Property("Brand")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("brand");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Notes")
+ .HasColumnType("text")
+ .HasColumnName("notes");
+
+ b.Property("RentalPrice")
+ .HasColumnType("real")
+ .HasColumnName("rental_price");
+
+ b.Property("ReplacementCost")
+ .HasColumnType("real")
+ .HasColumnName("replacement_cost");
+
+ b.Property("SerialNumber")
+ .HasColumnType("text")
+ .HasColumnName("serial_number");
+
+ b.Property("StatusId")
+ .HasColumnType("text")
+ .HasColumnName("status_id");
+
+ b.Property("Weight")
+ .HasColumnType("real")
+ .HasColumnName("weight");
+
+ b.HasKey("Id")
+ .HasName("pk_inventory");
+
+ b.HasIndex("Barcode")
+ .IsUnique()
+ .HasDatabaseName("ix_inventory_barcode");
+
+ b.HasIndex("StatusId")
+ .HasDatabaseName("ix_inventory_status_id");
+
+ b.ToTable("inventory", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.ItemStatus", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("text")
+ .HasColumnName("id");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.HasKey("Id")
+ .HasName("pk_item_status");
+
+ b.ToTable("item_status", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.JobItems", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ItemId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("item_id");
+
+ b.Property("JobId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("job_id");
+
+ b.Property("JobsId")
+ .HasColumnType("integer")
+ .HasColumnName("jobs_id");
+
+ b.Property("Quantity")
+ .HasColumnType("integer")
+ .HasColumnName("quantity");
+
+ b.HasKey("Id")
+ .HasName("pk_job_items");
+
+ b.HasIndex("JobsId")
+ .HasDatabaseName("ix_job_items_jobs_id");
+
+ b.ToTable("job_items", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.JobStatus", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("text")
+ .HasColumnName("id");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.HasKey("Id")
+ .HasName("pk_job_status");
+
+ b.ToTable("job_status", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .HasColumnType("text")
+ .HasColumnName("address");
+
+ b.Property("CustomerId")
+ .HasColumnType("integer")
+ .HasColumnName("customer_id");
+
+ b.Property("EndDate")
+ .HasColumnType("date")
+ .HasColumnName("end_date");
+
+ b.Property("EndTime")
+ .HasColumnType("time without time zone")
+ .HasColumnName("end_time");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Notes")
+ .HasColumnType("text")
+ .HasColumnName("notes");
+
+ b.Property("StartDate")
+ .HasColumnType("date")
+ .HasColumnName("start_date");
+
+ b.Property("StartTime")
+ .HasColumnType("time without time zone")
+ .HasColumnName("start_time");
+
+ b.Property("StatusId")
+ .HasColumnType("text")
+ .HasColumnName("status_id");
+
+ b.Property("TotalPrice")
+ .HasColumnType("numeric")
+ .HasColumnName("total_price");
+
+ b.Property("Venue")
+ .HasColumnType("text")
+ .HasColumnName("venue");
+
+ b.HasKey("Id")
+ .HasName("pk_jobs");
+
+ b.HasIndex("StatusId")
+ .HasDatabaseName("ix_jobs_status_id");
+
+ b.ToTable("jobs", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.InventoryItems", b =>
+ {
+ b.HasOne("barkmanapi.ItemStatus", "Status")
+ .WithMany()
+ .HasForeignKey("StatusId")
+ .HasConstraintName("fk_inventory_item_status_status_id");
+
+ b.Navigation("Status");
+ });
+
+ modelBuilder.Entity("barkmanapi.JobItems", b =>
+ {
+ b.HasOne("barkmanapi.Jobs", null)
+ .WithMany("Items")
+ .HasForeignKey("JobsId")
+ .HasConstraintName("fk_job_items_jobs_jobs_id");
+ });
+
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
+ {
+ b.HasOne("barkmanapi.JobStatus", "Status")
+ .WithMany()
+ .HasForeignKey("StatusId")
+ .HasConstraintName("fk_jobs_job_status_status_id");
+
+ b.Navigation("Status");
+ });
+
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
+ {
+ b.Navigation("Items");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/barkmanAPI/Migrations/20260725205905_splitdatetimeIntoSeprateFeileds.cs b/barkmanAPI/Migrations/20260725205905_splitdatetimeIntoSeprateFeileds.cs
new file mode 100644
index 0000000..bf752e7
--- /dev/null
+++ b/barkmanAPI/Migrations/20260725205905_splitdatetimeIntoSeprateFeileds.cs
@@ -0,0 +1,73 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace barkmanapi.Migrations
+{
+ ///
+ public partial class splitdatetimeIntoSeprateFeileds : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AlterColumn(
+ name: "start_date",
+ table: "jobs",
+ type: "date",
+ nullable: false,
+ oldClrType: typeof(DateTime),
+ oldType: "timestamp with time zone");
+
+ migrationBuilder.AlterColumn(
+ name: "end_date",
+ table: "jobs",
+ type: "date",
+ nullable: false,
+ oldClrType: typeof(DateTime),
+ oldType: "timestamp with time zone");
+
+ migrationBuilder.AddColumn(
+ name: "end_time",
+ table: "jobs",
+ type: "time without time zone",
+ nullable: false,
+ defaultValue: new TimeOnly(0, 0, 0));
+
+ migrationBuilder.AddColumn(
+ name: "start_time",
+ table: "jobs",
+ type: "time without time zone",
+ nullable: false,
+ defaultValue: new TimeOnly(0, 0, 0));
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "end_time",
+ table: "jobs");
+
+ migrationBuilder.DropColumn(
+ name: "start_time",
+ table: "jobs");
+
+ migrationBuilder.AlterColumn(
+ name: "start_date",
+ table: "jobs",
+ type: "timestamp with time zone",
+ nullable: false,
+ oldClrType: typeof(DateOnly),
+ oldType: "date");
+
+ migrationBuilder.AlterColumn(
+ name: "end_date",
+ table: "jobs",
+ type: "timestamp with time zone",
+ nullable: false,
+ oldClrType: typeof(DateOnly),
+ oldType: "date");
+ }
+ }
+}
diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
index 5fc1225..3ead0a3 100644
--- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
+++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
@@ -215,10 +215,14 @@ namespace barkmanapi.Migrations
.HasColumnType("integer")
.HasColumnName("customer_id");
- b.Property("EndDate")
- .HasColumnType("timestamp with time zone")
+ b.Property("EndDate")
+ .HasColumnType("date")
.HasColumnName("end_date");
+ b.Property("EndTime")
+ .HasColumnType("time without time zone")
+ .HasColumnName("end_time");
+
b.Property("Name")
.IsRequired()
.HasColumnType("text")
@@ -228,10 +232,14 @@ namespace barkmanapi.Migrations
.HasColumnType("text")
.HasColumnName("notes");
- b.Property("StartDate")
- .HasColumnType("timestamp with time zone")
+ b.Property("StartDate")
+ .HasColumnType("date")
.HasColumnName("start_date");
+ b.Property("StartTime")
+ .HasColumnType("time without time zone")
+ .HasColumnName("start_time");
+
b.Property("StatusId")
.HasColumnType("text")
.HasColumnName("status_id");
diff --git a/barkmanAPI/Program.cs b/barkmanAPI/Program.cs
index 72475d4..59d8afd 100644
--- a/barkmanAPI/Program.cs
+++ b/barkmanAPI/Program.cs
@@ -271,6 +271,8 @@ jobGroup.MapPut("/{id}", async (int id, Jobs updatedJob, BarkContext db) =>
existingJob.Name = updatedJob.Name;
existingJob.StartDate = updatedJob.StartDate;
existingJob.EndDate = updatedJob.EndDate;
+ existingJob.StartTime = updatedJob.StartTime;
+ existingJob.EndTime = updatedJob.EndTime;
existingJob.TotalPrice = updatedJob.TotalPrice;
existingJob.Venue = updatedJob.Venue;
existingJob.Address = updatedJob.Address;
@@ -288,6 +290,8 @@ jobGroup.MapPost("", async (Jobs newJobInput, BarkContext db) =>
Name = newJobInput.Name,
StartDate = newJobInput.StartDate,
EndDate = newJobInput.EndDate,
+ StartTime = newJobInput.StartTime,
+ EndTime = newJobInput.EndTime,
Venue = newJobInput.Venue,
Address = newJobInput.Address,
Notes = newJobInput.Notes,
diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs
index 9a0300d..f41edc6 100644
--- a/barkmanAPI/barkDbModel.cs
+++ b/barkmanAPI/barkDbModel.cs
@@ -1,3 +1,4 @@
+using System.Runtime.InteropServices.JavaScript;
using Microsoft.EntityFrameworkCore;
namespace barkmanapi;
@@ -53,8 +54,10 @@ public class Jobs
public required string Name { get; set; }
public JobStatus Status { get; set; }
public string? StatusId { get; set; }
- public DateTimeOffset StartDate { get; set; }
- public DateTimeOffset EndDate { get; set; }
+ public DateOnly StartDate { get; set; }
+ public DateOnly EndDate { get; set; }
+ public TimeOnly StartTime { get; set; }
+ public TimeOnly EndTime { get; set; }
public decimal TotalPrice { get; set; }
public string? Venue { get; set; }
public string? Address { get; set; }