diff --git a/barkmanAPI/Migrations/20260719204137_changedOrderToJob.Designer.cs b/barkmanAPI/Migrations/20260719204137_changedOrderToJob.Designer.cs
new file mode 100644
index 0000000..3dd0a6e
--- /dev/null
+++ b/barkmanAPI/Migrations/20260719204137_changedOrderToJob.Designer.cs
@@ -0,0 +1,295 @@
+//
+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("20260719204137_changedOrderToJob")]
+ partial class changedOrderToJob
+ {
+ ///
+ 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("JobsId")
+ .HasColumnType("integer")
+ .HasColumnName("jobs_id");
+
+ b.Property("OrderId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("order_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")
+ .IsRequired()
+ .HasColumnType("text")
+ .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/20260719204137_changedOrderToJob.cs b/barkmanAPI/Migrations/20260719204137_changedOrderToJob.cs
new file mode 100644
index 0000000..76fe4fb
--- /dev/null
+++ b/barkmanAPI/Migrations/20260719204137_changedOrderToJob.cs
@@ -0,0 +1,176 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace barkmanapi.Migrations
+{
+ ///
+ public partial class changedOrderToJob : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "order_items");
+
+ migrationBuilder.DropTable(
+ name: "orders");
+
+ migrationBuilder.DropTable(
+ name: "order_status");
+
+ migrationBuilder.CreateTable(
+ name: "job_status",
+ columns: table => new
+ {
+ id = table.Column(type: "text", nullable: false),
+ name = table.Column(type: "text", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_job_status", x => x.id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "jobs",
+ columns: table => new
+ {
+ id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ customer_id = table.Column(type: "text", nullable: false),
+ name = table.Column(type: "text", nullable: false),
+ status_id = table.Column(type: "text", nullable: true),
+ start_date = table.Column(type: "timestamp with time zone", nullable: false),
+ end_date = table.Column(type: "timestamp with time zone", nullable: false),
+ total_price = table.Column(type: "numeric", nullable: false),
+ venue = table.Column(type: "text", nullable: true),
+ address = table.Column(type: "text", nullable: true),
+ notes = table.Column(type: "text", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_jobs", x => x.id);
+ table.ForeignKey(
+ name: "fk_jobs_job_status_status_id",
+ column: x => x.status_id,
+ principalTable: "job_status",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "job_items",
+ columns: table => new
+ {
+ id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ order_id = table.Column(type: "text", nullable: false),
+ item_id = table.Column(type: "text", nullable: false),
+ quantity = table.Column(type: "integer", nullable: false),
+ jobs_id = table.Column(type: "integer", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_job_items", x => x.id);
+ table.ForeignKey(
+ name: "fk_job_items_jobs_jobs_id",
+ column: x => x.jobs_id,
+ principalTable: "jobs",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "ix_job_items_jobs_id",
+ table: "job_items",
+ column: "jobs_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_jobs_status_id",
+ table: "jobs",
+ column: "status_id");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "job_items");
+
+ migrationBuilder.DropTable(
+ name: "jobs");
+
+ migrationBuilder.DropTable(
+ name: "job_status");
+
+ migrationBuilder.CreateTable(
+ name: "order_status",
+ columns: table => new
+ {
+ id = table.Column(type: "text", nullable: false),
+ name = table.Column(type: "text", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_order_status", x => x.id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "orders",
+ columns: table => new
+ {
+ id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ status_id = table.Column(type: "text", nullable: true),
+ address = table.Column(type: "text", nullable: true),
+ customer_id = table.Column(type: "text", nullable: false),
+ end_date = table.Column(type: "timestamp with time zone", nullable: false),
+ name = table.Column(type: "text", nullable: false),
+ notes = table.Column(type: "text", nullable: true),
+ start_date = table.Column(type: "timestamp with time zone", nullable: false),
+ total_price = table.Column(type: "numeric", nullable: false),
+ venue = table.Column(type: "text", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_orders", x => x.id);
+ table.ForeignKey(
+ name: "fk_orders_order_status_status_id",
+ column: x => x.status_id,
+ principalTable: "order_status",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "order_items",
+ columns: table => new
+ {
+ id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ item_id = table.Column(type: "text", nullable: false),
+ order_id = table.Column(type: "text", nullable: false),
+ orders_id = table.Column(type: "integer", nullable: true),
+ quantity = table.Column(type: "integer", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_order_items", x => x.id);
+ table.ForeignKey(
+ name: "fk_order_items_orders_orders_id",
+ column: x => x.orders_id,
+ principalTable: "orders",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "ix_order_items_orders_id",
+ table: "order_items",
+ column: "orders_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_orders_status_id",
+ table: "orders",
+ column: "status_id");
+ }
+ }
+}
diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
index e770297..82060e3 100644
--- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
+++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
@@ -145,7 +145,7 @@ namespace barkmanapi.Migrations
b.ToTable("item_status", (string)null);
});
- modelBuilder.Entity("barkmanapi.OrderItems", b =>
+ modelBuilder.Entity("barkmanapi.JobItems", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -159,29 +159,29 @@ namespace barkmanapi.Migrations
.HasColumnType("text")
.HasColumnName("item_id");
+ b.Property("JobsId")
+ .HasColumnType("integer")
+ .HasColumnName("jobs_id");
+
b.Property("OrderId")
.IsRequired()
.HasColumnType("text")
.HasColumnName("order_id");
- b.Property("OrdersId")
- .HasColumnType("integer")
- .HasColumnName("orders_id");
-
b.Property("Quantity")
.HasColumnType("integer")
.HasColumnName("quantity");
b.HasKey("Id")
- .HasName("pk_order_items");
+ .HasName("pk_job_items");
- b.HasIndex("OrdersId")
- .HasDatabaseName("ix_order_items_orders_id");
+ b.HasIndex("JobsId")
+ .HasDatabaseName("ix_job_items_jobs_id");
- b.ToTable("order_items", (string)null);
+ b.ToTable("job_items", (string)null);
});
- modelBuilder.Entity("barkmanapi.OrderStatus", b =>
+ modelBuilder.Entity("barkmanapi.JobStatus", b =>
{
b.Property("Id")
.HasColumnType("text")
@@ -193,12 +193,12 @@ namespace barkmanapi.Migrations
.HasColumnName("name");
b.HasKey("Id")
- .HasName("pk_order_status");
+ .HasName("pk_job_status");
- b.ToTable("order_status", (string)null);
+ b.ToTable("job_status", (string)null);
});
- modelBuilder.Entity("barkmanapi.Orders", b =>
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -246,12 +246,12 @@ namespace barkmanapi.Migrations
.HasColumnName("venue");
b.HasKey("Id")
- .HasName("pk_orders");
+ .HasName("pk_jobs");
b.HasIndex("StatusId")
- .HasDatabaseName("ix_orders_status_id");
+ .HasDatabaseName("ix_jobs_status_id");
- b.ToTable("orders", (string)null);
+ b.ToTable("jobs", (string)null);
});
modelBuilder.Entity("barkmanapi.InventoryItems", b =>
@@ -264,25 +264,25 @@ namespace barkmanapi.Migrations
b.Navigation("Status");
});
- modelBuilder.Entity("barkmanapi.OrderItems", b =>
+ modelBuilder.Entity("barkmanapi.JobItems", b =>
{
- b.HasOne("barkmanapi.Orders", null)
+ b.HasOne("barkmanapi.Jobs", null)
.WithMany("Items")
- .HasForeignKey("OrdersId")
- .HasConstraintName("fk_order_items_orders_orders_id");
+ .HasForeignKey("JobsId")
+ .HasConstraintName("fk_job_items_jobs_jobs_id");
});
- modelBuilder.Entity("barkmanapi.Orders", b =>
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
{
- b.HasOne("barkmanapi.OrderStatus", "Status")
+ b.HasOne("barkmanapi.JobStatus", "Status")
.WithMany()
.HasForeignKey("StatusId")
- .HasConstraintName("fk_orders_order_status_status_id");
+ .HasConstraintName("fk_jobs_job_status_status_id");
b.Navigation("Status");
});
- modelBuilder.Entity("barkmanapi.Orders", b =>
+ modelBuilder.Entity("barkmanapi.Jobs", b =>
{
b.Navigation("Items");
});
diff --git a/barkmanAPI/Program.cs b/barkmanAPI/Program.cs
index 9a9de8e..82e2ac6 100644
--- a/barkmanAPI/Program.cs
+++ b/barkmanAPI/Program.cs
@@ -51,6 +51,18 @@ var customerGroup = app.MapGroup(prefix: "/customers")
.WithTags("Customers")
.WithDescription("Endpoints for managing customers");
+var jobGroup = app.MapGroup(prefix: "/jobs")
+ .WithTags("Jobs")
+ .WithDescription("Endpoints for managing jobs");
+
+var jobStatusGroup = app.MapGroup(prefix: "/jobstatus")
+ .WithTags("Job Status")
+ .WithDescription("Endpoints for managing job status");
+
+var jobItemGroup = app.MapGroup(prefix: "/jobitems")
+ .WithTags("Job Items")
+ .WithDescription("Endpoints for managing job items");
+
inventoryGroup.MapGet("", async (BarkContext db) =>
await db.Inventory.OrderBy(item => item.Barcode).ToListAsync());
@@ -144,7 +156,7 @@ itemStatusGroup.MapPut("/{id}", async (string id, ItemStatus updatedStatus, Bark
var existingStatus = await db.ItemStatus.FindAsync(id);
if (existingStatus == null)
{
- return Results.NotFound(new { Message = "Inventory item not found" });
+ return Results.NotFound(new { Message = "Item status not found" });
}
existingStatus.Id = updatedStatus.Id;
@@ -232,6 +244,154 @@ customerGroup.MapDelete("/{id}", async (int id, BarkContext db) =>
return Results.Ok(new { Message = "Customer deleted successfully" });
});
+jobGroup.MapGet("", async (BarkContext db) =>
+ await db.Jobs.OrderBy(jobs => jobs.Id).ToListAsync());
+
+jobGroup.MapGet("/{id}", async (int id, BarkContext db) =>
+{
+ var job = await db.Jobs
+ .FirstOrDefaultAsync(i => i.Id == id);
+
+ if (job == null)
+ {
+ return Results.NotFound(new { Message = "Job not found" });
+ }
+
+ return Results.Ok(job);
+});
+
+jobGroup.MapPut("/{id}", async (int id, Jobs updatedJob, BarkContext db) =>
+{
+ var existingJob = await db.Jobs.FindAsync(id);
+ if (existingJob == null)
+ {
+ return Results.NotFound(new { Message = "Job not found" });
+ }
+
+ existingJob.Name = updatedJob.Name;
+ existingJob.StartDate = updatedJob.StartDate;
+ existingJob.EndDate = updatedJob.EndDate;
+ existingJob.TotalPrice = updatedJob.TotalPrice;
+ existingJob.Venue = updatedJob.Venue;
+ existingJob.Address = updatedJob.Address;
+ existingJob.Notes = updatedJob.Notes;
+
+ await db.SaveChangesAsync();
+ return Results.Ok(existingJob);
+});
+
+jobGroup.MapPost("", async (Jobs newJobInput, BarkContext db) =>
+{
+ var newJob = new Jobs()
+ {
+ CustomerId = newJobInput.CustomerId,
+ Name = newJobInput.Name,
+ StartDate = newJobInput.StartDate,
+ EndDate = newJobInput.EndDate,
+ Venue = newJobInput.Venue,
+ Address = newJobInput.Address,
+ };
+
+ db.Jobs.Add(newJob);
+ await db.SaveChangesAsync();
+ return Results.Created($"/jobs/{newJob.Id}", newJob);
+});
+
+jobStatusGroup.MapGet("/", async (BarkContext db) =>
+ await db.JobStatus.ToListAsync());
+
+jobStatusGroup.MapPost("/", async (JobStatus newJobStatus, BarkContext db) =>
+{
+ db.JobStatus.Add(newJobStatus);
+ await db.SaveChangesAsync();
+ return Results.Created($"/jobstatus/{newJobStatus.Id}", newJobStatus);
+});
+
+jobStatusGroup.MapGet("/{id}", async (string id, BarkContext db) =>
+{
+ var jobStatus = await db.JobStatus.FindAsync(id);
+ if (jobStatus == null)
+ {
+ return Results.NotFound(new { Message = "Job Status not found" });
+ }
+
+ return Results.Ok(jobStatus);
+});
+
+jobStatusGroup.MapPut("/{id}", async (string id, JobStatus updatedStatus, BarkContext db) =>
+{
+ var existingStatus = await db.JobStatus.FindAsync(id);
+ if (existingStatus == null)
+ {
+ return Results.NotFound(new { Message = "Job status not found" });
+ }
+
+ existingStatus.Id = updatedStatus.Id;
+ existingStatus.Name = updatedStatus.Name;
+
+ await db.SaveChangesAsync();
+ return Results.Ok(existingStatus);
+});
+
+jobStatusGroup.MapDelete("/{id}", async (string id, BarkContext db) =>
+{
+ var jobStatus = await db.JobStatus.FindAsync(id);
+ if (jobStatus == null)
+ {
+ return Results.NotFound(new { Message = "Job status not found" });
+ }
+
+ db.JobStatus.Remove(jobStatus);
+ await db.SaveChangesAsync();
+ return Results.Ok(new { Message = "Job status deleted successfully" });
+});
+
+jobItemGroup.MapGet("", async (BarkContext db) =>
+ await db.JobItems.OrderBy(items => items.Id).ToListAsync());
+
+jobItemGroup.MapGet("/{id}", async (int id, BarkContext db) =>
+{
+ var jobItems = await db.JobItems
+ .FirstOrDefaultAsync(i => i.Id == id);
+
+ if (jobItems == null)
+ {
+ return Results.NotFound(new { Message = "Job Items not found" });
+ }
+
+ return Results.Ok(jobItems);
+});
+
+jobItemGroup.MapPut("/{id}", async (int id, JobItems updatedJobItems, BarkContext db) =>
+{
+ var existingJobItems = await db.JobItems.FindAsync(id);
+ if (existingJobItems == null)
+ {
+ return Results.NotFound(new { Message = "Job Items not found" });
+ }
+
+ existingJobItems.OrderId = updatedJobItems.OrderId;
+ existingJobItems.ItemId = updatedJobItems.ItemId;
+ existingJobItems.Quantity = updatedJobItems.Quantity;
+
+ await db.SaveChangesAsync();
+ return Results.Ok(existingJobItems);
+});
+
+jobItemGroup.MapPost("", async (JobItems newJobItemsInput, BarkContext db) =>
+{
+ var newJobItem = new JobItems()
+ {
+ OrderId = newJobItemsInput.OrderId,
+ ItemId = newJobItemsInput.ItemId,
+ Quantity = newJobItemsInput.Quantity,
+ };
+
+ db.JobItems.Add(newJobItem);
+ await db.SaveChangesAsync();
+ return Results.Created($"/jobItems/{newJobItem.Id}", newJobItem);
+});
+
using (var serviceScope = app.Services.CreateScope())
{
var dbContext = serviceScope.ServiceProvider.GetRequiredService();
diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs
index 7566374..b7c28f8 100644
--- a/barkmanAPI/barkDbModel.cs
+++ b/barkmanAPI/barkDbModel.cs
@@ -7,9 +7,9 @@ public class BarkContext(DbContextOptions options) : DbContext(opti
public DbSet Inventory { get; set; }
public DbSet ItemStatus { get; set; }
public DbSet Customers { get; set; }
- public DbSet Orders { get; set; }
- public DbSet OrderItems { get; set; }
- public DbSet OrderStatus { get; set; }
+ public DbSet Jobs { get; set; }
+ public DbSet JobItems { get; set; }
+ public DbSet JobStatus { get; set; }
}
[Index(nameof(Barcode), IsUnique = true)]
@@ -46,23 +46,23 @@ public class Customers
public string? Notes { get; set; }
}
-public class Orders
+public class Jobs
{
public int Id { get; set; }
public required string CustomerId { get; set; }
public required string Name { get; set; }
- public OrderStatus Status { get; set; }
+ public JobStatus Status { get; set; }
public string? StatusId { get; set; }
public DateTimeOffset StartDate { get; set; }
public DateTimeOffset EndDate { get; set; }
public decimal TotalPrice { get; set; }
public string? Venue { get; set; }
public string? Address { get; set; }
- public OrderItems[] Items { get; set; }
+ public JobItems[] Items { get; set; }
public string? Notes { get; set; }
}
-public class OrderItems
+public class JobItems
{
public int Id { get; set; }
public required string OrderId { get; set; }
@@ -70,7 +70,7 @@ public class OrderItems
public int Quantity { get; set; }
}
-public class OrderStatus
+public class JobStatus
{
public string Id { get; set; }
public string Name { get; set; }