Пример #1
0
 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));
 }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }