Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion HotelBookingApp.Model/Data/HotelDataContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
.HasOne(fo => fo.Food)
.WithMany(f => f.FoodOrders)
.HasForeignKey(fo => fo.FoodId);

modelBuilder.Entity<FoodOrder>()
.HasOne(fo => fo.Order)
.WithMany(o => o.FoodOrders)
Expand All @@ -67,17 +68,33 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
.HasOne(fh => fh.Food)
.WithMany(f => f.FoodHotels)
.HasForeignKey(fh => fh.FoodId);

modelBuilder.Entity<FoodHotel>()
.HasOne(fh => fh.Hotel)
.WithMany(h => h.FoodHotels)
.WithMany(h => h.HotelFoods)
.HasForeignKey(fh => fh.HotelId);

modelBuilder.Entity<RoomHotel>()
.HasOne(ro => ro.Room)
.WithMany(r => r.RoomHotels)
.HasForeignKey(ro => ro.RoomId);

modelBuilder.Entity<RoomHotel>()
.HasOne(ro => ro.Hotel)
.WithMany(h => h.HotelRooms)
.HasForeignKey(ro => ro.HotelId);

modelBuilder.Entity<Room>()
.HasMany(r => r.RoomHotels)
.WithOne(ro => ro.Room)
.HasForeignKey(ro => ro.RoomId);


modelBuilder.Entity<RoomOrder>()
.HasOne(ro => ro.Room)
.WithMany(r => r.RoomOrders)
.HasForeignKey(ro => ro.RoomId);

modelBuilder.Entity<RoomOrder>()
.HasOne(ro => ro.Order)
.WithMany(o => o.RoomOrders)
Expand Down
1 change: 0 additions & 1 deletion HotelBookingApp.Model/Data/UnitOfWork.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ public class UnitOfWork : IUnitOfWork
{
private readonly HotelDataContext _context;

//dI injection thtough constructor
public UnitOfWork(HotelDataContext hotelDataContext, IUserRepository user, IFoodRepository food,
IHotelRepository hotel, IOrderRepository order, IRoomRepository room, IRoomTypeRepository roomType,
IFoodHotelRepository foodHotel, IFoodOrderRepository foodOrder, IRoomOrderRepository roomOrder, IRoomHotelRepository roomHotelRepository)
Expand Down
5 changes: 3 additions & 2 deletions HotelBookingApp.Model/Entities/Hotel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ public class Hotel : BaseEntity
public string Email { get; set; }
public string Website { get; set; }
public string Description { get; set; }
public double Rating { get; set; }
public string ImageUrl { get; set; }

public ICollection<FoodHotel> FoodHotels { get; set; } = new List<FoodHotel>();
public ICollection<FoodHotel> HotelFoods { get; set; } = new List<FoodHotel>();
public ICollection<Order> Orders { get; set; } = new List<Order>();
public ICollection<RoomHotel> RoomHotels { get; set; } = new List<RoomHotel>();
public ICollection<RoomHotel> HotelRooms { get; set; } = new List<RoomHotel>();
}
3 changes: 2 additions & 1 deletion HotelBookingApp.Model/Entities/Room.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ public class Room : BaseEntity
{
public string Name { get; set; }
public string Description { get; set; }
public int Price { get; set; }
public double Price { get; set; }
public int Capacity { get; set; }
public int BedCount { get; set; }
public bool IsBooked { get; set; }
public int RoomTypeId { get; set; }
public RoomType RoomType { get; set; }
Expand Down
8 changes: 7 additions & 1 deletion HotelBookingApp.Model/Interfaces/IUnitOfWork.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace HotelBookingApp.Data.Interfaces;
using HotelBookingApp.Data.Interfaces.ManyToMany;

namespace HotelBookingApp.Data.Interfaces;

public interface IUnitOfWork
{
Expand All @@ -9,5 +11,9 @@ public interface IUnitOfWork
IOrderRepository OrderRepository { get; }
IRoomRepository RoomRepository { get; }
IRoomTypeRepository RoomTypeRepository { get; }
IFoodHotelRepository FoodHotelRepository { get; }
IFoodOrderRepository FoodOrderRepository { get; }
IRoomOrderRepository RoomOrderRepository { get; }
IRoomHotelRepository RoomHotelRepository { get; }
Task SaveChangesAsync();
}
2 changes: 1 addition & 1 deletion HotelBookingApp.Model/Repositories/FoodHotelRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public override async Task<FoodHotel> GetByIdAsync(int id)
return await _dbSet
.Include(fh => fh.Food)
.Include(fh => fh.Hotel)
.FirstOrDefaultAsync(fh => fh.Id == id);
.FirstOrDefaultAsync(fh => fh.Id == id) ?? throw new ArgumentException("FoodHotel with this id does not exist");
}

