Skip to content

Instantly share code, notes, and snippets.

@cherifGsoul
Last active April 19, 2024 14:10
Show Gist options
  • Save cherifGsoul/d5ac361a2852a66ba8624ef291dc644a to your computer and use it in GitHub Desktop.
Save cherifGsoul/d5ac361a2852a66ba8624ef291dc644a to your computer and use it in GitHub Desktop.

Revisions

  1. cherifGsoul revised this gist Apr 19, 2024. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions UserResource.java
    Original file line number Diff line number Diff line change
    @@ -16,7 +16,8 @@ public UserResource(UserService userService) {
    this.userService = userService;
    }

    public Response post(String firtstname, String lastname, String emailAddress) {
    UserView user = userService.register(new RegistrationCommand(firtstname, lastname, emailAddress));
    public Response post(String firstname, String lastname, String emailAddress) {
    UserView user = userService.register(new RegistrationCommand(firstname, lastname, emailAddress));
    return Response.created(user);
    }
    }
  2. cherifGsoul created this gist Apr 19, 2024.
    9 changes: 9 additions & 0 deletions EmailAddress.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,9 @@
    package dev.cherifbouchelaghem.vodto.model;

    // INSIED THE HEXAGON
    public record EmailAddress(String address) {

    public static EmailAddress fromString(String address) {
    return new EmailAddress(address);
    }
    }
    8 changes: 8 additions & 0 deletions FullName.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,8 @@
    package dev.cherifbouchelaghem.vodto.model;

    // INSIDE THE HEXAGON
    public record FullName (String fistname, String lastname){
    static public FullName of (String firstname, String lastname) {
    return new FullName(firstname, lastname);
    }
    }
    20 changes: 20 additions & 0 deletions InMemoryUsers.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,20 @@
    package dev.cherifbouchelaghem.vodto.infrastructure.persistence;

    import dev.cherifbouchelaghem.vodto.model.User;
    import dev.cherifbouchelaghem.vodto.model.Users;

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

    // === OUTSIDE THE HEXAGON ===//

    /**
    * PERSISTENCE ADAPTER
    */
    public class InMemoryUsers implements Users {
    private List<User> users = new ArrayList<>();
    @Override
    public void add(User user) {
    this.users.add(user);
    }
    }
    29 changes: 29 additions & 0 deletions RegistationCommand.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,29 @@
    package dev.cherifbouchelaghem.vodto.application;

    import dev.cherifbouchelaghem.vodto.model.EmailAddress;
    import dev.cherifbouchelaghem.vodto.model.FullName;

    // ===== INSIDE THE HAXGON ============ //

    /**
    * The message/request to the hexagon
    */
    public class RegistrationCommand {
    private String firstname;
    private String lastname;
    private String emailAddress;

    public RegistrationCommand(String firstname, String lastname, String emailAddress) {
    this.firstname = firstname;
    this.lastname = lastname;
    this.emailAddress = emailAddress;
    }

    public EmailAddress getEmailAddress() {
    return EmailAddress.fromString(emailAddress);
    }

    public FullName getFullName() {
    return FullName.of(this.firstname, this.lastname);
    }
    }
    30 changes: 30 additions & 0 deletions User.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    package dev.cherifbouchelaghem.vodto.model;

    // INSIDE THE HEXAGON
    public class User {
    private FullName fullName;
    private EmailAddress emailAddress;


    public User(FullName fullName, EmailAddress emailAddress) {
    this.fullName = fullName;
    this.emailAddress = emailAddress;
    }

    public static User register(FullName fullName, EmailAddress emailAddress) {
    return new User(fullName, emailAddress);
    }

    public String firstname() {
    return this.fullName.fistname();
    }


    public String lastname() {
    return this.fullName.lastname();
    }

    public String emailAddress() {
    return this.emailAddress.address();
    }
    }
    22 changes: 22 additions & 0 deletions UserResource.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    package dev.cherifbouchelaghem.vodto.infrastructure.resource;

    import dev.cherifbouchelaghem.vodto.application.RegistrationCommand;
    import dev.cherifbouchelaghem.vodto.application.UserService;
    import dev.cherifbouchelaghem.vodto.application.UserView;

    // === OUTSIDE THE HEXAGON ===//

    /**
    * HTTP ADAPTER
    */
    public class UserResource {
    private UserService userService;

    public UserResource(UserService userService) {
    this.userService = userService;
    }

    public Response post(String firtstname, String lastname, String emailAddress) {
    UserView user = userService.register(new RegistrationCommand(firtstname, lastname, emailAddress));
    }
    }
    24 changes: 24 additions & 0 deletions UserService.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,24 @@
    package dev.cherifbouchelaghem.vodto.application;

    import dev.cherifbouchelaghem.vodto.model.User;
    import dev.cherifbouchelaghem.vodto.model.Users;

    // ===== INSIDE THE HAXGON ============ //

    /**
    * The haxgon entry point
    * The hexagon PUBLIC API
    */
    public class UserService {
    private Users users;

    public UserService(Users users) {
    this.users = users;
    }

    public UserView register(RegistrationCommand command) {
    User user = User.register(command.getFullName(), command.getEmailAddress());
    users.add(user);
    return UserView.fromUser(user);
    }
    }
    17 changes: 17 additions & 0 deletions UserView.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,17 @@
    package dev.cherifbouchelaghem.vodto.application;

    import dev.cherifbouchelaghem.vodto.model.User;

    // ======= INSIDE THE HEXAGON ===== //

    /**
    * the hexgon response
    * @param firstname
    * @param lastname
    * @param emailAddress
    */
    public record UserView(String firstname, String lastname, String emailAddress) {
    static public UserView fromUser(User user) {
    return new UserView(user.firstname(), user.lastname(), user.emailAddress());
    }
    }
    10 changes: 10 additions & 0 deletions Users.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,10 @@
    package dev.cherifbouchelaghem.vodto.model;

    // INSIDE THE HEXAGON

    /**
    * Persistence PORT
    */
    public interface Users {
    void add(User user);
    }