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); }
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); }