feat: implement final Contact API
This commit is contained in:
parent
9ff4b21dd9
commit
ab40e9a497
@ -2,6 +2,8 @@ package com.pablotj.portfolio.application.contact;
|
|||||||
|
|
||||||
import com.pablotj.portfolio.domain.contact.Contact;
|
import com.pablotj.portfolio.domain.contact.Contact;
|
||||||
import com.pablotj.portfolio.domain.contact.port.ContactRepositoryPort;
|
import com.pablotj.portfolio.domain.contact.port.ContactRepositoryPort;
|
||||||
|
import jakarta.validation.constraints.Email;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
|
||||||
public class CreateContactUseCase {
|
public class CreateContactUseCase {
|
||||||
|
|
||||||
@ -14,13 +16,23 @@ public class CreateContactUseCase {
|
|||||||
public Contact handle(Command cmd) {
|
public Contact handle(Command cmd) {
|
||||||
var contact = Contact.builder()
|
var contact = Contact.builder()
|
||||||
.id(null)
|
.id(null)
|
||||||
.title(cmd.title())
|
.country(cmd.country())
|
||||||
.description(cmd.description())
|
.city(cmd.city())
|
||||||
.url(cmd.url())
|
.email(cmd.email())
|
||||||
|
.phone(cmd.phone())
|
||||||
|
.linkedin(cmd.linkedin())
|
||||||
|
.github(cmd.github())
|
||||||
.build();
|
.build();
|
||||||
return repository.save(contact);
|
return repository.save(contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
public record Command(String title, String description, String url) {
|
public record Command(
|
||||||
|
String country,
|
||||||
|
String city,
|
||||||
|
String email,
|
||||||
|
String phone,
|
||||||
|
String linkedin,
|
||||||
|
String github
|
||||||
|
) {
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,13 +1,19 @@
|
|||||||
package com.pablotj.portfolio.domain.contact;
|
package com.pablotj.portfolio.domain.contact;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.Email;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Builder
|
@Builder
|
||||||
public class Contact {
|
public class Contact {
|
||||||
|
|
||||||
private final ContactId id;
|
private final ContactId id;
|
||||||
private final String title;
|
private final String country;
|
||||||
private final String description;
|
private final String city;
|
||||||
private final String url;
|
private final String email;
|
||||||
|
private final String phone;
|
||||||
|
private final String linkedin;
|
||||||
|
private final String github;
|
||||||
|
|
||||||
}
|
}
|
@ -6,24 +6,38 @@ import jakarta.persistence.GeneratedValue;
|
|||||||
import jakarta.persistence.GenerationType;
|
import jakarta.persistence.GenerationType;
|
||||||
import jakarta.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import jakarta.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
import jakarta.validation.constraints.Email;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "contacts")
|
@Table(name = "contacts")
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@NoArgsConstructor(access = AccessLevel.PROTECTED)
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
@Builder
|
||||||
public class ContactJpaEntity {
|
public class ContactJpaEntity {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
private String country;
|
||||||
|
private String city;
|
||||||
|
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
private String title;
|
@Email
|
||||||
|
private String email;
|
||||||
|
|
||||||
@Column(columnDefinition = "text")
|
private String phone;
|
||||||
private String description;
|
|
||||||
|
|
||||||
private String url;
|
@Column(name = "linkedin_url")
|
||||||
|
private String linkedin;
|
||||||
|
|
||||||
|
@Column(name = "github_url")
|
||||||
|
private String github;
|
||||||
}
|
}
|
@ -46,9 +46,12 @@ public class ContactController {
|
|||||||
@PostMapping
|
@PostMapping
|
||||||
public ResponseEntity<ContactDto> create(@Valid @RequestBody CreateContactRequest request) {
|
public ResponseEntity<ContactDto> create(@Valid @RequestBody CreateContactRequest request) {
|
||||||
var cmd = new CreateContactUseCase.Command(
|
var cmd = new CreateContactUseCase.Command(
|
||||||
request.title(),
|
request.country(),
|
||||||
request.description(),
|
request.city(),
|
||||||
request.url()
|
request.email(),
|
||||||
|
request.phone(),
|
||||||
|
request.linkedin(),
|
||||||
|
request.github()
|
||||||
);
|
);
|
||||||
var created = createUC.handle(cmd);
|
var created = createUC.handle(cmd);
|
||||||
var body = mapper.toDto(created);
|
var body = mapper.toDto(created);
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
package com.pablotj.portfolio.infrastructure.rest.contact.dto;
|
package com.pablotj.portfolio.infrastructure.rest.contact.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.Email;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
|
||||||
public record ContactDto(Long id, @NotBlank String title, String description, String url) {
|
public record ContactDto(
|
||||||
|
Long id,
|
||||||
|
String country,
|
||||||
|
String city,
|
||||||
|
@NotBlank @Email String email,
|
||||||
|
String phone,
|
||||||
|
String linkedin,
|
||||||
|
String github
|
||||||
|
) {
|
||||||
}
|
}
|
@ -1,10 +1,14 @@
|
|||||||
package com.pablotj.portfolio.infrastructure.rest.contact.dto;
|
package com.pablotj.portfolio.infrastructure.rest.contact.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.Email;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
|
||||||
public record CreateContactRequest(
|
public record CreateContactRequest(
|
||||||
@NotBlank String title,
|
String country,
|
||||||
String description,
|
String city,
|
||||||
String url
|
@NotBlank @Email String email,
|
||||||
|
String phone,
|
||||||
|
String linkedin,
|
||||||
|
String github
|
||||||
) {
|
) {
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user