Skip to content

Commit 997f1fc

Browse files
committed
merge
1 parent 4321be4 commit 997f1fc

5 files changed

Lines changed: 86 additions & 84 deletions

File tree

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,26 @@
11
package com.baeldung.akkahttp;
22

3-
/**
4-
* User Entity
5-
*
6-
*/
73
public class User {
84

5+
private final Long id;
6+
97
private final String name;
10-
private final String address;
118

129
public User() {
1310
this.name = "";
14-
this.address = "";
11+
this.id = null;
1512
}
1613

17-
public User(String name, String address) {
14+
public User(Long id, String name) {
1815
this.name = name;
19-
this.address = address;
16+
this.id = id;
2017
}
2118

2219
public String getName() {
2320
return name;
2421
}
2522

26-
public String getAddress() {
27-
return address;
23+
public Long getId() {
24+
return id;
2825
}
29-
3026
}

akka-http/src/main/java/com/baeldung/akkahttp/UserMessages.java

Lines changed: 28 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,71 +2,48 @@
22

33
import java.io.Serializable;
44

5-
/**
6-
* Defines all messages related to User Actor
7-
*
8-
*/
9-
public interface UserRegistryMessages {
5+
public interface UserMessages {
106

11-
class GetUsers implements Serializable {
7+
class ActionPerformed implements Serializable {
128

13-
private static final long serialVersionUID = 1L;
14-
}
15-
16-
class ActionPerformed implements Serializable {
17-
18-
private static final long serialVersionUID = 1L;
9+
private static final long serialVersionUID = 1L;
1910

20-
private final String description;
11+
private final String description;
2112

22-
public ActionPerformed(String description) {
23-
this.description = description;
24-
}
25-
26-
public String getDescription() {
27-
return description;
28-
}
13+
public ActionPerformed(String description) {
14+
this.description = description;
2915
}
3016

31-
class CreateUser implements Serializable {
32-
33-
private static final long serialVersionUID = 1L;
34-
private final User user;
35-
36-
public CreateUser(User user) {
37-
this.user = user;
38-
}
39-
40-
public User getUser() {
41-
return user;
42-
}
17+
public String getDescription() {
18+
return description;
4319
}
20+
}
4421

45-
class GetUser implements Serializable {
46-
47-
private static final long serialVersionUID = 1L;
48-
private final String name;
22+
class CreateUserMessage implements Serializable {
4923

50-
public GetUser(String name) {
51-
this.name = name;
52-
}
24+
private static final long serialVersionUID = 1L;
25+
private final User user;
5326

54-
public String getName() {
55-
return name;
56-
}
27+
public CreateUserMessage(User user) {
28+
this.user = user;
5729
}
5830

59-
class DeleteUser implements Serializable {
31+
public User getUser() {
32+
return user;
33+
}
34+
}
6035

61-
private static final long serialVersionUID = 1L;
62-
private final String name;
36+
class GetUserMessage implements Serializable {
37+
private static final long serialVersionUID = 1L;
38+
private final Long userId;
6339

64-
public DeleteUser(String name) {
65-
this.name = name;
66-
}
40+
public GetUserMessage(Long userId) {
41+
this.userId = userId;
42+
}
6743

68-
public String getName() {
69-
return name;
70-
}
44+
public Long getUserId() {
45+
return userId;
7146
}
47+
}
48+
7249
}

akka-http/src/main/java/com/baeldung/akkahttp/UserServer.java

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,39 @@
55
import java.util.concurrent.TimeUnit;
66

77
import akka.actor.ActorRef;
8+
import akka.actor.ActorSystem;
89
import akka.http.javadsl.marshallers.jackson.Jackson;
910
import akka.http.javadsl.model.StatusCodes;
10-
import akka.http.javadsl.server.AllDirectives;
11+
import akka.http.javadsl.server.HttpApp;
1112
import akka.http.javadsl.server.Route;
1213
import akka.pattern.PatternsCS;
1314
import akka.util.Timeout;
1415
import com.baeldung.akkahttp.UserMessages.ActionPerformed;
15-
import com.baeldung.akkahttp.UserMessages.CreateUser;
16+
import com.baeldung.akkahttp.UserMessages.CreateUserMessage;
17+
import com.baeldung.akkahttp.UserMessages.GetUserMessage;
1618
import scala.concurrent.duration.Duration;
1719
import static akka.http.javadsl.server.PathMatchers.*;
1820

19-
class UserRoutes extends AllDirectives {
21+
class UserServer extends HttpApp {
2022

2123
private final ActorRef userActor;
2224

2325
Timeout timeout = new Timeout(Duration.create(5, TimeUnit.SECONDS));
2426

25-
UserRoutes(ActorRef userActor) {
27+
UserServer(ActorRef userActor) {
2628
this.userActor = userActor;
2729
}
2830

29-
Route routes() {
31+
@Override
32+
public Route routes() {
3033
return path("users", this::postUser)
3134
.orElse(path(segment("users").slash(longSegment()), id ->
32-
route(getUser(id),
33-
deleteUser(id))));
35+
route(getUser(id))));
3436
}
3537

3638
private Route getUser(Long id) {
3739
return get(() -> {
38-
CompletionStage<Optional<User>> user = PatternsCS.ask(userActor, new UserMessages.GetUser(id), timeout)
40+
CompletionStage<Optional<User>> user = PatternsCS.ask(userActor, new GetUserMessage(id), timeout)
3941
.thenApply(obj -> (Optional<User>) obj);
4042

4143
return onSuccess(() -> user, performed -> {
@@ -47,20 +49,9 @@ private Route getUser(Long id) {
4749
});
4850
}
4951

50-
private Route deleteUser(Long id) {
51-
return delete(() -> {
52-
CompletionStage<ActionPerformed> userDeleted = PatternsCS.ask(userActor, new UserMessages.DeleteUser(id), timeout)
53-
.thenApply(obj -> (ActionPerformed) obj);
54-
55-
return onSuccess(() -> userDeleted, performed -> {
56-
return complete(StatusCodes.OK, performed, Jackson.marshaller());
57-
});
58-
});
59-
}
60-
6152
private Route postUser() {
6253
return route(post(() -> entity(Jackson.unmarshaller(User.class), user -> {
63-
CompletionStage<ActionPerformed> userCreated = PatternsCS.ask(userActor, new CreateUser(user), timeout)
54+
CompletionStage<ActionPerformed> userCreated = PatternsCS.ask(userActor, new CreateUserMessage(user), timeout)
6455
.thenApply(obj -> (ActionPerformed) obj);
6556

6657
return onSuccess(() -> userCreated, performed -> {
@@ -69,4 +60,11 @@ private Route postUser() {
6960
})));
7061
}
7162

63+
public static void main(String[] args) throws Exception {
64+
ActorSystem system = ActorSystem.create("userServer");
65+
ActorRef userActor = system.actorOf(UserActor.props(), "userActor");
66+
UserServer server = new UserServer(userActor);
67+
server.startServer("localhost", 8080, system);
68+
}
69+
7270
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,35 @@
11
package com.baeldung.akkahttp;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Optional;
6+
37
public class UserService {
8+
9+
private final static List<User> users = new ArrayList<>();
10+
11+
static {
12+
users.add(new User(1l, "Alice"));
13+
users.add(new User(2l, "Bob"));
14+
users.add(new User(3l, "Chris"));
15+
users.add(new User(4l, "Dick"));
16+
users.add(new User(5l, "Eve"));
17+
users.add(new User(6l, "Finn"));
18+
}
19+
20+
public Optional<User> getUser(Long id) {
21+
return users.stream()
22+
.filter(user -> user.getId()
23+
.equals(id))
24+
.findFirst();
25+
}
26+
27+
public void createUser(User user) {
28+
users.add(user);
29+
}
30+
31+
public List<User> getUsers(){
32+
return users;
33+
}
34+
435
}

akka-http/src/test/java/com/baeldung/akkahttp/UserServerUnitTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
import akka.http.javadsl.testkit.TestRoute;
1010
import org.junit.Test;
1111

12-
public class UserRoutesUnitTest extends JUnitRouteTest {
12+
public class UserServerUnitTest extends JUnitRouteTest {
1313

1414
ActorSystem system = ActorSystem.create("helloAkkaHttpServer");
1515

1616
ActorRef userActorRef = system.actorOf(UserActor.props(), "userActor");
1717

18-
TestRoute appRoute = testRoute(new UserRoutes(userActorRef).routes());
18+
TestRoute appRoute = testRoute(new UserServer(userActorRef).routes());
1919

2020
@Test
2121
public void whenRequest_thenActorResponds() {

0 commit comments

Comments
 (0)