Skip to content

Commit

Permalink
Merge pull request #139 from mmnaseri/release-v1.1.4#138
Browse files Browse the repository at this point in the history
Release v1.1.4#138
  • Loading branch information
mmnaseri authored Jun 30, 2016
2 parents a9e642b + 9e6f04c commit 40f941f
Show file tree
Hide file tree
Showing 19 changed files with 734 additions and 25 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ or you can add a maven dependency since it is now available in Maven central:
<dependency>
<groupId>com.mmnaseri.utils</groupId>
<artifactId>spring-data-mock</artifactId>
<version>${latest-version}</version>
<version>${spring-data-mock.version}</version>
<scope>test</scope>
</dependency>

Expand All @@ -52,7 +52,7 @@ using [Maven exclusions](https://maven.apache.org/guides/introduction/introducti
<dependency>
<groupId>com.mmnaseri.utils</groupId>
<artifactId>spring-data-mock</artifactId>
<version>${latest-version}</version>
<version>${spring-data-mock.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
Expand Down
2 changes: 1 addition & 1 deletion spring-data-mock-sample-jpa/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<spring-data-commons.version>1.12.1.RELEASE</spring-data-commons.version>
<spring-data-jpa.version>1.10.1.RELEASE</spring-data-jpa.version>
<persistence-api.version>1.0.2</persistence-api.version>
<spring-data-mock.version>1.1.3</spring-data-mock.version>
<spring-data-mock.version>1.1.4</spring-data-mock.version>
<testng.version>6.9.6</testng.version>
<hamcrest.version>1.3</hamcrest.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.mmnaseri.utils.samples.spring.data.jpa.model;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/29/16, 4:03 PM)
*/
@Entity
public class Group {

@Id
private String id;
private String name;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.mmnaseri.utils.samples.spring.data.jpa.model;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/29/16, 4:04 PM)
*/
@Entity
public class Membership {

@Id
private String id;
@ManyToOne
private User user;
@ManyToOne
private Group group;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public Group getGroup() {
return group;
}

public void setGroup(Group group) {
this.group = group;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.mmnaseri.utils.samples.spring.data.jpa.model;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/29/16, 4:03 PM)
*/
@Entity
public class User {

@Id
private String id;
private String username;
private String email;
private String passwordHash;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getPasswordHash() {
return passwordHash;
}

public void setPasswordHash(String passwordHash) {
this.passwordHash = passwordHash;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.mmnaseri.utils.samples.spring.data.jpa.repository;

import com.mmnaseri.utils.samples.spring.data.jpa.model.Group;
import org.springframework.data.jpa.repository.JpaRepository;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/29/16, 4:05 PM)
*/
public interface GroupRepository extends JpaRepository<Group, String> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.mmnaseri.utils.samples.spring.data.jpa.repository;

import com.mmnaseri.utils.samples.spring.data.jpa.model.Group;
import com.mmnaseri.utils.samples.spring.data.jpa.model.Membership;
import com.mmnaseri.utils.samples.spring.data.jpa.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/29/16, 4:06 PM)
*/
public interface MembershipRepository extends JpaRepository<Membership, String> {

List<Membership> findByUser(User user);

List<Membership> findByGroup(Group group);

Membership findByUserAndGroup(User user, Group group);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.mmnaseri.utils.samples.spring.data.jpa.repository;

import com.mmnaseri.utils.samples.spring.data.jpa.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/29/16, 4:05 PM)
*/
public interface UserRepository extends JpaRepository<User, String> {

User findByUsernameOrEmailAllIgnoreCase(String username, String email);

User findByUsernameIgnoreCase(String username);

User findByEmailIgnoreCase(String email);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.mmnaseri.utils.samples.spring.data.jpa.service;

import com.mmnaseri.utils.samples.spring.data.jpa.model.Group;
import com.mmnaseri.utils.samples.spring.data.jpa.model.User;

import java.util.List;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/29/16, 5:26 PM)
*/
public interface GroupService {

Group createGroup(String name);

void deleteGroup(Group group);

void join(Group group, User user);

void leave(Group group, User user);

List<User> members(Group group);

List<Group> groups(User user);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.mmnaseri.utils.samples.spring.data.jpa.service;

import com.mmnaseri.utils.samples.spring.data.jpa.model.User;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/29/16, 4:06 PM)
*/
public interface UserService {

User createUser(String username, String email, String password);

void updatePassword(String handle, String oldPassword, String newPassword);

void deleteUser(String handle);

User lookup(String handle);

User authenticate(String handle, String password);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package com.mmnaseri.utils.samples.spring.data.jpa.service.impl;

import com.mmnaseri.utils.samples.spring.data.jpa.model.Group;
import com.mmnaseri.utils.samples.spring.data.jpa.model.Membership;
import com.mmnaseri.utils.samples.spring.data.jpa.model.User;
import com.mmnaseri.utils.samples.spring.data.jpa.repository.GroupRepository;
import com.mmnaseri.utils.samples.spring.data.jpa.repository.MembershipRepository;
import com.mmnaseri.utils.samples.spring.data.jpa.service.GroupService;

import java.util.ArrayList;
import java.util.List;

/**
* @author Milad Naseri ([email protected])
* @since 1.0 (6/30/16, 9:16 AM)
*/
public class DefaultGroupService implements GroupService {

private final GroupRepository groupRepository;
private final MembershipRepository membershipRepository;

public DefaultGroupService(GroupRepository groupRepository, MembershipRepository membershipRepository) {
this.groupRepository = groupRepository;
this.membershipRepository = membershipRepository;
}

@Override
public Group createGroup(String name) {
final Group group = new Group();
group.setName(name);
return groupRepository.save(group);
}

@Override
public void deleteGroup(Group group) {
final List<Membership> memberships = membershipRepository.findByGroup(group);
membershipRepository.delete(memberships);
groupRepository.delete(group);
}

@Override
public void join(Group group, User user) {
if (membershipRepository.findByUserAndGroup(user, group) != null) {
return;
}
final Membership membership = new Membership();
membership.setGroup(group);
membership.setUser(user);
membershipRepository.save(membership);
}

@Override
public void leave(Group group, User user) {
final Membership membership = membershipRepository.findByUserAndGroup(user, group);
if (membership == null) {
return;
}
membershipRepository.delete(membership);
}

@Override
public List<User> members(Group group) {
final List<Membership> memberships = membershipRepository.findByGroup(group);
final List<User> users = new ArrayList<>();
for (Membership membership : memberships) {
users.add(membership.getUser());
}
return users;
}

@Override
public List<Group> groups(User user) {
final List<Membership> memberships = membershipRepository.findByUser(user);
final List<Group> groups = new ArrayList<>();
for (Membership membership : memberships) {
groups.add(membership.getGroup());
}
return groups;
}

}
Loading

0 comments on commit 40f941f

Please sign in to comment.