public FurnitureItemModel RegisterFurnitureItem(AddFurnitureDto dto) { return(ProtectedExecute <AddFurnitureDto, FurnitureItemModel>(furnitureDto => { AdminService.CheckActiveAdmin(furnitureDto.AdminSession); FurnitureItemModel model = Mapper.Map <AddFurnitureDto, FurnitureItemModel>(furnitureDto); return FurnitureRepo.Create(model); }, dto)); }
public FurnitureItemModel UpdateFurnitureItem(UpdateFurnitureDto dto) { return(ProtectedExecute <UpdateFurnitureDto, FurnitureItemModel>(furnitureDto => { AdminService.CheckActiveAdmin(furnitureDto.AdminSession); FurnitureItemModel model = Mapper.Map <UpdateFurnitureDto, FurnitureItemModel>(furnitureDto); IEnumerable <UsedPartModel> partsToAdd = furnitureDto.UsedPartsToAdd.Aggregate( new List <UsedPartModel>(), (acc, parts) => acc.Concat(Enumerable.Repeat(new UsedPartModel(parts.PartId.GetValueOrDefault()), parts.Count.GetValueOrDefault())).ToList() ); return FurnitureRepo.Update(model.Id, model, furnitureDto.UsedPartsToRemove, partsToAdd); }, dto)); }
public BuildSessionModel InitBuildSession(StartBuildDto startBuildDto) { SessionService.CheckSession(startBuildDto.Session); FurnitureItemModel furniture = FurnitureRepo.Get(startBuildDto.FurnitureId.Value); if (furniture == null) { throw new NotFoundException("furniture"); } bool canBuild = FurnitureService.CanBuild(startBuildDto.Session, startBuildDto.FurnitureId.Value); if (!canBuild) { throw new NotFoundException("all owned parts"); } int userId = startBuildDto.Session.UserId.Value; if (UserBuildTokens.ContainsKey(userId)) { RemoveSessionByUserId(userId); } //throw new ConflictException("build sessions"); string token = HashingService.GetHash(Guid.NewGuid().ToString()); IEnumerable <ConcretePartModel> possiblePartsToUse = ConcretePartRepo .GetOwnedByUser(userId) .Where(part => !part.IsForSell && !part.IsInUse) .ToList(); BuildSessionManager buildSessionInfo = new BuildSessionManager( userId, possiblePartsToUse, furniture, new BuildSessionModel(token, furniture.Id) ); UserBuildTokens.Add(userId, token); BuildSessions.Add(token, buildSessionInfo); return(buildSessionInfo.BuildSession); }
public InvariantPartStore GetPartStore(int furnitureItemId) { FurnitureItemModel furniture = FurnitureRepo.Get(furnitureItemId); if (furniture == null) { throw new NotFoundException("furniture"); } IEnumerable <IGrouping <int, UsedPartModel> > usedParts = furniture.UsedParts.Where(part => part.PartId.HasValue) .GroupBy(part => part.PartId.Value); InvariantPartStore store = new InvariantPartStore(); foreach (IGrouping <int, UsedPartModel> used in usedParts) { PartModel part = PartRepo.Get(used.Key); InvariantPartStorePosition position = new InvariantPartStorePosition(part, used.Count()); store.Positions.Add(position); } return(store); }