public async Task <ActionResult <SeatAuditoriumDomainModel> > GetSeatsByAuditoriumId(int id) { var seatsInAuditorium = await _seatService.GetSeatsByAuditoriumId(id); if (seatsInAuditorium == null) { return(NotFound(Messages.SEAT_AUDITORIUM_NOT_FOUND)); } return(Ok(seatsInAuditorium)); }
public async Task <ActionResult <IEnumerable <SeatDomainModel> > > GetByAuditoriumId(int auditoriumId) { IEnumerable <SeatDomainModel> seatDomainModels; seatDomainModels = await _seatService.GetSeatsByAuditoriumId(auditoriumId); if (seatDomainModels == null) { seatDomainModels = new List <SeatDomainModel>(); } return(Ok(seatDomainModels)); }
public async Task <AuditoriumDomainModel> UpdateAuditorium(AuditoriumDomainModel updatedAuditorium, int numberOfRows, int numberOfColumns) { var originalAuditoriumSeats = await _seatService.GetSeatsByAuditoriumId(updatedAuditorium.Id); if (originalAuditoriumSeats == null) { return(null); } // Proveravanje trenutnog stanja auditorijuma int maxRow = 1; int maxColumn = 1; void setMax(IEnumerable <SeatDomainModel> audit) { foreach (SeatDomainModel seat in audit) { if (seat.Row > maxRow) { maxRow = seat.Row; } if (seat.Number > maxColumn) { maxColumn = seat.Number; } } } void setMaxRow(IEnumerable <SeatDomainModel> audit) { foreach (SeatDomainModel seat in audit) { maxRow = 1; if (seat.Row > maxRow) { maxRow = seat.Row; } } } setMax(originalAuditoriumSeats); // Uspostavljanje parametara za izmenu stanja sedista updatedAuditorium.SeatsList = originalAuditoriumSeats.ToList(); int rowDelta = numberOfRows - maxRow; // parametar koji definise kako se menja broj kolona moze biti pozitivan i negativan int columnDelta = numberOfColumns - maxColumn; // parametar koji definise kako se menja broj redova moze biti pozitivan i negativan if (rowDelta != 0 || columnDelta != 0) { int i = 0, j = 0; // brojaci // ako treba da se dodaju redovi if (rowDelta > 0) { for (i = maxRow + 1; i <= maxRow + rowDelta; i++) { for (j = 1; j <= maxColumn; j++) { SeatDomainModel newSeat = new SeatDomainModel() { AuditoriumId = updatedAuditorium.Id, Row = i, Number = j }; // sedista se dodaju u objekat koji ce se updejtovati updatedAuditorium.SeatsList.Add(newSeat); } } setMaxRow(updatedAuditorium.SeatsList); } // ako treba da se izbrisu redovi else if (rowDelta < 0) { for (i = maxRow; i > maxRow + rowDelta; i--) { for (j = 1; j <= maxColumn; j++) { // sedista se brisu iz baze var seatToDelete = await _seatService.GetSeatByAuditoriumIdRowSeatnum(updatedAuditorium.Id, i, j); if (seatToDelete == null) { continue; } // ovo je neophodno jer navodno ne moze da se radi .remove preko kopije objekta nego mora da bude 'isti tip objekta' var seatListObjectToRemove = updatedAuditorium.SeatsList.Where(x => x.Id == seatToDelete.Id).FirstOrDefault(); updatedAuditorium.SeatsList.Remove(seatListObjectToRemove); var result = await _seatService.DeleteSeat(seatToDelete.Id); if (result == null) { return(null); } } } setMaxRow(updatedAuditorium.SeatsList); } if (columnDelta > 0) { for (i = 1; i <= maxRow; i++) { for (j = maxColumn + 1; j <= maxColumn + columnDelta; j++) { SeatDomainModel newSeat = new SeatDomainModel() { AuditoriumId = updatedAuditorium.Id, Row = i, Number = j }; // sedista se dodaju u objekat koji ce se updejtovati updatedAuditorium.SeatsList.Add(newSeat); } } } else if (columnDelta < 0) { for (i = 1; i <= maxRow; i++) { for (j = maxColumn; j > maxColumn + columnDelta; j--) { // ovde skidanje sa liste ide prvo jer sedista koja su samo dodata na listu a nisu u bazu takodje treba da se obrisu var seatListObjectToRemove = updatedAuditorium.SeatsList.Where(x => x.AuditoriumId == updatedAuditorium.Id && x.Row == i && x.Number == j).FirstOrDefault(); updatedAuditorium.SeatsList.Remove(seatListObjectToRemove); // sedista se brisu iz baze var seatToDelete = await _seatService.GetSeatByAuditoriumIdRowSeatnum(updatedAuditorium.Id, i, j); if (seatToDelete == null) { continue; } var result = _seatService.DeleteSeat(seatToDelete.Id); if (result == null) { return(null); } } } foreach (SeatDomainModel seat in updatedAuditorium.SeatsList) { if (seat.Row > maxRow) { maxRow = seat.Row; } } ; } } // SeatDomainModel se prevode u SeatList da bi se Auditorium objekat uneo u bazu List <Seat> auditoriumSeatList = new List <Seat>(); foreach (SeatDomainModel domainModel in updatedAuditorium.SeatsList) { Seat seat = new Seat() { Id = domainModel.Id, AuditoriumId = domainModel.AuditoriumId, Row = domainModel.Row, Number = domainModel.Number }; auditoriumSeatList.Add(seat); } // Kreira se updejtovani objekat za unos u bazu Auditorium auditorium = new Auditorium() { CinemaId = updatedAuditorium.CinemaId, Id = updatedAuditorium.Id, Name = updatedAuditorium.Name, Seats = auditoriumSeatList }; // Updejtovani auditorijum se vraca u bazu var data = _auditoriumsRepository.Update(auditorium); if (data == null) { return(null); } _auditoriumsRepository.Save(); // Prevodjenje vracenog Auditorijuma u AuditoriumDomainModel i return List <SeatDomainModel> resultSeatList = new List <SeatDomainModel>(); foreach (Seat seat in data.Seats) { SeatDomainModel seatDomainModel = new SeatDomainModel() { Id = seat.Id, AuditoriumId = seat.AuditoriumId, Row = seat.Row, Number = seat.Number }; resultSeatList.Add(seatDomainModel); } AuditoriumDomainModel returnResult = new AuditoriumDomainModel() { Id = data.Id, CinemaId = data.CinemaId, Name = data.Name, SeatsList = resultSeatList }; return(returnResult); }