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