Skip to content

Commit

Permalink
Create mutations
Browse files Browse the repository at this point in the history
- For creating multiple members under a single family
- For changing person relation
- For changing head of family
  • Loading branch information
getwithashish committed Oct 4, 2023
1 parent 38191df commit 4d56af0
Show file tree
Hide file tree
Showing 8 changed files with 155 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
*/
package com.tithe.controller.mutation;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
Expand All @@ -11,8 +14,10 @@
import com.tithe.entity.FamilyEntity;
import com.tithe.entity.KoottaymaEntity;
import com.tithe.model.FamilyMutationInput;
import com.tithe.model.PersonRelationInputModel;
import com.tithe.service.mutation.FamilyMutationService;


/**
* @author Ashish Sam T George
*
Expand All @@ -24,15 +29,23 @@ public class FamilyMutations {
private FamilyMutationService familyMutationService;

@MutationMapping(name = "createOneFamily")
public FamilyEntity createOneFamily(@Argument(name = "family") FamilyMutationInput familyMutationInput) {
public FamilyEntity createOneFamily(
@Argument(name = "family") FamilyMutationInput familyMutationInput) {
return familyMutationService.createOneFamily(familyMutationInput);
}


@MutationMapping(name = "changeHeadOfFamily")
public FamilyEntity changeHeadOfFamily(@Argument(name = "familyId") Long familyId,
@Argument(name = "newHeadOfFamily") PersonRelationInputModel headOfFamily,
@Argument(name = "persons") List<PersonRelationInputModel> persons) {
return familyMutationService.changeHeadOfFamily(familyId, headOfFamily, persons);
}

@MutationMapping(name = "activateOneFamily")
public FamilyEntity activateOneFamily(@Argument(name = "familyId") Long familyId) {
return familyMutationService.activateOneFamily(familyId);
}

@MutationMapping(name = "deactivateOneFamily")
public FamilyEntity deactivateOneFamily(@Argument(name = "familyId") Long familyId) {
return familyMutationService.deactivateOneFamily(familyId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/
package com.tithe.controller.mutation;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -23,6 +24,7 @@
import com.tithe.service.mutation.RelationMutationService;
import com.tithe.service.mutation.TitheMutationService;


/**
* @author Ashish Sam T George
*
Expand All @@ -46,10 +48,23 @@ public class PersonMutations {
private TitheMutationService titheMutationService;

@MutationMapping(name = "createOnePerson")
public PersonEntity createOnePerson(@Argument(name = "person") PersonMutationInput personMutationInput) {
public PersonEntity createOnePerson(
@Argument(name = "person") PersonMutationInput personMutationInput) {
return personMutationService.createOnePerson(personMutationInput);
}

@MutationMapping(name = "createManyPersonsInOneFamily")
public List<PersonEntity> createManyPersons(@Argument(name = "familyId") Long familyId,
@Argument(name = "persons") List<PersonMutationInput> personMutationInputs) {
return personMutationService.createManyPersonsInOneFamily(familyId, personMutationInputs);
}

@MutationMapping(name = "changeRelation")
public PersonEntity changeRelation(@Argument(name = "personId") Long personId,
@Argument(name = "relationId") Long relationId) {
return personMutationService.changeRelation(personId, relationId);
}

@MutationMapping(name = "activateOnePerson")
public PersonEntity activateOnePerson(@Argument Long id) {
return personMutationService.activateOnePerson(id);
Expand All @@ -73,24 +88,29 @@ public List<PersonEntity> deactivateManyPersons(@Argument List<Long> ids) {
@MutationMapping(name = "createOneEducation")
public EducationEntity createOneEducation(@Argument(name = "education") String educationName) {
List<String> educationNames = List.of(educationName);
List<EducationEntity> educations = educationMutationService.createManyEducations(educationNames);
List<EducationEntity> educations = educationMutationService
.createManyEducations(educationNames);
return educations.get(0);
}

@MutationMapping(name = "createManyEducations")
public List<EducationEntity> createManyEducations(@Argument(name = "educations") List<String> educationNames) {
public List<EducationEntity> createManyEducations(
@Argument(name = "educations") List<String> educationNames) {
return educationMutationService.createManyEducations(educationNames);
}

@MutationMapping(name = "createOneOccupation")
public OccupationEntity createOneOccupation(@Argument(name = "occupation") String occupationName) {
public OccupationEntity createOneOccupation(
@Argument(name = "occupation") String occupationName) {
List<String> occupationNames = List.of(occupationName);
List<OccupationEntity> occupations = occupationMutationService.createManyOccupations(occupationNames);
List<OccupationEntity> occupations = occupationMutationService
.createManyOccupations(occupationNames);
return occupations.get(0);
}

@MutationMapping(name = "createManyOccupations")
public List<OccupationEntity> createManyOccupations(@Argument(name = "occupations") List<String> occupationNames) {
public List<OccupationEntity> createManyOccupations(
@Argument(name = "occupations") List<String> occupationNames) {
return occupationMutationService.createManyOccupations(occupationNames);
}

Expand All @@ -102,15 +122,17 @@ public RelationEntity createOneRelation(@Argument(name = "relation") String rela
}

@MutationMapping(name = "createManyRelations")
public List<RelationEntity> createManyRelations(@Argument(name = "relations") List<String> relationNames) {
public List<RelationEntity> createManyRelations(
@Argument(name = "relations") List<String> relationNames) {
return relationMutationService.createManyRelations(relationNames);
}

@MutationMapping(name = "createOneTithe")
public TitheEntity createOneTithe(@Argument(name = "personId") Long personId,
@Argument(name = "tithe") TitheMutationInput titheMutationInput) {
List<TitheMutationInput> titheMutationInputs = List.of(titheMutationInput);
List<TitheEntity> tithes = titheMutationService.createManyTithes(personId, titheMutationInputs);
List<TitheEntity> tithes = titheMutationService.createManyTithes(personId,
titheMutationInputs);
return tithes.get(0);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
*
*/
package com.tithe.model;

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* @author Ashish Sam T George
*
*/
@NoArgsConstructor
@Data
public class PersonRelationInputModel {

@Positive(message = "Id of Person should be valid")
@NotNull(message = "Id of Person should not be empty or null")
private Long personId;

@Positive(message = "Id of Relation should be valid")
@NotNull(message = "Id of Relation should not be empty or null")
private Long relationId;

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package com.tithe.service.mutation;


import java.util.Iterator;
import java.util.List;
import java.util.Optional;

Expand All @@ -16,6 +17,7 @@
import com.tithe.model.AddressMutationInput;
import com.tithe.model.FamilyMutationInput;
import com.tithe.model.PersonMutationInput;
import com.tithe.model.PersonRelationInputModel;
import com.tithe.repository.FamilyRepository;
import com.tithe.service.query.AddressQueryService;
import com.tithe.service.query.KoottaymaQueryService;
Expand Down Expand Up @@ -90,6 +92,35 @@ public FamilyEntity createOneFamily(FamilyMutationInput familyMutationInput) {
return familyRepository.save(family);
}

public FamilyEntity changeHeadOfFamily(Long familyId,
PersonRelationInputModel headOfFamilyModel,
List<PersonRelationInputModel> personModels) {

objectValidation.validateObject(headOfFamilyModel);
objectValidation.validateObject(personModels);

if (familyId == null) {
throw new GraphQLException("Family Id is invalid");
}

Optional<FamilyEntity> obtainedFamily = familyRepository.findById(familyId);
FamilyEntity family = obtainedFamily.orElseThrow();

PersonEntity headOfFamily = personMutationService
.changeRelation(headOfFamilyModel.getPersonId(), headOfFamilyModel.getRelationId());
family.setHeadOfFamily(headOfFamily);

if (personModels != null && personModels.size() != 0) {
for (PersonRelationInputModel personModel : personModels) {
personMutationService.changeRelation(personModel.getPersonId(),
personModel.getRelationId());
}
}

return family;

}

public FamilyEntity activateOneFamily(Long familyId) {
if (familyId != null) {
Optional<FamilyEntity> obtainedFamily = familyRepository.findById(familyId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,33 @@ public PersonEntity createOnePerson(PersonMutationInput personMutationInput) {
return personRepository.save(person);
}

public List<PersonEntity> createManyPersonsInOneFamily(Long familyId,
List<PersonMutationInput> personMutationInputs) {
FamilyEntity family = familyQueryService.getOneFamily(familyId);

if (family != null) {
List<PersonEntity> persons = buildPersonsWithTithe(family, personMutationInputs);
return personRepository.saveAll(persons);
}
throw new GraphQLException("Family does not exist");
}

public PersonEntity changeRelation(Long personId, Long relationId) {
if (personId == null || relationId == null) {
throw new GraphQLException("Person Id and Relation Id should be valid");
}

PersonEntity person = personQueryService.getOnePerson(personId);
RelationEntity relation = relationQueryService.getOneRelation(relationId);

if (person == null || relation == null) {
throw new GraphQLException("Person and Relation should exist");
}

person.setRelation(relation);
return personRepository.save(person);
}

public PersonEntity activateOnePerson(Long id) {
Optional<PersonEntity> person = personRepository.findById(id);
if (person.isPresent()) {
Expand Down Expand Up @@ -121,24 +148,25 @@ public List<PersonEntity> deactivateManyPersons(List<Long> ids) {
}
return null;
}

public List<EducationEntity> getEducations(List<Long> educationIds) {
List<EducationEntity> educations = new ArrayList<>();
if (educationIds != null && educationIds.size() != 0) {
educations = educationQueryService.getManyEducations(educationIds);
}
return educations;
}
public List<OccupationEntity> getOccupations(List<Long> occupationIds){

public List<OccupationEntity> getOccupations(List<Long> occupationIds) {
List<OccupationEntity> occupations = new ArrayList<>();
if (occupationIds != null && occupationIds.size() != 0) {
occupations = occupationQueryService.getManyOccupations(occupationIds);
}
return occupations;
}

public PersonEntity buildPersonWithTithe(FamilyEntity family, PersonMutationInput personMutationInput) {

public PersonEntity buildPersonWithTithe(FamilyEntity family,
PersonMutationInput personMutationInput) {
objectValidation.validateObject(personMutationInput);

RelationEntity relation = relationQueryService
Expand Down Expand Up @@ -166,13 +194,14 @@ public PersonEntity buildPersonWithTithe(FamilyEntity family, PersonMutationInpu
TitheBuilder titheBuilder = new TitheBuilder();
List<TitheEntity> tithes = titheBuilder.buildTithe(person, personMutationInput.getTithes());
person.setTithes(tithes);

return person;
}

public List<PersonEntity> buildPersonsWithTithe(FamilyEntity family, List<PersonMutationInput> personMutationInputs){

public List<PersonEntity> buildPersonsWithTithe(FamilyEntity family,
List<PersonMutationInput> personMutationInputs) {
List<PersonEntity> persons = new ArrayList<>();
for(PersonMutationInput personMutationInput: personMutationInputs) {
for (PersonMutationInput personMutationInput : personMutationInputs) {
PersonEntity person = buildPersonWithTithe(family, personMutationInput);
persons.add(person);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
extend type Mutation{
createOneFamily(family: FamilyMutationInput): Family
createOneFamily(family: FamilyMutationInput!): Family

changeHeadOfFamily(familyId: ID!, newHeadOfFamily: PersonRelationSchema!, persons: [PersonRelationSchema]): Family

activateOneFamily(familyId: ID!): Family
deactivateOneFamily(familyId: ID!): Family
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
extend type Mutation{
createOnePerson(person: PersonMutationInput): Person
createOnePerson(person: PersonMutationInput!): Person
createManyPersonsInOneFamily(familyId: ID!, persons: [PersonMutationThroughFamilyInput]!): [Person]

changeRelation(personId: ID!, relationId: ID!): Person

activateOnePerson(id: ID): Person
activateManyPersons(ids: [ID]): [Person]
Expand Down
5 changes: 5 additions & 0 deletions Tithe-Spring/src/main/resources/graphql/types/Person.graphqls
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,11 @@ input PersonMutationThroughFamilyInput{
active: Boolean = true
}

input PersonRelationSchema{
personId: ID!
relationId: ID!
}

type Relation{
relationId: ID!
relationName: String!
Expand Down

0 comments on commit 4d56af0

Please sign in to comment.