public ResponseWrapper <CreateRelationshipModel> CreateRelationship(CreateRelationshipInputModel model)
        {
            var newEntity = new Relationship
            {
                RelationshipType     = model.RelationshipType,
                ParentEntityEntityId = model.ParentEntityEntityId,
                ChildEntityEntityId  = model.ChildEntityEntityId,
            };

            context
            .Relationships
            .Add(newEntity);

            context.SaveChanges();
            var response = new CreateRelationshipModel
            {
                RelationshipId       = newEntity.RelationshipId,
                RelationshipType     = newEntity.RelationshipType,
                ParentEntityEntityId = newEntity.ParentEntityEntityId,
                ChildEntityEntityId  = newEntity.ChildEntityEntityId,
            };

            return(new ResponseWrapper <CreateRelationshipModel>(_validationDictionary, response));
        }
예제 #2
0
        public void Execute(IList <string> parameters)
        {
            if (parameters == null || parameters.Count < 4)
            {
                throw new ArgumentException(
                          "Invalid parameters! Please type in CreateRelationship [First_Employee_Email] [Second_Employee_Email] [Relationship_Strength] [Comment *optional*]!");
            }

            if (String.IsNullOrEmpty(parameters[1]) || String.IsNullOrWhiteSpace(parameters[1]))
            {
                throw new ArgumentException("First Employee Email cannot be null, empty or whitespace!");
            }

            if (!Regex.IsMatch(parameters[1], @"[0-9,A-z]*@[A-z,0-9]*.[A-z]*"))
            {
                throw new ArgumentException("Invalid first email address.");
            }

            if (String.IsNullOrEmpty(parameters[2]) || String.IsNullOrWhiteSpace(parameters[2]))
            {
                throw new ArgumentException("Second Employee Email cannot be null, empty or whitespace!");
            }

            if (!Regex.IsMatch(parameters[2], @"[0-9,A-z]*@[A-z,0-9]*.[A-z]*"))
            {
                throw new ArgumentException("Invalid second email address.");
            }

            if (!int.TryParse(parameters[3], out var relationshipStrength) || relationshipStrength < 0 || 9 < relationshipStrength)
            {
                throw new ArgumentException("Relationship Strength should be integer between 0 and 9");
            }

            var firstEmployeeEmail  = parameters[1];
            var secondEmployeeEmail = parameters[2];

            if (firstEmployeeEmail.Equals(secondEmployeeEmail))
            {
                throw new ArgumentException("Employee emails cannot be equal");
            }

            var firstEmployee = this.db
                                .Employees
                                .Where(e => e.Email == firstEmployeeEmail)
                                .SingleOrDefault();

            if (firstEmployee == null)
            {
                throw new ArgumentException($"Employee with Email \"{firstEmployeeEmail}\" could not be found!");
            }

            var secondEmployee = this.db
                                 .Employees
                                 .Where(e => e.Email == secondEmployeeEmail)
                                 .SingleOrDefault();

            if (secondEmployee == null)
            {
                throw new ArgumentException($"Employee with Email \"{secondEmployeeEmail}\" could not be found!");
            }

            if (firstEmployee.Id > secondEmployee.Id)
            {
                var tempEmployee = firstEmployee;
                firstEmployee  = secondEmployee;
                secondEmployee = tempEmployee;
            }

            if (this.db
                .Relationships
                .SingleOrDefault(e => (e.FirstEmployeeId == firstEmployee.Id || e.SecondEmployeeId == firstEmployee.Id) &&
                                 (e.FirstEmployeeId == secondEmployee.Id || e.SecondEmployeeId == secondEmployee.Id)) != null)
            {
                throw new ArgumentException($"Relationship already exists");
            }

            var comment = String.Empty;

            if (parameters.Count > 4)
            {
                comment = string.Join(" ", parameters.Skip(4));
            }

            var relationship = new CreateRelationshipModel()
            {
                FirstEmployeeId      = firstEmployee.Id,
                SecondEmployeeId     = secondEmployee.Id,
                RelationshipStrength = relationshipStrength,
                Comment = comment
            };

            var toAdd = this.mapper.Map <Relationship>(relationship);

            this.db.Relationships.Add(toAdd);
            this.db.SaveChanges();

            var output = $"Successfully added relationship to {firstEmployeeEmail} and {secondEmployeeEmail}: {relationshipStrength}";

            this.writer.WriteLine(output);
        }