public override async Task AddAsync(FoodHotel entity)
Expand Down
2 changes: 1 addition & 1 deletion HotelBookingApp.Model/Repositories/FoodOrderRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ public override async Task<FoodOrder> GetByIdAsync(int id)
return await _dbSet
.Include(fo => fo.Food)
.Include(fo => fo.Order)
.FirstOrDefaultAsync(fo => fo.Id == id);
.FirstOrDefaultAsync(fo => fo.Id == id) ?? throw new ArgumentException("FoodOrder with this id does not exist");
}
}
15 changes: 12 additions & 3 deletions HotelBookingApp.Model/Repositories/FoodRepository.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using HotelBookingApp.Data.Data;
using HotelBookingApp.Data.Interfaces;
using HotelBookingApp.Data.Entities;
using HotelBookingApp.Data.Interfaces;
using Microsoft.EntityFrameworkCore;

namespace HotelBookingApp.Data.Repositories;
Expand All @@ -13,16 +13,25 @@ public FoodRepository(HotelDataContext context) : base(context)

public override async Task<IEnumerable<Food>> GetAllAsync()
{
return await _dbSet
var list = await _dbSet
.Include(f => f.FoodHotels)
.ThenInclude(f => f.Hotel)
.Include(f => f.FoodOrders)
.ToListAsync();

foreach (var food in list)
{
food.Name = food.Name.ToLower();
}
return list;
}

public override async Task<Food> GetByIdAsync(int id)
{
return await _dbSet
.Include(f => f.FoodHotels)
.ThenInclude(f => f.Hotel)
.Include(f => f.FoodOrders)
.FirstOrDefaultAsync(f => f.Id == id);
.FirstOrDefaultAsync(f => f.Id == id) ?? throw new ArgumentException("Food with this id does not exist");
}
}
2 changes: 1 addition & 1 deletion HotelBookingApp.Model/Repositories/GeneralRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public virtual async Task<IEnumerable<TEntity>> GetAllAsync()

public virtual async Task<TEntity> FindAsync(Expression<Func<TEntity, bool>> predicate)
{
return await _dbSet.SingleOrDefaultAsync(predicate);
return await _dbSet.SingleOrDefaultAsync(predicate) ?? throw new ArgumentException("Entity with this predicate does not exist");
}

public virtual async Task AddAsync(TEntity entity)
Expand Down
25 changes: 19 additions & 6 deletions HotelBookingApp.Model/Repositories/HotelRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,32 @@ public HotelRepository(HotelDataContext context) : base(context)

public override async Task<IEnumerable<Hotel>> GetAllAsync()
{
return await _dbSet
.Include(h => h.RoomHotels)
.Include(h => h.FoodHotels)
var hotels = await _dbSet
.Include(h => h.HotelRooms)
.ThenInclude(r => r.Room)
.Include(h => h.HotelRooms)
.Include(h => h.HotelFoods)
.Include(h => h.Orders)
.ToListAsync();

foreach (var hotel in hotels)
{
hotel.Name = hotel.Name.ToLower();
hotel.Address = hotel.Address.ToLower();
hotel.City = hotel.City.ToLower();
hotel.Country = hotel.Country.ToLower();
}
return hotels;
}

public override async Task<Hotel> GetByIdAsync(int id)
{
return await _dbSet
.Include(h => h.RoomHotels)
.Include(h => h.FoodHotels)
.Include(h => h.HotelRooms)
.ThenInclude(r => r.Room)
.Include(h => h.HotelRooms)
.Include(h => h.HotelFoods)
.Include(h => h.Orders)
.FirstOrDefaultAsync(h => h.Id == id);
.FirstOrDefaultAsync(h => h.Id == id) ?? throw new ArgumentException("Hotel with this id does not exist");
}
}
5 changes: 3 additions & 2 deletions HotelBookingApp.Model/Repositories/OrderRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public override async Task<IEnumerable<Order>> GetAllAsync()
{
return await _dbSet
.Include(o => o.RoomOrders)
.ThenInclude(o => o.Room)
.Include(o => o.FoodOrders)
.ToListAsync();
}
Expand All @@ -23,8 +24,8 @@ public override async Task<Order> GetByIdAsync(int id)
{
return await _dbSet
.Include(o => o.RoomOrders)
.ThenInclude(o => o.Room)
.Include(o => o.FoodOrders)
.FirstOrDefaultAsync(o => o.Id == id);
.FirstOrDefaultAsync(o => o.Id == id) ?? throw new ArgumentException("Order with this id does not exist");
}

}
2 changes: 1 addition & 1 deletion HotelBookingApp.Model/Repositories/RoomHotelRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ public override async Task<RoomHotel> GetByIdAsync(int id)
return await _dbSet
.Include(rh => rh.Room)
.Include(rh => rh.Hotel)
.FirstOrDefaultAsync(rh => rh.Id == id);
.FirstOrDefaultAsync(rh => rh.Id == id) ?? throw new ArgumentException("RoomHotel with this id does not exist");
}
}
2 changes: 1 addition & 1 deletion HotelBookingApp.Model/Repositories/RoomOrderRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ public override async Task<RoomOrder> GetByIdAsync(int id)
return await _dbSet
.Include(ro => ro.Room)
.Include(ro => ro.Order)
.FirstOrDefaultAsync(ro => ro.Id == id);
.FirstOrDefaultAsync(ro => ro.Id == id) ?? throw new ArgumentException("RoomOrder with this id does not exist");
}
}
4 changes: 3 additions & 1 deletion HotelBookingApp.Model/Repositories/RoomRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@ public override async Task<IEnumerable<Room>> GetAllAsync()
{
return await _dbSet
.Include(h => h.RoomHotels)
.ThenInclude(h => h.Hotel)
.Include(r => r.RoomOrders)
.ToListAsync();
}
public override async Task<Room> GetByIdAsync(int id)
{
return await _dbSet
.Include(h => h.RoomHotels)
.ThenInclude(h => h.Hotel)
.Include(r => r.RoomOrders)
.FirstOrDefaultAsync(r => r.Id == id);
.FirstOrDefaultAsync(r => r.Id == id) ?? throw new ArgumentException("Room with this id does not exist");
}
}
2 changes: 1 addition & 1 deletion HotelBookingApp.Model/Repositories/RoomTypeRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ public override async Task<RoomType> GetByIdAsync(int id)
{
return await _dbSet
.Include(rt => rt.Rooms)
.FirstOrDefaultAsync(rt => rt.Id == id);
.FirstOrDefaultAsync(rt => rt.Id == id) ?? throw new ArgumentException("RoomType with this id does not exist");
}
}
2 changes: 1 addition & 1 deletion HotelBookingApp.Model/Repositories/UserRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public async Task<IEnumerable<User>> GetAllAsync()
public async Task<User> GetByIdAsync(int id)
{

return (await _customerSet.Include(i => i.Orders).FirstOrDefaultAsync(x => x.Id == id));
return await _customerSet.Include(i => i.Orders).FirstOrDefaultAsync(x => x.Id == id) ?? throw new ArgumentException("User with this id does not exist");
}

public async Task<bool> AddAsync(User entity)
Expand Down
3 changes: 2 additions & 1 deletion HotelBookingApp.Server/Controllers/DataSeedController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@

namespace HotelBookingApp.Server.Controllers
{
[Route("api/[controller]")]

[ApiController]
[Route("api/[controller]")]
public class DataSeedController : ControllerBase
{
private readonly IServiceProvider _serviceProvider;
Expand Down
33 changes: 5 additions & 28 deletions HotelBookingApp.Server/Controllers/FoodController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
namespace HotelBookingApp.Server.Controllers;

[ApiController]
[Route("[controller]")]
[Route("api/[controller]")]
public class FoodController : ControllerBase
{
private readonly IFoodService _foodService;
Expand All @@ -20,14 +20,14 @@ public FoodController(IFoodService foodService, ILogger<FoodController> logger)
}

[HttpGet]
public async Task<ActionResult<IEnumerable<FoodModel>>> GetFoods()
public async Task<ActionResult<IEnumerable<FoodDto>>> GetFoods()
{
var foods = await _foodService.GetAllAsync();
return Ok(foods);
}

[HttpGet("{id}")]
public async Task<ActionResult<FoodModel>> GetFoodById(int id)
public async Task<ActionResult<FoodDto>> GetFoodById(int id)
{
var food = await _foodService.GetByIdAsync(id);
if (food == null)
Expand All @@ -39,7 +39,7 @@ public async Task<ActionResult<FoodModel>> GetFoodById(int id)
}

[HttpPost]
public async Task<ActionResult> AddFood([FromBody] FoodModel food)
public async Task<ActionResult> AddFood([FromBody] FoodDto food)
{
if (food == null)
{
Expand All @@ -52,7 +52,7 @@ public async Task<ActionResult> AddFood([FromBody] FoodModel food)
}

[HttpPut("{id}")]
public async Task<ActionResult> EditFood(int id, [FromBody] FoodModel food)
public async Task<ActionResult> EditFood(int id, [FromBody] FoodDto food)
{
if (food == null)
{
Expand Down Expand Up @@ -85,27 +85,4 @@ public async Task<ActionResult> DeleteFood(int id)
await _foodService.DeleteAsync(id);
return Ok();
}
[HttpGet("/Join")]
public async Task<ActionResult<IEnumerable<FoodHotelModel>>> GetFoodWithHotel()
{
var foodHotels = await _foodService.GetAllFoodHotelLinks();

return Ok(foodHotels);
}

[HttpPost("/JoinHotel/{foodId}/{hotelId}")]
public async Task<ActionResult> JoinFoodWithHotel(int foodId, int hotelId)
{
await _foodService.JoinFoodWithHotel(foodId, hotelId);
return Ok();
}

[HttpPost("JoinOrder/{foodId}/{orderId}")]
public async Task<ActionResult> JoinFoodWithOrder(int foodId, int orderId)
{
await _foodService.JoinFoodWithOrder(foodId, orderId);
return Ok();
}


}
Loading