From 1b478cd7ba362dab244a5179e0b655a44f8be094 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Sat, 25 Jul 2026 15:59:46 -0500 Subject: [PATCH] seperated out start and end date and time into seprate date and time fields --- ...nge_datetimeoffset_to_datetime.Designer.cs | 294 +++++++++++++++++ ...05242_change_datetimeoffset_to_datetime.cs | 22 ++ ...plitdatetimeIntoSeprateFeileds.Designer.cs | 302 ++++++++++++++++++ ...5205905_splitdatetimeIntoSeprateFeileds.cs | 73 +++++ .../Migrations/BarkContextModelSnapshot.cs | 16 +- barkmanAPI/Program.cs | 4 + barkmanAPI/barkDbModel.cs | 7 +- 7 files changed, 712 insertions(+), 6 deletions(-) create mode 100644 barkmanAPI/Migrations/20260725205242_change_datetimeoffset_to_datetime.Designer.cs create mode 100644 barkmanAPI/Migrations/20260725205242_change_datetimeoffset_to_datetime.cs create mode 100644 barkmanAPI/Migrations/20260725205905_splitdatetimeIntoSeprateFeileds.Designer.cs create mode 100644 barkmanAPI/Migrations/20260725205905_splitdatetimeIntoSeprateFeileds.cs 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; }