From 3ab1c40da34c79aed3ab87ae4628652ed1d5b526 Mon Sep 17 00:00:00 2001 From: Paul Frank Date: Sun, 12 Nov 2023 19:30:46 +0100 Subject: [PATCH] WIP get user bookings --- .../TableConverters/TableConverter.cs | 4 +-- .../TableConverters/TableToGetConverter.cs | 2 +- .../Interfaces/IBookingRepository.cs | 2 +- .../Repositories/BookingRepository.cs | 6 ++-- .../Repositories/TableRepository.cs | 4 +-- .../Dtos/TableDtos/TableDto.cs | 6 ++-- ...s => 20231112181725_AppUserId.Designer.cs} | 28 ++++++++----------- ...ldFixes.cs => 20231112181725_AppUserId.cs} | 16 +++++------ .../TableBookingContextModelSnapshot.cs | 24 +++++++--------- .../TableBooking.Model/Models/Booking.cs | 2 +- .../TableBooking.Model/Models/Table.cs | 2 +- .../TableBooking.Model.csproj | 4 +++ .../Controllers/BookingController.cs | 2 ++ .../TableBooking/Interfaces/ITableService.cs | 3 +- TableBookingAPI/TableBooking/Program.cs | 4 --- .../TableBooking/Services/BookingService.cs | 16 +++++++---- .../TableBooking/Services/TableService.cs | 8 ++++++ 17 files changed, 71 insertions(+), 62 deletions(-) rename TableBookingAPI/TableBooking.Model/Migrations/{20231103174905_initialProperWithOldFixes.Designer.cs => 20231112181725_AppUserId.Designer.cs} (96%) rename TableBookingAPI/TableBooking.Model/Migrations/{20231103174905_initialProperWithOldFixes.cs => 20231112181725_AppUserId.cs} (96%) diff --git a/TableBookingAPI/TableBooking.Logic/Converters/TableConverters/TableConverter.cs b/TableBookingAPI/TableBooking.Logic/Converters/TableConverters/TableConverter.cs index 00ef3b7..d8bc466 100644 --- a/TableBookingAPI/TableBooking.Logic/Converters/TableConverters/TableConverter.cs +++ b/TableBookingAPI/TableBooking.Logic/Converters/TableConverters/TableConverter.cs @@ -19,8 +19,8 @@ public TableDto TableToTableDto(Table table) { return new TableDto { - RestaurantId = table.Restaurant.Id, - NumberOfSeats = table.NumberOfSeats + RestaurantId = table.RestaurantId, + NumberOfSeats = table.NumberOfSeats, }; } } diff --git a/TableBookingAPI/TableBooking.Logic/Converters/TableConverters/TableToGetConverter.cs b/TableBookingAPI/TableBooking.Logic/Converters/TableConverters/TableToGetConverter.cs index 58a9f61..ec97484 100644 --- a/TableBookingAPI/TableBooking.Logic/Converters/TableConverters/TableToGetConverter.cs +++ b/TableBookingAPI/TableBooking.Logic/Converters/TableConverters/TableToGetConverter.cs @@ -20,7 +20,7 @@ public GetTablesDto TableToTableDto(Table table) return new GetTablesDto { Id = table.Id, - RestaurantId = table.Restaurant.Id, + RestaurantId = table.RestaurantId, NumberOfSeats = table.NumberOfSeats }; } diff --git a/TableBookingAPI/TableBooking.Logic/Interfaces/IBookingRepository.cs b/TableBookingAPI/TableBooking.Logic/Interfaces/IBookingRepository.cs index 4456725..2f8077b 100644 --- a/TableBookingAPI/TableBooking.Logic/Interfaces/IBookingRepository.cs +++ b/TableBookingAPI/TableBooking.Logic/Interfaces/IBookingRepository.cs @@ -5,6 +5,6 @@ namespace TableBooking.Logic.Interfaces public interface IBookingRepository : IGenericRepository { public Task> GetAllBookingsForSpecificUserAsync(Guid userId); - public Task GetBookingByIdForSpecificUserAsync(Guid bookingId, Guid userId); + public Task GetBookingByIdForSpecificUserAsync(Guid bookingId, Guid userId); } } diff --git a/TableBookingAPI/TableBooking.Logic/Repositories/BookingRepository.cs b/TableBookingAPI/TableBooking.Logic/Repositories/BookingRepository.cs index efa540a..816f627 100644 --- a/TableBookingAPI/TableBooking.Logic/Repositories/BookingRepository.cs +++ b/TableBookingAPI/TableBooking.Logic/Repositories/BookingRepository.cs @@ -13,12 +13,12 @@ public BookingRepository(TableBookingContext context) : base(context) public async Task> GetAllBookingsForSpecificUserAsync(Guid userId) { - return await _objectSet.Where(x => x.User.Id.Equals(userId)).ToListAsync(); + return await _objectSet.Where(x => x.Id.Equals(userId)).ToListAsync(); } - public async Task GetBookingByIdForSpecificUserAsync(Guid bookingId, Guid userId) + public async Task GetBookingByIdForSpecificUserAsync(Guid bookingId, Guid userId) { - return await _objectSet.FirstOrDefaultAsync(x => x.Id.Equals(bookingId) && x.User.Id.Equals(userId)); + return await _objectSet.FirstOrDefaultAsync(x => x.Id.Equals(bookingId) && x.Id.Equals(userId)); } } } diff --git a/TableBookingAPI/TableBooking.Logic/Repositories/TableRepository.cs b/TableBookingAPI/TableBooking.Logic/Repositories/TableRepository.cs index 04cf8f6..6471c9d 100644 --- a/TableBookingAPI/TableBooking.Logic/Repositories/TableRepository.cs +++ b/TableBookingAPI/TableBooking.Logic/Repositories/TableRepository.cs @@ -13,8 +13,8 @@ public TableRepository(TableBookingContext context) : base(context) public async Task> GetTablesByRestaurantIdAsync(Guid restaurantId) { return await _objectSet - .Include(x => x.Restaurant) - .Where(x => x.Restaurant.Id.Equals(restaurantId)) + .Include(x => x.RestaurantId) + .Where(x => x.RestaurantId.Equals(restaurantId)) .ToListAsync(); } } diff --git a/TableBookingAPI/TableBooking.Model/Dtos/TableDtos/TableDto.cs b/TableBookingAPI/TableBooking.Model/Dtos/TableDtos/TableDto.cs index 43e6413..c3ecee8 100644 --- a/TableBookingAPI/TableBooking.Model/Dtos/TableDtos/TableDto.cs +++ b/TableBookingAPI/TableBooking.Model/Dtos/TableDtos/TableDto.cs @@ -1,6 +1,8 @@ -namespace TableBooking.Model.Dtos.TableDtos +using TableBooking.Model.Models; + +namespace TableBooking.Model.Dtos.TableDtos { - public class TableDto + public class TableDto : Entity { public int NumberOfSeats { get; set; } public Guid RestaurantId { get; set; } diff --git a/TableBookingAPI/TableBooking.Model/Migrations/20231103174905_initialProperWithOldFixes.Designer.cs b/TableBookingAPI/TableBooking.Model/Migrations/20231112181725_AppUserId.Designer.cs similarity index 96% rename from TableBookingAPI/TableBooking.Model/Migrations/20231103174905_initialProperWithOldFixes.Designer.cs rename to TableBookingAPI/TableBooking.Model/Migrations/20231112181725_AppUserId.Designer.cs index e40bdb2..1a128c9 100644 --- a/TableBookingAPI/TableBooking.Model/Migrations/20231103174905_initialProperWithOldFixes.Designer.cs +++ b/TableBookingAPI/TableBooking.Model/Migrations/20231112181725_AppUserId.Designer.cs @@ -12,8 +12,8 @@ namespace TableBooking.Model.Migrations { [DbContext(typeof(TableBookingContext))] - [Migration("20231103174905_initialProperWithOldFixes")] - partial class initialProperWithOldFixes + [Migration("20231112181725_AppUserId")] + partial class AppUserId { protected override void BuildTargetModel(ModelBuilder modelBuilder) { @@ -89,6 +89,9 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .ValueGeneratedOnAdd() .HasColumnType("uuid"); + b.Property("AppUserId") + .HasColumnType("uuid"); + b.Property("Date") .HasColumnType("timestamp with time zone"); @@ -98,14 +101,11 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("TableId") .HasColumnType("uuid"); - b.Property("UserId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("TableId"); + b.HasIndex("AppUserId"); - b.HasIndex("UserId"); + b.HasIndex("TableId"); b.ToTable("Bookings"); }); @@ -213,21 +213,19 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) modelBuilder.Entity("TableBooking.Model.Models.Booking", b => { - b.HasOne("TableBooking.Model.Models.Table", "Table") + b.HasOne("TableBooking.Model.Models.AppUser", null) .WithMany("Bookings") - .HasForeignKey("TableId") + .HasForeignKey("AppUserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("TableBooking.Model.Models.AppUser", "User") + b.HasOne("TableBooking.Model.Models.Table", "Table") .WithMany("Bookings") - .HasForeignKey("UserId") + .HasForeignKey("TableId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Table"); - - b.Navigation("User"); }); modelBuilder.Entity("TableBooking.Model.Models.Rating", b => @@ -251,13 +249,11 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) modelBuilder.Entity("TableBooking.Model.Models.Table", b => { - b.HasOne("TableBooking.Model.Models.Restaurant", "Restaurant") + b.HasOne("TableBooking.Model.Models.Restaurant", null) .WithMany("Tables") .HasForeignKey("RestaurantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - - b.Navigation("Restaurant"); }); modelBuilder.Entity("TableBooking.Model.Models.AppUser", b => diff --git a/TableBookingAPI/TableBooking.Model/Migrations/20231103174905_initialProperWithOldFixes.cs b/TableBookingAPI/TableBooking.Model/Migrations/20231112181725_AppUserId.cs similarity index 96% rename from TableBookingAPI/TableBooking.Model/Migrations/20231103174905_initialProperWithOldFixes.cs rename to TableBookingAPI/TableBooking.Model/Migrations/20231112181725_AppUserId.cs index db80a58..0afc7dd 100644 --- a/TableBookingAPI/TableBooking.Model/Migrations/20231103174905_initialProperWithOldFixes.cs +++ b/TableBookingAPI/TableBooking.Model/Migrations/20231112181725_AppUserId.cs @@ -5,7 +5,7 @@ namespace TableBooking.Model.Migrations { - public partial class initialProperWithOldFixes : Migration + public partial class AppUserId : Migration { protected override void Up(MigrationBuilder migrationBuilder) { @@ -113,7 +113,7 @@ protected override void Up(MigrationBuilder migrationBuilder) Id = table.Column(type: "uuid", nullable: false), Date = table.Column(type: "timestamp with time zone", nullable: false), DurationInMinutes = table.Column(type: "integer", nullable: false), - UserId = table.Column(type: "uuid", nullable: false), + AppUserId = table.Column(type: "uuid", nullable: false), TableId = table.Column(type: "uuid", nullable: false) }, constraints: table => @@ -126,22 +126,22 @@ protected override void Up(MigrationBuilder migrationBuilder) principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_Bookings_Users_UserId", - column: x => x.UserId, + name: "FK_Bookings_Users_AppUserId", + column: x => x.AppUserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateIndex( - name: "IX_Bookings_TableId", + name: "IX_Bookings_AppUserId", table: "Bookings", - column: "TableId"); + column: "AppUserId"); migrationBuilder.CreateIndex( - name: "IX_Bookings_UserId", + name: "IX_Bookings_TableId", table: "Bookings", - column: "UserId"); + column: "TableId"); migrationBuilder.CreateIndex( name: "IX_Ratings_AppUserId", diff --git a/TableBookingAPI/TableBooking.Model/Migrations/TableBookingContextModelSnapshot.cs b/TableBookingAPI/TableBooking.Model/Migrations/TableBookingContextModelSnapshot.cs index 8bdc47f..e277a52 100644 --- a/TableBookingAPI/TableBooking.Model/Migrations/TableBookingContextModelSnapshot.cs +++ b/TableBookingAPI/TableBooking.Model/Migrations/TableBookingContextModelSnapshot.cs @@ -87,6 +87,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .ValueGeneratedOnAdd() .HasColumnType("uuid"); + b.Property("AppUserId") + .HasColumnType("uuid"); + b.Property("Date") .HasColumnType("timestamp with time zone"); @@ -96,14 +99,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("TableId") .HasColumnType("uuid"); - b.Property("UserId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("TableId"); + b.HasIndex("AppUserId"); - b.HasIndex("UserId"); + b.HasIndex("TableId"); b.ToTable("Bookings"); }); @@ -211,21 +211,19 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("TableBooking.Model.Models.Booking", b => { - b.HasOne("TableBooking.Model.Models.Table", "Table") + b.HasOne("TableBooking.Model.Models.AppUser", null) .WithMany("Bookings") - .HasForeignKey("TableId") + .HasForeignKey("AppUserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("TableBooking.Model.Models.AppUser", "User") + b.HasOne("TableBooking.Model.Models.Table", "Table") .WithMany("Bookings") - .HasForeignKey("UserId") + .HasForeignKey("TableId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Table"); - - b.Navigation("User"); }); modelBuilder.Entity("TableBooking.Model.Models.Rating", b => @@ -249,13 +247,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("TableBooking.Model.Models.Table", b => { - b.HasOne("TableBooking.Model.Models.Restaurant", "Restaurant") + b.HasOne("TableBooking.Model.Models.Restaurant", null) .WithMany("Tables") .HasForeignKey("RestaurantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - - b.Navigation("Restaurant"); }); modelBuilder.Entity("TableBooking.Model.Models.AppUser", b => diff --git a/TableBookingAPI/TableBooking.Model/Models/Booking.cs b/TableBookingAPI/TableBooking.Model/Models/Booking.cs index e514af7..9fed1aa 100644 --- a/TableBookingAPI/TableBooking.Model/Models/Booking.cs +++ b/TableBookingAPI/TableBooking.Model/Models/Booking.cs @@ -5,7 +5,7 @@ public class Booking : Entity public DateTime Date { get; set; } public int DurationInMinutes { get; set; } public Table Table { get; set; } - public AppUser User { get; set; } + public Guid AppUserId { get; set; } public Guid TableId { get; set; } } } \ No newline at end of file diff --git a/TableBookingAPI/TableBooking.Model/Models/Table.cs b/TableBookingAPI/TableBooking.Model/Models/Table.cs index a6ec314..9fa2ec6 100644 --- a/TableBookingAPI/TableBooking.Model/Models/Table.cs +++ b/TableBookingAPI/TableBooking.Model/Models/Table.cs @@ -3,7 +3,7 @@ public class Table : Entity { public int NumberOfSeats { get; set; } - public Restaurant Restaurant { get; set; } + public Guid RestaurantId { get; set; } public IEnumerable Bookings { get; set; } } } diff --git a/TableBookingAPI/TableBooking.Model/TableBooking.Model.csproj b/TableBookingAPI/TableBooking.Model/TableBooking.Model.csproj index 6b43c30..deb431b 100644 --- a/TableBookingAPI/TableBooking.Model/TableBooking.Model.csproj +++ b/TableBookingAPI/TableBooking.Model/TableBooking.Model.csproj @@ -21,4 +21,8 @@ + + + + diff --git a/TableBookingAPI/TableBooking/Controllers/BookingController.cs b/TableBookingAPI/TableBooking/Controllers/BookingController.cs index d5d5e34..908093b 100644 --- a/TableBookingAPI/TableBooking/Controllers/BookingController.cs +++ b/TableBookingAPI/TableBooking/Controllers/BookingController.cs @@ -32,6 +32,8 @@ public BookingController(IBookingService bookingService, UserManager us [HttpGet("GetAllUserBookings")] + [ProducesResponseType(typeof(List), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task GetUserBookings() { var userId = Guid.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)); diff --git a/TableBookingAPI/TableBooking/Interfaces/ITableService.cs b/TableBookingAPI/TableBooking/Interfaces/ITableService.cs index 5af2caa..e4cbbf1 100644 --- a/TableBookingAPI/TableBooking/Interfaces/ITableService.cs +++ b/TableBookingAPI/TableBooking/Interfaces/ITableService.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Mvc; using TableBooking.Model.Dtos.TableDtos; +using TableBooking.Model.Models; namespace TableBooking.Api.Interfaces { @@ -11,6 +12,6 @@ public interface ITableService public Task CreateTableAsync(TableDto dto); public Task UpdateTableAsync(TableDto dto); public Task DeleteTableAsync(Guid tableId); + public Task GetTableObjectByIdAsync(Guid tableId); } - } diff --git a/TableBookingAPI/TableBooking/Program.cs b/TableBookingAPI/TableBooking/Program.cs index e8041e2..3c38987 100644 --- a/TableBookingAPI/TableBooking/Program.cs +++ b/TableBookingAPI/TableBooking/Program.cs @@ -122,10 +122,6 @@ options.User.RequireUniqueEmail = true; options.ClaimsIdentity.UserIdClaimType = ClaimTypes.NameIdentifier; }); - -//builder.Services.AddHttpContextAccessor(); -builder.Services.AddAuthorization(); - builder.Services.AddScoped(); builder.Services.AddTransient(); // doczytaj debilu diff --git a/TableBookingAPI/TableBooking/Services/BookingService.cs b/TableBookingAPI/TableBooking/Services/BookingService.cs index 2ba89c7..83cd89b 100644 --- a/TableBookingAPI/TableBooking/Services/BookingService.cs +++ b/TableBookingAPI/TableBooking/Services/BookingService.cs @@ -11,24 +11,28 @@ public class BookingService : IBookingService { public IUnitOfWork _unitOfWork; private readonly ITableConverter _tableConverter; + private readonly ITableService _tableService; - public BookingService(IUnitOfWork unitOfWork, ITableConverter tableConverter) + + public BookingService(IUnitOfWork unitOfWork, ITableConverter tableConverter, ITableService tableService) { _unitOfWork = unitOfWork; _tableConverter = tableConverter; + _tableService = tableService; } public async Task CreateBookingAsync(CreateBookingDto request, Guid userId) { - //string userId = User.FindFirstValue(ClaimTypes.NameIdentifier); // Retrieve the authenticated user's ID - + var table = await _tableService.GetTableObjectByIdAsync(request.TableId); + var newBooking = new Booking { Date = request.Date, DurationInMinutes = request.DurationInMinutes, - TableId = request.TableId + TableId = request.TableId, + AppUserId = userId, + Table = table }; - await _unitOfWork.BookingRepository.InsertAsync(newBooking); await _unitOfWork.SaveChangesAsync(); @@ -68,7 +72,7 @@ public async Task GetBookingByIdAsync(Guid bookingId, Guid userId Date = booking.Date, DurationInMinutes = booking.DurationInMinutes, TableDto = _tableConverter.TableToTableDto(booking.Table), - UserId = booking.User.Id + UserId = userId }; return new OkObjectResult(bookingDto); } diff --git a/TableBookingAPI/TableBooking/Services/TableService.cs b/TableBookingAPI/TableBooking/Services/TableService.cs index b3c7dcd..fd078d2 100644 --- a/TableBookingAPI/TableBooking/Services/TableService.cs +++ b/TableBookingAPI/TableBooking/Services/TableService.cs @@ -53,6 +53,14 @@ public async Task GetTableByIdAsync(Guid tableId) return new BadRequestObjectResult($"Can't find table with {tableId}"); return new OkObjectResult(table); } + + public async Task
GetTableObjectByIdAsync(Guid tableId) + { + var table = await _unitOfWork.TableRepository.GetByIdAsync(tableId); + if (table == null) + throw new BadHttpRequestException($"Table id: {tableId} doesn't exist."); + return table; + } public async Task GetTableByRestaurantAsync(Guid restaurantId) {