public async Task <GenericObjectResponse <RoomResponse> > AddRoom(CreateRoomPayload payload, long?userId) { try { Logger.Debug($"Attempting to create new room for user {userId}"); RoomResponse roomResponse = null; RoomValidationService service = new RoomValidationService(); GenericStatusMessage validationResult = service.ValidateRoomData(payload); if (!validationResult.Success) { return(new GenericObjectResponse <RoomResponse>(validationResult.Message)); } using (ReservationDataContext context = new ReservationDataContext()) { Room room = ConvertRoomFromPayload(payload, userId); context.Rooms.Add(room); context.SaveChanges(); roomResponse = ConvertRoomToResponse(room, userId); } Logger.Debug($"Attempting to create working hours for room {roomResponse.Id}"); WorkingHoursManipulationService workingHoursService = new WorkingHoursManipulationService(); GenericObjectResponse <List <WorkingHoursPayload> > workingHours = workingHoursService.ChangeWorkingHoursForRoom(roomResponse.Id, payload.WorkingHours); if (!workingHours.Status.Success) { Logger.Error($"failed to create working hours for room {roomResponse.Id}, Deleting created room."); using (ReservationDataContext context = new ReservationDataContext()) { Room room = context.Rooms.Single(x => x.Id == roomResponse.Id); context.Rooms.Remove(room); context.SaveChanges(); } return(new GenericObjectResponse <RoomResponse>($"Failed to add room due to faulty working hours: {workingHours.Status.Message}")); } roomResponse.WorkingHours = workingHours.Object; Logger.Debug($"Room created for user {userId}."); LatLon latLon = await AddLatLonForRoom(roomResponse.Id); if (latLon != null) { roomResponse.Lat = latLon.Lat; roomResponse.Lon = latLon.Lon; } return(new GenericObjectResponse <RoomResponse>(roomResponse)); } catch (DbEntityValidationException e) { string exceptionMessage = e.EntityValidationErrors.FirstOrDefault()?.ValidationErrors.FirstOrDefault()?.ErrorMessage; Logger.Error($"Failed to create room. Error: '{exceptionMessage}'"); return(new GenericObjectResponse <RoomResponse>("Failed to add the room, please contact support.")); } }
private Room ConvertRoomFromPayload(CreateRoomPayload payload, long?userId) { return(new Room { OwnerId = userId, Name = payload.Name, Size = payload.Size ?? 0, MaxNumberOfPeople = payload.MaxNumberOfPeople ?? 0, Country = payload.Country, City = payload.City, Street = payload.Street, BuildingNumber = payload.BuildingNumber, IsActive = payload.IsActive }); }
public GenericStatusMessage ValidateRoomData(CreateRoomPayload payload, bool required = true) { ValidationHelper helper = new ValidationHelper(); List <GenericStatusMessage> validations = new List <GenericStatusMessage> { helper.ValidateStringValue(payload.Name, "Name", 2, 100, required), helper.ValidateValueThanZero(payload.Size, "Size", true, required), helper.ValidateValueThanZero(payload.MaxNumberOfPeople, "Maximum number of people", true, required), helper.ValidateStringValue(payload.Country, "Country", 2, 20, required), helper.ValidateStringValue(payload.City, "City", 2, 20, required), helper.ValidateStringValue(payload.Street, "Street", 2, 50, required), helper.ValidateValueThanZero(payload.BuildingNumber, "Building number", true, required) }; return(validations.FirstOrDefault(x => !x.Success) ?? new GenericStatusMessage(true)); }
public async Task <GenericObjectResponse <RoomResponse> > AddRoom([FromBody] CreateRoomPayload payload) { long?userId = AuthenticationService.IsAuthorized(Request, UserRole.RoomOwner); if (userId == null) { Response.StatusCode = 401; return(new GenericObjectResponse <RoomResponse>("")); } RoomManipulationService service = new RoomManipulationService(); GenericObjectResponse <RoomResponse> response = await service.AddRoom(payload, userId); if (!response.Status.Success) { Response.StatusCode = 400; } return(response); }
public override void Up() { UserManipulationService userManipulationService = new UserManipulationService(); CreateUserPayload owner = new CreateUserPayload { FirstName = "Ron", LastName = "Shachar", Country = "Israel", City = "Tel Aviv", Street = "Rambam", BuildingNumber = 6, Password = "******", ConfirmPassword = "******", Username = "******" }; userManipulationService.AddUser(owner, UserRole.RoomOwner); long ownerId = 0; using (ReservationDataContext context = new ReservationDataContext()) { ownerId = context.Users.Single(x => x.Username == "*****@*****.**").Id; } RoomManipulationService roomManipulationService = new RoomManipulationService(); CreateRoomPayload roomPayload = new CreateRoomPayload { Name = "Globo Gym", Country = "Israel", City = "Givatayim", Street = "Borochov", BuildingNumber = 5, IsActive = true, WorkingHours = CreateDefaultWorkingHours(Days.Sunday, Days.Tuesday, Days.Thursday) }; roomManipulationService.AddRoom(roomPayload, ownerId); }
public async Task <GenericObjectResponse <RoomResponse> > ChangeRoomData([FromBody] CreateRoomPayload payload, long roomId) { long?userId = AuthenticationService.IsAuthorized(Request, UserRole.RoomOwner); if (userId == null) { Response.StatusCode = 401; return(new GenericObjectResponse <RoomResponse>("")); } RoomValidationService roomValidationService = new RoomValidationService(); GenericStatusMessage roomExistsValidation = roomValidationService.ValidateRoomExistsAndOwnedByUser(roomId, userId.Value); if (!roomExistsValidation.Success) { Response.StatusCode = 404; return(new GenericObjectResponse <RoomResponse>("Not found.")); } RoomManipulationService roomManipulationService = new RoomManipulationService(); return(await roomManipulationService.ChangeRoomData(payload, roomId)); }
public async Task <GenericObjectResponse <RoomResponse> > ChangeRoomData(CreateRoomPayload payload, long roomId) { RoomValidationService service = new RoomValidationService(); GenericStatusMessage validationResponse = service.ValidateRoomData(payload, false); RoomResponse roomResponse = null; if (validationResponse.Success) { using (ReservationDataContext context = new ReservationDataContext()) { Room room = context.Rooms.Include(x => x.WorkingHours).Single(x => x.Id == roomId); room.Name = payload.Name ?? room.Name; room.Size = payload.Size ?? room.Size; room.MaxNumberOfPeople = payload.MaxNumberOfPeople ?? room.MaxNumberOfPeople; room.Country = payload.Country ?? room.Country; room.City = payload.City ?? room.City; room.Street = payload.Street ?? room.Street; room.BuildingNumber = payload.BuildingNumber ?? room.BuildingNumber; context.SaveChanges(); roomResponse = ConvertRoomToResponse(room, room.OwnerId); } LatLon latLon = await AddLatLonForRoom(roomResponse.Id); if (latLon != null) { roomResponse.Lat = latLon.Lat; roomResponse.Lon = latLon.Lon; } return(new GenericObjectResponse <RoomResponse>(roomResponse)); } else { return(new GenericObjectResponse <RoomResponse>(validationResponse.Message)); } }