From 58e19bd32ab094c554798028673707050bfa0ca8 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Thu, 23 Jan 2025 13:02:54 -0600 Subject: [PATCH 01/11] created item status db --- .../20250123185805_status.Designer.cs | 91 +++++++++++++++++++ .../Migrations/20250123185805_status.cs | 33 +++++++ .../Migrations/BarkContextModelSnapshot.cs | 17 ++++ barkmanAPI/Program.cs | 31 ++++--- barkmanAPI/barkDbModel.cs | 7 ++ 5 files changed, 166 insertions(+), 13 deletions(-) create mode 100644 barkmanAPI/Migrations/20250123185805_status.Designer.cs create mode 100644 barkmanAPI/Migrations/20250123185805_status.cs diff --git a/barkmanAPI/Migrations/20250123185805_status.Designer.cs b/barkmanAPI/Migrations/20250123185805_status.Designer.cs new file mode 100644 index 0000000..995dce6 --- /dev/null +++ b/barkmanAPI/Migrations/20250123185805_status.Designer.cs @@ -0,0 +1,91 @@ +// +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("20250123185805_status")] + partial class status + { + /// + 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.InventoryItems", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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("Status") + .HasColumnType("text") + .HasColumnName("status"); + + b.HasKey("Id") + .HasName("pk_inventory"); + + 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); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/barkmanAPI/Migrations/20250123185805_status.cs b/barkmanAPI/Migrations/20250123185805_status.cs new file mode 100644 index 0000000..0b2677d --- /dev/null +++ b/barkmanAPI/Migrations/20250123185805_status.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace barkmanapi.Migrations +{ + /// + public partial class status : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "item_status", + columns: table => new + { + id = table.Column(type: "text", nullable: false), + name = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_item_status", x => x.id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "item_status"); + } + } +} diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs index ab7aae2..6de27d7 100644 --- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs +++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs @@ -65,6 +65,23 @@ namespace barkmanapi.Migrations 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); + }); #pragma warning restore 612, 618 } } diff --git a/barkmanAPI/Program.cs b/barkmanAPI/Program.cs index 6c46e45..359f9a1 100644 --- a/barkmanAPI/Program.cs +++ b/barkmanAPI/Program.cs @@ -10,18 +10,20 @@ builder.Services.AddDbContext(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { - c.SwaggerDoc("v1", new OpenApiInfo { Title = "BarkMan API", Description = "BARK BARK WOOF WOOF", Version = "v1" }); + c.SwaggerDoc("v1", + new OpenApiInfo { Title = "BarkMan API", Description = "BARK BARK WOOF WOOF", Version = "v1" }); }); builder.Services.AddCors(options => { options.AddPolicy(name: allowSpecificOrigins, - policy => + policy => { - policy.WithOrigins("https://barkdev.ts.drewr.io", "http://localhost:5173").AllowAnyMethod().AllowAnyHeader(); + policy.WithOrigins("https://barkdev.ts.drewr.io", "http://localhost:5173").AllowAnyMethod() + .AllowAnyHeader(); }); }); -builder.Services.AddDbContext(opt => +builder.Services.AddDbContext(opt => opt.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")).UseSnakeCaseNamingConvention()); var app = builder.Build(); @@ -29,16 +31,13 @@ var app = builder.Build(); if (!app.Environment.IsProduction()) { app.UseSwagger(); - app.UseSwaggerUI(c => - { - c.SwaggerEndpoint("/swagger/v1/swagger.json", "Bark Inventory API V1"); - }); + app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Bark Productions API V1"); }); } app.MapGet("/", () => "Hello World!"); app.MapGet("/inventory", async (BarkContext db) => - await db.Inventory.OrderBy(item=>item.Id).ToListAsync()); + await db.Inventory.OrderBy(item => item.Id).ToListAsync()); app.MapGet("/inventory/{id}", async (int id, BarkContext db) => { @@ -47,6 +46,7 @@ app.MapGet("/inventory/{id}", async (int id, BarkContext db) => { return Results.NotFound(new { Message = "Inventory item not found" }); } + return Results.Ok(item); }); @@ -57,7 +57,7 @@ app.MapPut("/inventory/{id}", async (int id, InventoryItems updatedItem, BarkCon { return Results.NotFound(new { Message = "Inventory item not found" }); } - + existingItem.Name = updatedItem.Name; existingItem.Brand = updatedItem.Brand; existingItem.SerialNumber = updatedItem.SerialNumber; @@ -68,7 +68,7 @@ app.MapPut("/inventory/{id}", async (int id, InventoryItems updatedItem, BarkCon await db.SaveChangesAsync(); return Results.Ok(existingItem); - }); +}); app.MapPost("/inventory", async (InventoryItems newItem, BarkContext db) => @@ -81,14 +81,19 @@ app.MapPost("/inventory", async (InventoryItems newItem, BarkContext db) => app.MapDelete("/inventory/{id}", async (int id, BarkContext db) => { var item = await db.Inventory.FindAsync(id); - if (item == null) { + if (item == null) + { return Results.NotFound(new { Message = "Inventory item not found" }); } + db.Inventory.Remove(item); await db.SaveChangesAsync(); return Results.Ok(new { Message = "Inventory item deleted successfully" }); }); +app.MapGet("/itemstatus", async (BarkContext db) => + await db.ItemStatus.ToListAsync()); + using (var serviceScope = app.Services.CreateScope()) { var dbContext = serviceScope.ServiceProvider.GetRequiredService(); @@ -97,4 +102,4 @@ using (var serviceScope = app.Services.CreateScope()) app.UseCors(allowSpecificOrigins); -app.Run(); +app.Run(); \ No newline at end of file diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 88b538c..03c98d6 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -5,6 +5,7 @@ namespace barkmanapi; public class BarkContext(DbContextOptions options) : DbContext(options) { public DbSet Inventory { get; set; } + public DbSet ItemStatus { get; set; } } public class InventoryItems @@ -17,4 +18,10 @@ public class InventoryItems public float? RentalPrice { get; set; } public float? ReplacementCost { get; set; } public string? Notes { get; set; } +} + +public class ItemStatus +{ + public string Id { get; set; } + public string Name { get; set; } } \ No newline at end of file From b13acf36edc6e38c5e2868488853d553e7f27f33 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Thu, 23 Jan 2025 13:24:16 -0600 Subject: [PATCH 02/11] added rest of inventory status endpoints --- barkmanAPI/Program.cs | 46 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/barkmanAPI/Program.cs b/barkmanAPI/Program.cs index 359f9a1..cf7ed99 100644 --- a/barkmanAPI/Program.cs +++ b/barkmanAPI/Program.cs @@ -94,6 +94,52 @@ app.MapDelete("/inventory/{id}", async (int id, BarkContext db) => app.MapGet("/itemstatus", async (BarkContext db) => await db.ItemStatus.ToListAsync()); +app.MapPost("/itemstatus", async (ItemStatus newItemStatus, BarkContext db) => +{ + db.ItemStatus.Add(newItemStatus); + await db.SaveChangesAsync(); + return Results.Created($"/itemstatus/{newItemStatus.Id}", newItemStatus); +}); + +app.MapGet("/itemstatus/{id}", async (string id, BarkContext db) => +{ + var itemStatus = await db.ItemStatus.FindAsync(id); + if (itemStatus == null) + { + return Results.NotFound(new { Message = "Item Status not found" }); + } + + return Results.Ok(itemStatus); +}); + +app.MapPut("/itemstatus/{id}", async (string id, ItemStatus updatedStatus, BarkContext db) => +{ + var existingStatus = await db.ItemStatus.FindAsync(id); + if (existingStatus == null) + { + return Results.NotFound(new { Message = "Inventory item not found" }); + } + + existingStatus.Id = updatedStatus.Id; + existingStatus.Name = updatedStatus.Name; + + await db.SaveChangesAsync(); + return Results.Ok(existingStatus); +}); + +app.MapDelete("/itemstatus/{id}", async (string id, BarkContext db) => +{ + var itemStatus = await db.ItemStatus.FindAsync(id); + if (itemStatus == null) + { + return Results.NotFound(new { Message = "Item status not found" }); + } + + db.ItemStatus.Remove(itemStatus); + await db.SaveChangesAsync(); + return Results.Ok(new { Message = "Item status deleted successfully" }); +}); + using (var serviceScope = app.Services.CreateScope()) { var dbContext = serviceScope.ServiceProvider.GetRequiredService(); From 64ec597a1c9e21550ea4a3eeb3c94409d47e18d8 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Thu, 23 Jan 2025 18:52:25 -0600 Subject: [PATCH 03/11] more status --- .../20250124005211_statuspt2.Designer.cs | 111 ++++++++++++++++++ .../Migrations/20250124005211_statuspt2.cs | 58 +++++++++ .../Migrations/BarkContextModelSnapshot.cs | 24 +++- barkmanAPI/Program.cs | 11 +- barkmanAPI/barkDbModel.cs | 3 +- 5 files changed, 202 insertions(+), 5 deletions(-) create mode 100644 barkmanAPI/Migrations/20250124005211_statuspt2.Designer.cs create mode 100644 barkmanAPI/Migrations/20250124005211_statuspt2.cs diff --git a/barkmanAPI/Migrations/20250124005211_statuspt2.Designer.cs b/barkmanAPI/Migrations/20250124005211_statuspt2.Designer.cs new file mode 100644 index 0000000..2c8627c --- /dev/null +++ b/barkmanAPI/Migrations/20250124005211_statuspt2.Designer.cs @@ -0,0 +1,111 @@ +// +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("20250124005211_statuspt2")] + partial class statuspt2 + { + /// + 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.InventoryItems", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Brand") + .IsRequired() + .HasColumnType("text") + .HasColumnName("brand"); + + b.Property("ItemStatusId") + .HasColumnType("text") + .HasColumnName("item_status_id"); + + 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.HasKey("Id") + .HasName("pk_inventory"); + + b.HasIndex("ItemStatusId") + .HasDatabaseName("ix_inventory_item_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.InventoryItems", b => + { + b.HasOne("barkmanapi.ItemStatus", null) + .WithMany("Items") + .HasForeignKey("ItemStatusId") + .HasConstraintName("fk_inventory_item_status_item_status_id"); + }); + + modelBuilder.Entity("barkmanapi.ItemStatus", b => + { + b.Navigation("Items"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/barkmanAPI/Migrations/20250124005211_statuspt2.cs b/barkmanAPI/Migrations/20250124005211_statuspt2.cs new file mode 100644 index 0000000..2e12c05 --- /dev/null +++ b/barkmanAPI/Migrations/20250124005211_statuspt2.cs @@ -0,0 +1,58 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace barkmanapi.Migrations +{ + /// + public partial class statuspt2 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "status", + table: "inventory", + newName: "status_id"); + + migrationBuilder.AddColumn( + name: "item_status_id", + table: "inventory", + type: "text", + nullable: true); + + migrationBuilder.CreateIndex( + name: "ix_inventory_item_status_id", + table: "inventory", + column: "item_status_id"); + + migrationBuilder.AddForeignKey( + name: "fk_inventory_item_status_item_status_id", + table: "inventory", + column: "item_status_id", + principalTable: "item_status", + principalColumn: "id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "fk_inventory_item_status_item_status_id", + table: "inventory"); + + migrationBuilder.DropIndex( + name: "ix_inventory_item_status_id", + table: "inventory"); + + migrationBuilder.DropColumn( + name: "item_status_id", + table: "inventory"); + + migrationBuilder.RenameColumn( + name: "status_id", + table: "inventory", + newName: "status"); + } + } +} diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs index 6de27d7..2e166f4 100644 --- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs +++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs @@ -35,6 +35,10 @@ namespace barkmanapi.Migrations .HasColumnType("text") .HasColumnName("brand"); + b.Property("ItemStatusId") + .HasColumnType("text") + .HasColumnName("item_status_id"); + b.Property("Name") .IsRequired() .HasColumnType("text") @@ -56,13 +60,16 @@ namespace barkmanapi.Migrations .HasColumnType("text") .HasColumnName("serial_number"); - b.Property("Status") + b.Property("StatusId") .HasColumnType("text") - .HasColumnName("status"); + .HasColumnName("status_id"); b.HasKey("Id") .HasName("pk_inventory"); + b.HasIndex("ItemStatusId") + .HasDatabaseName("ix_inventory_item_status_id"); + b.ToTable("inventory", (string)null); }); @@ -82,6 +89,19 @@ namespace barkmanapi.Migrations b.ToTable("item_status", (string)null); }); + + modelBuilder.Entity("barkmanapi.InventoryItems", b => + { + b.HasOne("barkmanapi.ItemStatus", null) + .WithMany("Items") + .HasForeignKey("ItemStatusId") + .HasConstraintName("fk_inventory_item_status_item_status_id"); + }); + + modelBuilder.Entity("barkmanapi.ItemStatus", b => + { + b.Navigation("Items"); + }); #pragma warning restore 612, 618 } } diff --git a/barkmanAPI/Program.cs b/barkmanAPI/Program.cs index cf7ed99..62d98fe 100644 --- a/barkmanAPI/Program.cs +++ b/barkmanAPI/Program.cs @@ -12,6 +12,7 @@ builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "BarkMan API", Description = "BARK BARK WOOF WOOF", Version = "v1" }); + }); builder.Services.AddCors(options => @@ -30,12 +31,14 @@ var app = builder.Build(); if (!app.Environment.IsProduction()) { - app.UseSwagger(); + app.MapOpenApi(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Bark Productions API V1"); }); } app.MapGet("/", () => "Hello World!"); + + app.MapGet("/inventory", async (BarkContext db) => await db.Inventory.OrderBy(item => item.Id).ToListAsync()); @@ -61,7 +64,7 @@ app.MapPut("/inventory/{id}", async (int id, InventoryItems updatedItem, BarkCon existingItem.Name = updatedItem.Name; existingItem.Brand = updatedItem.Brand; existingItem.SerialNumber = updatedItem.SerialNumber; - existingItem.Status = updatedItem.Status; + existingItem.StatusId = updatedItem.StatusId; existingItem.RentalPrice = updatedItem.RentalPrice; existingItem.ReplacementCost = updatedItem.ReplacementCost; existingItem.Notes = updatedItem.Notes; @@ -140,6 +143,10 @@ app.MapDelete("/itemstatus/{id}", async (string id, BarkContext db) => return Results.Ok(new { Message = "Item status deleted successfully" }); }); +var inventoryGroup = app.MapGroup(prefix: "/inventory") + .WithTags("Inventory") + .WithDescription("Endpoints for managing inventory items"); + using (var serviceScope = app.Services.CreateScope()) { var dbContext = serviceScope.ServiceProvider.GetRequiredService(); diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 03c98d6..224b0e6 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -14,7 +14,7 @@ public class InventoryItems public string Name { get; set; } public string Brand { get; set; } public string? SerialNumber { get; set; } - public string? Status { get; set; } + public string? StatusId { get; set; } public float? RentalPrice { get; set; } public float? ReplacementCost { get; set; } public string? Notes { get; set; } @@ -24,4 +24,5 @@ public class ItemStatus { public string Id { get; set; } public string Name { get; set; } + public ICollection Items { get; } = new List(); } \ No newline at end of file From 439fd9d51cc35d195811d80fc3d0e2dbc0a22cda Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Thu, 23 Jan 2025 19:17:04 -0600 Subject: [PATCH 04/11] grouped api endpoints in swagger --- barkmanAPI/Program.cs | 46 +++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/barkmanAPI/Program.cs b/barkmanAPI/Program.cs index 62d98fe..05d34c0 100644 --- a/barkmanAPI/Program.cs +++ b/barkmanAPI/Program.cs @@ -8,11 +8,15 @@ var allowSpecificOrigins = "_AllowSpecificOrigins"; builder.Services.AddDbContext(); builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(c => +builder.Services.AddOpenApi("document", c => { - c.SwaggerDoc("v1", - new OpenApiInfo { Title = "BarkMan API", Description = "BARK BARK WOOF WOOF", Version = "v1" }); - + c.AddDocumentTransformer((doc, _, _) => + { + doc.Info.Version = "v1"; + doc.Info.Title = "BarkMan API"; + doc.Info.Description = "BARK BARK WOOF WOOF ARF"; + return Task.CompletedTask; + }); }); builder.Services.AddCors(options => @@ -32,17 +36,21 @@ var app = builder.Build(); if (!app.Environment.IsProduction()) { app.MapOpenApi(); - app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Bark Productions API V1"); }); + app.UseSwaggerUI(c => { c.SwaggerEndpoint("/openapi/document.json", "Bark Productions API V1"); }); } -app.MapGet("/", () => "Hello World!"); +var inventoryGroup = app.MapGroup(prefix: "/inventory") + .WithTags("Inventory") + .WithDescription("Endpoints for managing inventory items"); +var itemStatusGroup = app.MapGroup(prefix: "/itemstatus") + .WithTags("Item Status") + .WithDescription("Endpoints for managing item status"); - -app.MapGet("/inventory", async (BarkContext db) => +inventoryGroup.MapGet("/inventory", async (BarkContext db) => await db.Inventory.OrderBy(item => item.Id).ToListAsync()); -app.MapGet("/inventory/{id}", async (int id, BarkContext db) => +inventoryGroup.MapGet("/inventory/{id}", async (int id, BarkContext db) => { var item = await db.Inventory.FindAsync(id); if (item == null) @@ -53,7 +61,7 @@ app.MapGet("/inventory/{id}", async (int id, BarkContext db) => return Results.Ok(item); }); -app.MapPut("/inventory/{id}", async (int id, InventoryItems updatedItem, BarkContext db) => +inventoryGroup.MapPut("/inventory/{id}", async (int id, InventoryItems updatedItem, BarkContext db) => { var existingItem = await db.Inventory.FindAsync(id); if (existingItem == null) @@ -74,14 +82,14 @@ app.MapPut("/inventory/{id}", async (int id, InventoryItems updatedItem, BarkCon }); -app.MapPost("/inventory", async (InventoryItems newItem, BarkContext db) => +inventoryGroup.MapPost("/inventory", async (InventoryItems newItem, BarkContext db) => { db.Inventory.Add(newItem); await db.SaveChangesAsync(); return Results.Created($"/inventory/{newItem.Id}", newItem); }); -app.MapDelete("/inventory/{id}", async (int id, BarkContext db) => +inventoryGroup.MapDelete("/inventory/{id}", async (int id, BarkContext db) => { var item = await db.Inventory.FindAsync(id); if (item == null) @@ -94,17 +102,17 @@ app.MapDelete("/inventory/{id}", async (int id, BarkContext db) => return Results.Ok(new { Message = "Inventory item deleted successfully" }); }); -app.MapGet("/itemstatus", async (BarkContext db) => +itemStatusGroup.MapGet("/itemstatus", async (BarkContext db) => await db.ItemStatus.ToListAsync()); -app.MapPost("/itemstatus", async (ItemStatus newItemStatus, BarkContext db) => +itemStatusGroup.MapPost("/itemstatus", async (ItemStatus newItemStatus, BarkContext db) => { db.ItemStatus.Add(newItemStatus); await db.SaveChangesAsync(); return Results.Created($"/itemstatus/{newItemStatus.Id}", newItemStatus); }); -app.MapGet("/itemstatus/{id}", async (string id, BarkContext db) => +itemStatusGroup.MapGet("/itemstatus/{id}", async (string id, BarkContext db) => { var itemStatus = await db.ItemStatus.FindAsync(id); if (itemStatus == null) @@ -115,7 +123,7 @@ app.MapGet("/itemstatus/{id}", async (string id, BarkContext db) => return Results.Ok(itemStatus); }); -app.MapPut("/itemstatus/{id}", async (string id, ItemStatus updatedStatus, BarkContext db) => +itemStatusGroup.MapPut("/itemstatus/{id}", async (string id, ItemStatus updatedStatus, BarkContext db) => { var existingStatus = await db.ItemStatus.FindAsync(id); if (existingStatus == null) @@ -130,7 +138,7 @@ app.MapPut("/itemstatus/{id}", async (string id, ItemStatus updatedStatus, BarkC return Results.Ok(existingStatus); }); -app.MapDelete("/itemstatus/{id}", async (string id, BarkContext db) => +itemStatusGroup.MapDelete("/itemstatus/{id}", async (string id, BarkContext db) => { var itemStatus = await db.ItemStatus.FindAsync(id); if (itemStatus == null) @@ -143,10 +151,6 @@ app.MapDelete("/itemstatus/{id}", async (string id, BarkContext db) => return Results.Ok(new { Message = "Item status deleted successfully" }); }); -var inventoryGroup = app.MapGroup(prefix: "/inventory") - .WithTags("Inventory") - .WithDescription("Endpoints for managing inventory items"); - using (var serviceScope = app.Services.CreateScope()) { var dbContext = serviceScope.ServiceProvider.GetRequiredService(); From 9892684ebc36796bca92d5e2c39eea4158c2d1bf Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Thu, 23 Jan 2025 20:05:08 -0600 Subject: [PATCH 05/11] things --- barkmanAPI/Program.cs | 25 ++++++++++++++----------- barkmanAPI/barkDbModel.cs | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/barkmanAPI/Program.cs b/barkmanAPI/Program.cs index 05d34c0..2d241e9 100644 --- a/barkmanAPI/Program.cs +++ b/barkmanAPI/Program.cs @@ -47,12 +47,15 @@ var itemStatusGroup = app.MapGroup(prefix: "/itemstatus") .WithTags("Item Status") .WithDescription("Endpoints for managing item status"); -inventoryGroup.MapGet("/inventory", async (BarkContext db) => +inventoryGroup.MapGet("", async (BarkContext db) => await db.Inventory.OrderBy(item => item.Id).ToListAsync()); -inventoryGroup.MapGet("/inventory/{id}", async (int id, BarkContext db) => +inventoryGroup.MapGet("/{id}", async (int id, BarkContext db) => { - var item = await db.Inventory.FindAsync(id); + var item = await db.Inventory + .Include(item => item.StatusId) + .FirstOrDefaultAsync(i => i.Id == id); + if (item == null) { return Results.NotFound(new { Message = "Inventory item not found" }); @@ -61,7 +64,7 @@ inventoryGroup.MapGet("/inventory/{id}", async (int id, BarkContext db) => return Results.Ok(item); }); -inventoryGroup.MapPut("/inventory/{id}", async (int id, InventoryItems updatedItem, BarkContext db) => +inventoryGroup.MapPut("/{id}", async (int id, InventoryItems updatedItem, BarkContext db) => { var existingItem = await db.Inventory.FindAsync(id); if (existingItem == null) @@ -82,14 +85,14 @@ inventoryGroup.MapPut("/inventory/{id}", async (int id, InventoryItems updatedIt }); -inventoryGroup.MapPost("/inventory", async (InventoryItems newItem, BarkContext db) => +inventoryGroup.MapPost("", async (InventoryItems newItem, BarkContext db) => { db.Inventory.Add(newItem); await db.SaveChangesAsync(); return Results.Created($"/inventory/{newItem.Id}", newItem); }); -inventoryGroup.MapDelete("/inventory/{id}", async (int id, BarkContext db) => +inventoryGroup.MapDelete("/{id}", async (int id, BarkContext db) => { var item = await db.Inventory.FindAsync(id); if (item == null) @@ -102,17 +105,17 @@ inventoryGroup.MapDelete("/inventory/{id}", async (int id, BarkContext db) => return Results.Ok(new { Message = "Inventory item deleted successfully" }); }); -itemStatusGroup.MapGet("/itemstatus", async (BarkContext db) => +itemStatusGroup.MapGet("/", async (BarkContext db) => await db.ItemStatus.ToListAsync()); -itemStatusGroup.MapPost("/itemstatus", async (ItemStatus newItemStatus, BarkContext db) => +itemStatusGroup.MapPost("/", async (ItemStatus newItemStatus, BarkContext db) => { db.ItemStatus.Add(newItemStatus); await db.SaveChangesAsync(); return Results.Created($"/itemstatus/{newItemStatus.Id}", newItemStatus); }); -itemStatusGroup.MapGet("/itemstatus/{id}", async (string id, BarkContext db) => +itemStatusGroup.MapGet("/{id}", async (string id, BarkContext db) => { var itemStatus = await db.ItemStatus.FindAsync(id); if (itemStatus == null) @@ -123,7 +126,7 @@ itemStatusGroup.MapGet("/itemstatus/{id}", async (string id, BarkContext db) => return Results.Ok(itemStatus); }); -itemStatusGroup.MapPut("/itemstatus/{id}", async (string id, ItemStatus updatedStatus, BarkContext db) => +itemStatusGroup.MapPut("/{id}", async (string id, ItemStatus updatedStatus, BarkContext db) => { var existingStatus = await db.ItemStatus.FindAsync(id); if (existingStatus == null) @@ -138,7 +141,7 @@ itemStatusGroup.MapPut("/itemstatus/{id}", async (string id, ItemStatus updatedS return Results.Ok(existingStatus); }); -itemStatusGroup.MapDelete("/itemstatus/{id}", async (string id, BarkContext db) => +itemStatusGroup.MapDelete("/{id}", async (string id, BarkContext db) => { var itemStatus = await db.ItemStatus.FindAsync(id); if (itemStatus == null) diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 224b0e6..79ca512 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -14,7 +14,7 @@ public class InventoryItems public string Name { get; set; } public string Brand { get; set; } public string? SerialNumber { get; set; } - public string? StatusId { get; set; } + public ItemStatus StatusId { get; set; } public float? RentalPrice { get; set; } public float? ReplacementCost { get; set; } public string? Notes { get; set; } From b7aa57672775af03011b20846f82fd7ae9e3b9c0 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Fri, 24 Jan 2025 09:06:32 -0600 Subject: [PATCH 06/11] broke and fixed db at the same time --- .../20250122011527_postyFirst.Designer.cs | 74 ------------ .../Migrations/20250122011527_postyFirst.cs | 41 ------- .../20250123185805_status.Designer.cs | 91 -------------- .../Migrations/20250123185805_status.cs | 33 ------ .../20250124005211_statuspt2.Designer.cs | 111 ------------------ .../Migrations/20250124005211_statuspt2.cs | 58 --------- .../Migrations/BarkContextModelSnapshot.cs | 108 ----------------- barkmanAPI/Program.cs | 4 +- barkmanAPI/barkDbModel.cs | 2 +- barkmanAPI/barkmanapi.csproj | 4 + 10 files changed, 7 insertions(+), 519 deletions(-) delete mode 100644 barkmanAPI/Migrations/20250122011527_postyFirst.Designer.cs delete mode 100644 barkmanAPI/Migrations/20250122011527_postyFirst.cs delete mode 100644 barkmanAPI/Migrations/20250123185805_status.Designer.cs delete mode 100644 barkmanAPI/Migrations/20250123185805_status.cs delete mode 100644 barkmanAPI/Migrations/20250124005211_statuspt2.Designer.cs delete mode 100644 barkmanAPI/Migrations/20250124005211_statuspt2.cs delete mode 100644 barkmanAPI/Migrations/BarkContextModelSnapshot.cs diff --git a/barkmanAPI/Migrations/20250122011527_postyFirst.Designer.cs b/barkmanAPI/Migrations/20250122011527_postyFirst.Designer.cs deleted file mode 100644 index 50a6aa3..0000000 --- a/barkmanAPI/Migrations/20250122011527_postyFirst.Designer.cs +++ /dev/null @@ -1,74 +0,0 @@ -// -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("20250122011527_postyFirst")] - partial class postyFirst - { - /// - 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.InventoryItems", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - 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("Status") - .HasColumnType("text") - .HasColumnName("status"); - - b.HasKey("Id") - .HasName("pk_inventory"); - - b.ToTable("inventory", (string)null); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/barkmanAPI/Migrations/20250122011527_postyFirst.cs b/barkmanAPI/Migrations/20250122011527_postyFirst.cs deleted file mode 100644 index 599a405..0000000 --- a/barkmanAPI/Migrations/20250122011527_postyFirst.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace barkmanapi.Migrations -{ - /// - public partial class postyFirst : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "inventory", - columns: table => new - { - id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - name = table.Column(type: "text", nullable: false), - brand = table.Column(type: "text", nullable: false), - serial_number = table.Column(type: "text", nullable: true), - status = table.Column(type: "text", nullable: true), - rental_price = table.Column(type: "real", nullable: true), - replacement_cost = table.Column(type: "real", nullable: true), - notes = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("pk_inventory", x => x.id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "inventory"); - } - } -} diff --git a/barkmanAPI/Migrations/20250123185805_status.Designer.cs b/barkmanAPI/Migrations/20250123185805_status.Designer.cs deleted file mode 100644 index 995dce6..0000000 --- a/barkmanAPI/Migrations/20250123185805_status.Designer.cs +++ /dev/null @@ -1,91 +0,0 @@ -// -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("20250123185805_status")] - partial class status - { - /// - 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.InventoryItems", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - 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("Status") - .HasColumnType("text") - .HasColumnName("status"); - - b.HasKey("Id") - .HasName("pk_inventory"); - - 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); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/barkmanAPI/Migrations/20250123185805_status.cs b/barkmanAPI/Migrations/20250123185805_status.cs deleted file mode 100644 index 0b2677d..0000000 --- a/barkmanAPI/Migrations/20250123185805_status.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace barkmanapi.Migrations -{ - /// - public partial class status : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "item_status", - columns: table => new - { - id = table.Column(type: "text", nullable: false), - name = table.Column(type: "text", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("pk_item_status", x => x.id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "item_status"); - } - } -} diff --git a/barkmanAPI/Migrations/20250124005211_statuspt2.Designer.cs b/barkmanAPI/Migrations/20250124005211_statuspt2.Designer.cs deleted file mode 100644 index 2c8627c..0000000 --- a/barkmanAPI/Migrations/20250124005211_statuspt2.Designer.cs +++ /dev/null @@ -1,111 +0,0 @@ -// -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("20250124005211_statuspt2")] - partial class statuspt2 - { - /// - 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.InventoryItems", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Brand") - .IsRequired() - .HasColumnType("text") - .HasColumnName("brand"); - - b.Property("ItemStatusId") - .HasColumnType("text") - .HasColumnName("item_status_id"); - - 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.HasKey("Id") - .HasName("pk_inventory"); - - b.HasIndex("ItemStatusId") - .HasDatabaseName("ix_inventory_item_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.InventoryItems", b => - { - b.HasOne("barkmanapi.ItemStatus", null) - .WithMany("Items") - .HasForeignKey("ItemStatusId") - .HasConstraintName("fk_inventory_item_status_item_status_id"); - }); - - modelBuilder.Entity("barkmanapi.ItemStatus", b => - { - b.Navigation("Items"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/barkmanAPI/Migrations/20250124005211_statuspt2.cs b/barkmanAPI/Migrations/20250124005211_statuspt2.cs deleted file mode 100644 index 2e12c05..0000000 --- a/barkmanAPI/Migrations/20250124005211_statuspt2.cs +++ /dev/null @@ -1,58 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace barkmanapi.Migrations -{ - /// - public partial class statuspt2 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.RenameColumn( - name: "status", - table: "inventory", - newName: "status_id"); - - migrationBuilder.AddColumn( - name: "item_status_id", - table: "inventory", - type: "text", - nullable: true); - - migrationBuilder.CreateIndex( - name: "ix_inventory_item_status_id", - table: "inventory", - column: "item_status_id"); - - migrationBuilder.AddForeignKey( - name: "fk_inventory_item_status_item_status_id", - table: "inventory", - column: "item_status_id", - principalTable: "item_status", - principalColumn: "id"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "fk_inventory_item_status_item_status_id", - table: "inventory"); - - migrationBuilder.DropIndex( - name: "ix_inventory_item_status_id", - table: "inventory"); - - migrationBuilder.DropColumn( - name: "item_status_id", - table: "inventory"); - - migrationBuilder.RenameColumn( - name: "status_id", - table: "inventory", - newName: "status"); - } - } -} diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs deleted file mode 100644 index 2e166f4..0000000 --- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs +++ /dev/null @@ -1,108 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using barkmanapi; - -#nullable disable - -namespace barkmanapi.Migrations -{ - [DbContext(typeof(BarkContext))] - partial class BarkContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("barkmanapi.InventoryItems", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Brand") - .IsRequired() - .HasColumnType("text") - .HasColumnName("brand"); - - b.Property("ItemStatusId") - .HasColumnType("text") - .HasColumnName("item_status_id"); - - 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.HasKey("Id") - .HasName("pk_inventory"); - - b.HasIndex("ItemStatusId") - .HasDatabaseName("ix_inventory_item_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.InventoryItems", b => - { - b.HasOne("barkmanapi.ItemStatus", null) - .WithMany("Items") - .HasForeignKey("ItemStatusId") - .HasConstraintName("fk_inventory_item_status_item_status_id"); - }); - - modelBuilder.Entity("barkmanapi.ItemStatus", b => - { - b.Navigation("Items"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/barkmanAPI/Program.cs b/barkmanAPI/Program.cs index 2d241e9..a98a7fd 100644 --- a/barkmanAPI/Program.cs +++ b/barkmanAPI/Program.cs @@ -53,7 +53,7 @@ inventoryGroup.MapGet("", async (BarkContext db) => inventoryGroup.MapGet("/{id}", async (int id, BarkContext db) => { var item = await db.Inventory - .Include(item => item.StatusId) + .Include(item => item.Status) .FirstOrDefaultAsync(i => i.Id == id); if (item == null) @@ -75,7 +75,7 @@ inventoryGroup.MapPut("/{id}", async (int id, InventoryItems updatedItem, BarkCo existingItem.Name = updatedItem.Name; existingItem.Brand = updatedItem.Brand; existingItem.SerialNumber = updatedItem.SerialNumber; - existingItem.StatusId = updatedItem.StatusId; + existingItem.Status = updatedItem.Status; existingItem.RentalPrice = updatedItem.RentalPrice; existingItem.ReplacementCost = updatedItem.ReplacementCost; existingItem.Notes = updatedItem.Notes; diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 79ca512..91b0b40 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -14,7 +14,7 @@ public class InventoryItems public string Name { get; set; } public string Brand { get; set; } public string? SerialNumber { get; set; } - public ItemStatus StatusId { get; set; } + public ItemStatus Status { get; set; } public float? RentalPrice { get; set; } public float? ReplacementCost { get; set; } public string? Notes { get; set; } diff --git a/barkmanAPI/barkmanapi.csproj b/barkmanAPI/barkmanapi.csproj index fa775f1..0cb694f 100644 --- a/barkmanAPI/barkmanapi.csproj +++ b/barkmanAPI/barkmanapi.csproj @@ -19,4 +19,8 @@ + + + + From f1bad20522943bc23a658c68adc8e44c280ccd2f Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Fri, 24 Jan 2025 09:07:28 -0600 Subject: [PATCH 07/11] forgot migrations --- .../20250124040847_status.Designer.cs | 109 ++++++++++++++++++ .../Migrations/20250124040847_status.cs | 66 +++++++++++ .../Migrations/BarkContextModelSnapshot.cs | 106 +++++++++++++++++ 3 files changed, 281 insertions(+) create mode 100644 barkmanAPI/Migrations/20250124040847_status.Designer.cs create mode 100644 barkmanAPI/Migrations/20250124040847_status.cs create mode 100644 barkmanAPI/Migrations/BarkContextModelSnapshot.cs diff --git a/barkmanAPI/Migrations/20250124040847_status.Designer.cs b/barkmanAPI/Migrations/20250124040847_status.Designer.cs new file mode 100644 index 0000000..d183c10 --- /dev/null +++ b/barkmanAPI/Migrations/20250124040847_status.Designer.cs @@ -0,0 +1,109 @@ +// +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("20250124040847_status")] + partial class status + { + /// + 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.InventoryItems", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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.HasKey("Id") + .HasName("pk_inventory"); + + 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.InventoryItems", b => + { + b.HasOne("barkmanapi.ItemStatus", "Status") + .WithMany("Items") + .HasForeignKey("StatusId") + .HasConstraintName("fk_inventory_item_status_status_id"); + + b.Navigation("Status"); + }); + + modelBuilder.Entity("barkmanapi.ItemStatus", b => + { + b.Navigation("Items"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/barkmanAPI/Migrations/20250124040847_status.cs b/barkmanAPI/Migrations/20250124040847_status.cs new file mode 100644 index 0000000..ca4e049 --- /dev/null +++ b/barkmanAPI/Migrations/20250124040847_status.cs @@ -0,0 +1,66 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace barkmanapi.Migrations +{ + /// + public partial class status : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "item_status", + columns: table => new + { + id = table.Column(type: "text", nullable: false), + name = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_item_status", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "inventory", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "text", nullable: false), + brand = table.Column(type: "text", nullable: false), + serial_number = table.Column(type: "text", nullable: true), + status_id = table.Column(type: "text", nullable: true), + rental_price = table.Column(type: "real", nullable: true), + replacement_cost = table.Column(type: "real", nullable: true), + notes = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_inventory", x => x.id); + table.ForeignKey( + name: "fk_inventory_item_status_status_id", + column: x => x.status_id, + principalTable: "item_status", + principalColumn: "id"); + }); + + migrationBuilder.CreateIndex( + name: "ix_inventory_status_id", + table: "inventory", + column: "status_id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "inventory"); + + migrationBuilder.DropTable( + name: "item_status"); + } + } +} diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs new file mode 100644 index 0000000..4c977ea --- /dev/null +++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs @@ -0,0 +1,106 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using barkmanapi; + +#nullable disable + +namespace barkmanapi.Migrations +{ + [DbContext(typeof(BarkContext))] + partial class BarkContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("barkmanapi.InventoryItems", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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.HasKey("Id") + .HasName("pk_inventory"); + + 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.InventoryItems", b => + { + b.HasOne("barkmanapi.ItemStatus", "Status") + .WithMany("Items") + .HasForeignKey("StatusId") + .HasConstraintName("fk_inventory_item_status_status_id"); + + b.Navigation("Status"); + }); + + modelBuilder.Entity("barkmanapi.ItemStatus", b => + { + b.Navigation("Items"); + }); +#pragma warning restore 612, 618 + } + } +} From a7458e14196492c9677bf84e917187b3df4bda9e Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Fri, 24 Jan 2025 10:58:16 -0600 Subject: [PATCH 08/11] fixed things --- .../20250124161707_status-2.Designer.cs | 104 ++++++++++++++++++ .../Migrations/20250124161707_status-2.cs | 22 ++++ .../Migrations/BarkContextModelSnapshot.cs | 7 +- barkmanAPI/barkDbModel.cs | 1 - 4 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 barkmanAPI/Migrations/20250124161707_status-2.Designer.cs create mode 100644 barkmanAPI/Migrations/20250124161707_status-2.cs diff --git a/barkmanAPI/Migrations/20250124161707_status-2.Designer.cs b/barkmanAPI/Migrations/20250124161707_status-2.Designer.cs new file mode 100644 index 0000000..fe9df11 --- /dev/null +++ b/barkmanAPI/Migrations/20250124161707_status-2.Designer.cs @@ -0,0 +1,104 @@ +// +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("20250124161707_status-2")] + partial class status2 + { + /// + 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.InventoryItems", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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.HasKey("Id") + .HasName("pk_inventory"); + + 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.InventoryItems", b => + { + b.HasOne("barkmanapi.ItemStatus", "Status") + .WithMany() + .HasForeignKey("StatusId") + .HasConstraintName("fk_inventory_item_status_status_id"); + + b.Navigation("Status"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/barkmanAPI/Migrations/20250124161707_status-2.cs b/barkmanAPI/Migrations/20250124161707_status-2.cs new file mode 100644 index 0000000..c904a24 --- /dev/null +++ b/barkmanAPI/Migrations/20250124161707_status-2.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace barkmanapi.Migrations +{ + /// + public partial class status2 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs index 4c977ea..10252f0 100644 --- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs +++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs @@ -89,17 +89,12 @@ namespace barkmanapi.Migrations modelBuilder.Entity("barkmanapi.InventoryItems", b => { b.HasOne("barkmanapi.ItemStatus", "Status") - .WithMany("Items") + .WithMany() .HasForeignKey("StatusId") .HasConstraintName("fk_inventory_item_status_status_id"); b.Navigation("Status"); }); - - modelBuilder.Entity("barkmanapi.ItemStatus", b => - { - b.Navigation("Items"); - }); #pragma warning restore 612, 618 } } diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 91b0b40..8618897 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -24,5 +24,4 @@ public class ItemStatus { public string Id { get; set; } public string Name { get; set; } - public ICollection Items { get; } = new List(); } \ No newline at end of file From 3c2bda989a71291ce4862aaa1aa67319788b6095 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Fri, 24 Jan 2025 11:13:08 -0600 Subject: [PATCH 09/11] deleted empty migration --- .../20250124161707_status-2.Designer.cs | 104 ------------------ .../Migrations/20250124161707_status-2.cs | 22 ---- 2 files changed, 126 deletions(-) delete mode 100644 barkmanAPI/Migrations/20250124161707_status-2.Designer.cs delete mode 100644 barkmanAPI/Migrations/20250124161707_status-2.cs diff --git a/barkmanAPI/Migrations/20250124161707_status-2.Designer.cs b/barkmanAPI/Migrations/20250124161707_status-2.Designer.cs deleted file mode 100644 index fe9df11..0000000 --- a/barkmanAPI/Migrations/20250124161707_status-2.Designer.cs +++ /dev/null @@ -1,104 +0,0 @@ -// -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("20250124161707_status-2")] - partial class status2 - { - /// - 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.InventoryItems", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - 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.HasKey("Id") - .HasName("pk_inventory"); - - 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.InventoryItems", b => - { - b.HasOne("barkmanapi.ItemStatus", "Status") - .WithMany() - .HasForeignKey("StatusId") - .HasConstraintName("fk_inventory_item_status_status_id"); - - b.Navigation("Status"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/barkmanAPI/Migrations/20250124161707_status-2.cs b/barkmanAPI/Migrations/20250124161707_status-2.cs deleted file mode 100644 index c904a24..0000000 --- a/barkmanAPI/Migrations/20250124161707_status-2.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace barkmanapi.Migrations -{ - /// - public partial class status2 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} From d593d0753e36a40ccb644302951399124c2be7b6 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Fri, 24 Jan 2025 11:26:47 -0600 Subject: [PATCH 10/11] Refactor inventory status to use object instead of string. --- barkmanui/src/features/inventory/ItemDetail.tsx | 2 +- barkmanui/src/features/inventory/types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/barkmanui/src/features/inventory/ItemDetail.tsx b/barkmanui/src/features/inventory/ItemDetail.tsx index 81c7e00..2d17c0b 100644 --- a/barkmanui/src/features/inventory/ItemDetail.tsx +++ b/barkmanui/src/features/inventory/ItemDetail.tsx @@ -32,7 +32,7 @@ function ItemDetail() { ID: {data.id} Brand: {data.brand} Name: {data.name} - Status: {data.status} + Status: {data.status.name} Serial Number: {data.serialNumber} Rental Price: ${data.rentalPrice} Replacement Cost: ${data.replacementCost} diff --git a/barkmanui/src/features/inventory/types.ts b/barkmanui/src/features/inventory/types.ts index 62b5908..417b285 100644 --- a/barkmanui/src/features/inventory/types.ts +++ b/barkmanui/src/features/inventory/types.ts @@ -2,7 +2,7 @@ export interface InventoryItem { id: number, brand: string, name: string, - status: string, + status: {id: string; name: string}, serialNumber: string, rentalPrice: number, replacementCost: number, From 25f767979e44cc64fdeb3354ce3bf4276364ed1f Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Fri, 24 Jan 2025 11:57:58 -0600 Subject: [PATCH 11/11] fixed status --- barkmanAPI/barkDbModel.cs | 1 + barkmanui/src/features/inventory/EditItem.tsx | 7 ++++--- barkmanui/src/features/inventory/InventoryList.tsx | 2 +- barkmanui/src/features/inventory/types.ts | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 8618897..77cce27 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -15,6 +15,7 @@ public class InventoryItems public string Brand { get; set; } public string? SerialNumber { get; set; } public ItemStatus Status { get; set; } + public string? StatusId { get; set; } public float? RentalPrice { get; set; } public float? ReplacementCost { get; set; } public string? Notes { get; set; } diff --git a/barkmanui/src/features/inventory/EditItem.tsx b/barkmanui/src/features/inventory/EditItem.tsx index 97fb7e7..5c34c6e 100644 --- a/barkmanui/src/features/inventory/EditItem.tsx +++ b/barkmanui/src/features/inventory/EditItem.tsx @@ -15,7 +15,8 @@ function EditItem() { initialValues: { name: "", brand: "", - status: "", + statusId: "", + status: {name: "", id: ""}, serialNumber: "", rentalPrice: 0, replacementCost: 0, @@ -94,8 +95,8 @@ function EditItem() { placeholder="Brand" {...editItemForm.getInputProps('brand')}/> - + {data.id} {data.brand} {data.name} - {data.status} + {data.statusId} Details diff --git a/barkmanui/src/features/inventory/types.ts b/barkmanui/src/features/inventory/types.ts index 417b285..627572b 100644 --- a/barkmanui/src/features/inventory/types.ts +++ b/barkmanui/src/features/inventory/types.ts @@ -3,6 +3,7 @@ export interface InventoryItem { brand: string, name: string, status: {id: string; name: string}, + statusId: string; serialNumber: string, rentalPrice: number, replacementCost: number,