refactor(api): refactor endpoints, services, and domain logic
This commit is contained in:
@@ -1,26 +0,0 @@
|
||||
package com.pablotj.portfolio.application.about;
|
||||
|
||||
import com.pablotj.portfolio.domain.about.About;
|
||||
import com.pablotj.portfolio.domain.about.port.AboutRepositoryPort;
|
||||
|
||||
public class CreateAboutUseCase {
|
||||
|
||||
private final AboutRepositoryPort repository;
|
||||
|
||||
public CreateAboutUseCase(AboutRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public About handle(Command cmd) {
|
||||
var about = About.builder()
|
||||
.id(null)
|
||||
.title(cmd.title())
|
||||
.description(cmd.description())
|
||||
.url(cmd.url())
|
||||
.build();
|
||||
return repository.save(about);
|
||||
}
|
||||
|
||||
public record Command(String title, String description, String url) {
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.pablotj.portfolio.application.about;
|
||||
|
||||
import com.pablotj.portfolio.domain.about.About;
|
||||
import com.pablotj.portfolio.domain.about.AboutId;
|
||||
import com.pablotj.portfolio.domain.about.port.AboutRepositoryPort;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class GetAboutUseCase {
|
||||
|
||||
private final AboutRepositoryPort repository;
|
||||
|
||||
public GetAboutUseCase(AboutRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<About> byId(Long id) {
|
||||
return repository.findById(new AboutId(id));
|
||||
}
|
||||
|
||||
public List<About> all() {
|
||||
return repository.findAll();
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,33 @@
|
||||
package com.pablotj.portfolio.application.certification;
|
||||
|
||||
import com.pablotj.portfolio.domain.certification.Certification;
|
||||
import com.pablotj.portfolio.domain.certification.CertificationId;
|
||||
import com.pablotj.portfolio.domain.certification.port.CertificationRepositoryPort;
|
||||
|
||||
public class CreateCertificationUseCase {
|
||||
|
||||
private final CertificationRepositoryPort repository;
|
||||
CertificationRepositoryPort repository;
|
||||
|
||||
public CreateCertificationUseCase(CertificationRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Certification handle(Command cmd) {
|
||||
public Certification handle(Long profileId, Command cmd) {
|
||||
var certification = Certification.builder()
|
||||
.id(null)
|
||||
.title(cmd.title())
|
||||
.description(cmd.description())
|
||||
.url(cmd.url())
|
||||
.id(new CertificationId(profileId))
|
||||
.name(cmd.name())
|
||||
.issuer(cmd.issuer())
|
||||
.date(cmd.date())
|
||||
.credentialId(cmd.credentialId())
|
||||
.build();
|
||||
return repository.save(certification);
|
||||
}
|
||||
|
||||
public record Command(String title, String description, String url) {
|
||||
public record Command(
|
||||
String name,
|
||||
String issuer,
|
||||
String date,
|
||||
String credentialId
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -14,11 +14,11 @@ public class GetCertificationUseCase {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<Certification> byId(Long id) {
|
||||
return repository.findById(new CertificationId(id));
|
||||
public Optional<Certification> byId(Long profileId, Long id) {
|
||||
return repository.findById(new CertificationId(profileId, id));
|
||||
}
|
||||
|
||||
public List<Certification> all() {
|
||||
return repository.findAll();
|
||||
public List<Certification> all(Long profileId) {
|
||||
return repository.findAll(profileId);
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
package com.pablotj.portfolio.application.contact;
|
||||
|
||||
import com.pablotj.portfolio.domain.contact.Contact;
|
||||
import com.pablotj.portfolio.domain.contact.port.ContactRepositoryPort;
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
public class CreateContactUseCase {
|
||||
|
||||
private final ContactRepositoryPort repository;
|
||||
|
||||
public CreateContactUseCase(ContactRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Contact handle(Command cmd) {
|
||||
var contact = Contact.builder()
|
||||
.id(null)
|
||||
.country(cmd.country())
|
||||
.city(cmd.city())
|
||||
.email(cmd.email())
|
||||
.phone(cmd.phone())
|
||||
.linkedin(cmd.linkedin())
|
||||
.github(cmd.github())
|
||||
.build();
|
||||
return repository.save(contact);
|
||||
}
|
||||
|
||||
public record Command(
|
||||
String country,
|
||||
String city,
|
||||
String email,
|
||||
String phone,
|
||||
String linkedin,
|
||||
String github
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.pablotj.portfolio.application.contact;
|
||||
|
||||
import com.pablotj.portfolio.domain.contact.Contact;
|
||||
import com.pablotj.portfolio.domain.contact.ContactId;
|
||||
import com.pablotj.portfolio.domain.contact.port.ContactRepositoryPort;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class GetContactUseCase {
|
||||
|
||||
private final ContactRepositoryPort repository;
|
||||
|
||||
public GetContactUseCase(ContactRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<Contact> byId(Long id) {
|
||||
return repository.findById(new ContactId(id));
|
||||
}
|
||||
|
||||
public List<Contact> all() {
|
||||
return repository.findAll();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.pablotj.portfolio.application.education;
|
||||
|
||||
import com.pablotj.portfolio.domain.education.Education;
|
||||
import com.pablotj.portfolio.domain.education.EducationId;
|
||||
import com.pablotj.portfolio.domain.education.port.EducationRepositoryPort;
|
||||
|
||||
public class CreateEducationUseCase {
|
||||
@@ -11,16 +12,24 @@ public class CreateEducationUseCase {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Education handle(Command cmd) {
|
||||
public Education handle(Long profileId, Command cmd) {
|
||||
var education = Education.builder()
|
||||
.id(null)
|
||||
.title(cmd.title())
|
||||
.id(new EducationId(profileId))
|
||||
.institution(cmd.institution())
|
||||
.degree(cmd.degree())
|
||||
.period(cmd.period())
|
||||
.grade(cmd.grade())
|
||||
.description(cmd.description())
|
||||
.url(cmd.url())
|
||||
.build();
|
||||
return repository.save(education);
|
||||
}
|
||||
|
||||
public record Command(String title, String description, String url) {
|
||||
public record Command(
|
||||
String institution,
|
||||
String degree,
|
||||
String period,
|
||||
String grade,
|
||||
String description
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -14,11 +14,11 @@ public class GetEducationUseCase {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<Education> byId(Long id) {
|
||||
return repository.findById(new EducationId(id));
|
||||
public Optional<Education> byId(Long profileId, Long id) {
|
||||
return repository.findById(new EducationId(profileId, id));
|
||||
}
|
||||
|
||||
public List<Education> all() {
|
||||
return repository.findAll();
|
||||
public List<Education> all(Long profileId) {
|
||||
return repository.findAll(profileId);
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,9 @@ package com.pablotj.portfolio.application.experience;
|
||||
|
||||
import com.pablotj.portfolio.domain.experience.Achievement;
|
||||
import com.pablotj.portfolio.domain.experience.Experience;
|
||||
import com.pablotj.portfolio.domain.experience.Skill;
|
||||
import com.pablotj.portfolio.domain.experience.ExperienceId;
|
||||
import com.pablotj.portfolio.domain.experience.Technology;
|
||||
import com.pablotj.portfolio.domain.experience.port.ExperienceRepositoryPort;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -17,22 +16,18 @@ public class CreateExperienceUseCase {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Experience handle(Command cmd) {
|
||||
public Experience handle(Long profileId, Command cmd) {
|
||||
var experience = Experience.builder()
|
||||
.id(null)
|
||||
.position(cmd.position())
|
||||
.id(new ExperienceId(profileId))
|
||||
.company(cmd.company())
|
||||
.startDate(cmd.startDate())
|
||||
.endDate(cmd.endDate())
|
||||
.city(cmd.city())
|
||||
.region(cmd.region())
|
||||
.country(cmd.country())
|
||||
.remote(cmd.remote())
|
||||
.position(cmd.position())
|
||||
.period(cmd.period())
|
||||
.location(cmd.location())
|
||||
.description(cmd.description())
|
||||
.skills(new ArrayList<>())
|
||||
.technologies(new ArrayList<>())
|
||||
.achievements(new ArrayList<>())
|
||||
.build();
|
||||
cmd.skills.forEach(name -> experience.getSkills().add(Skill.builder().id(null).name(name).build()));
|
||||
cmd.technologies.forEach(name -> experience.getTechnologies().add(Technology.builder().id(null).name(name).build()));
|
||||
cmd.achievements.forEach(description -> experience.getAchievements().add(Achievement.builder().id(null).description(description).build()));
|
||||
return repository.save(experience);
|
||||
}
|
||||
@@ -40,14 +35,10 @@ public class CreateExperienceUseCase {
|
||||
public record Command(
|
||||
String position,
|
||||
String company,
|
||||
LocalDate startDate,
|
||||
LocalDate endDate,
|
||||
String city,
|
||||
String region,
|
||||
String country,
|
||||
Boolean remote,
|
||||
String period,
|
||||
String location,
|
||||
String description,
|
||||
List<String> skills,
|
||||
List<String> technologies,
|
||||
List<String> achievements
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -14,11 +14,11 @@ public class GetExperienceUseCase {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<Experience> byId(Long id) {
|
||||
return repository.findById(new ExperienceId(id));
|
||||
public Optional<Experience> byId(Long profileId, Long id) {
|
||||
return repository.findById(new ExperienceId(profileId, id));
|
||||
}
|
||||
|
||||
public List<Experience> all() {
|
||||
return repository.findAll();
|
||||
public List<Experience> all(Long profileId) {
|
||||
return repository.findAll(profileId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.pablotj.portfolio.application.profile;
|
||||
|
||||
import com.pablotj.portfolio.domain.profile.Profile;
|
||||
import com.pablotj.portfolio.domain.profile.ProfileSocialLink;
|
||||
import com.pablotj.portfolio.domain.profile.port.ProfileRepositoryPort;
|
||||
import java.util.List;
|
||||
|
||||
public class CreateProfileUseCase {
|
||||
|
||||
private final ProfileRepositoryPort repository;
|
||||
|
||||
public CreateProfileUseCase(ProfileRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Profile handle(Command cmd) {
|
||||
var personalBuilder = Profile.builder()
|
||||
.id(null)
|
||||
.slug(cmd.slug())
|
||||
.name(cmd.name())
|
||||
.title(cmd.title())
|
||||
.subtitle(cmd.subtitle())
|
||||
.email(cmd.email())
|
||||
.phone(cmd.phone())
|
||||
.location(cmd.location())
|
||||
.avatar(cmd.avatar())
|
||||
.bio(cmd.bio());
|
||||
if (cmd.socialLinks != null) {
|
||||
cmd.socialLinks.forEach(l -> personalBuilder.social(ProfileSocialLink.builder().id(null).platform(l.platform()).url(l.url()).build()));
|
||||
}
|
||||
return repository.save(personalBuilder.build());
|
||||
}
|
||||
|
||||
public record Command(
|
||||
String slug,
|
||||
String name,
|
||||
String title,
|
||||
String subtitle,
|
||||
String email,
|
||||
String phone,
|
||||
String location,
|
||||
String avatar,
|
||||
String bio,
|
||||
List<Link> socialLinks
|
||||
) {
|
||||
}
|
||||
|
||||
public record Link(String platform, String url) {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.pablotj.portfolio.application.profile;
|
||||
|
||||
import com.pablotj.portfolio.domain.profile.Profile;
|
||||
import com.pablotj.portfolio.domain.profile.ProfileId;
|
||||
import com.pablotj.portfolio.domain.profile.port.ProfileRepositoryPort;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class GetProfileUseCase {
|
||||
|
||||
private final ProfileRepositoryPort repository;
|
||||
|
||||
public GetProfileUseCase(ProfileRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<Profile> byId(Long id) {
|
||||
return repository.findById(new ProfileId(id));
|
||||
}
|
||||
|
||||
public Optional<Profile> bySlug(String slug) {
|
||||
return repository.findBySlug(new ProfileId(slug));
|
||||
}
|
||||
|
||||
public List<Profile> all() {
|
||||
return repository.findAll();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,25 +1,44 @@
|
||||
package com.pablotj.portfolio.application.project;
|
||||
|
||||
import com.pablotj.portfolio.domain.project.Project;
|
||||
import com.pablotj.portfolio.domain.project.ProjectFeature;
|
||||
import com.pablotj.portfolio.domain.project.ProjectId;
|
||||
import com.pablotj.portfolio.domain.project.ProjectTechnology;
|
||||
import com.pablotj.portfolio.domain.project.port.ProjectRepositoryPort;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CreateProjectUseCase {
|
||||
|
||||
private final ProjectRepositoryPort repository;
|
||||
|
||||
public record Command(String title, String description, String url) {}
|
||||
|
||||
public CreateProjectUseCase(ProjectRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Project handle(Command cmd) {
|
||||
public Project handle(Long profileId, Command cmd) {
|
||||
var project = Project.builder()
|
||||
.id(null)
|
||||
.id(new ProjectId(profileId))
|
||||
.title(cmd.title())
|
||||
.description(cmd.description())
|
||||
.url(cmd.url())
|
||||
.image(cmd.image())
|
||||
.technologies(new ArrayList<>())
|
||||
.features(new ArrayList<>())
|
||||
.demo(cmd.demo())
|
||||
.repository(cmd.repository())
|
||||
|
||||
.build();
|
||||
cmd.technologies.forEach(name -> project.getTechnologies().add(ProjectTechnology.builder().id(null).name(name).build()));
|
||||
cmd.features.forEach(description -> project.getFeatures().add(ProjectFeature.builder().id(null).name(description).build()));
|
||||
return repository.save(project);
|
||||
}
|
||||
|
||||
public record Command(String title,
|
||||
String description,
|
||||
String image,
|
||||
List<String> technologies,
|
||||
List<String> features,
|
||||
String demo,
|
||||
String repository) {
|
||||
}
|
||||
}
|
||||
@@ -15,11 +15,11 @@ public class GetProjectUseCase {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<Project> byId(Long id) {
|
||||
return repository.findById(new ProjectId(id));
|
||||
public Optional<Project> byId(Long profileId, Long id) {
|
||||
return repository.findById(new ProjectId(profileId, id));
|
||||
}
|
||||
|
||||
public List<Project> all() {
|
||||
return repository.findAll();
|
||||
public List<Project> all(Long profileId) {
|
||||
return repository.findAll(profileId);
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package com.pablotj.portfolio.application.resume;
|
||||
|
||||
import com.pablotj.portfolio.domain.resume.Resume;
|
||||
import com.pablotj.portfolio.domain.resume.port.ResumeRepositoryPort;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
public class CreateResumeUseCase {
|
||||
|
||||
private final ResumeRepositoryPort repository;
|
||||
|
||||
public CreateResumeUseCase(ResumeRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Resume handle(Command cmd) {
|
||||
var home = Resume.builder()
|
||||
.id(null)
|
||||
.name(cmd.title())
|
||||
.surnames(cmd.surnames())
|
||||
.title(cmd.title())
|
||||
.summary(cmd.summary())
|
||||
.icon(cmd.icon())
|
||||
.build();
|
||||
return repository.save(home);
|
||||
}
|
||||
|
||||
public record Command(
|
||||
String name,
|
||||
String surnames,
|
||||
String title,
|
||||
String summary,
|
||||
String icon
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.pablotj.portfolio.application.resume;
|
||||
|
||||
import com.pablotj.portfolio.domain.resume.Resume;
|
||||
import com.pablotj.portfolio.domain.resume.ResumeId;
|
||||
import com.pablotj.portfolio.domain.resume.port.ResumeRepositoryPort;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class GetResumeUseCase {
|
||||
|
||||
private final ResumeRepositoryPort repository;
|
||||
|
||||
public GetResumeUseCase(ResumeRepositoryPort repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<Resume> byId(Long id) {
|
||||
return repository.findById(new ResumeId(id));
|
||||
}
|
||||
|
||||
public List<Resume> all() {
|
||||
return repository.findAll();
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,11 @@
|
||||
package com.pablotj.portfolio.application.skill;
|
||||
|
||||
import com.pablotj.portfolio.domain.skill.Skill;
|
||||
import com.pablotj.portfolio.domain.skill.SkillGroup;
|
||||
import com.pablotj.portfolio.domain.skill.SkillGroupId;
|
||||
import com.pablotj.portfolio.domain.skill.port.SkillRepositoryPort;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CreateSkillUseCase {
|
||||
|
||||
@@ -11,16 +15,29 @@ public class CreateSkillUseCase {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Skill handle(Command cmd) {
|
||||
var skill = Skill.builder()
|
||||
.id(null)
|
||||
.title(cmd.title())
|
||||
.description(cmd.description())
|
||||
.url(cmd.url())
|
||||
public SkillGroup handle(Long profileId, CommandGroup cmd) {
|
||||
var skillGroup = SkillGroup.builder()
|
||||
.id(new SkillGroupId(profileId))
|
||||
.name(cmd.name())
|
||||
.icon(cmd.icon())
|
||||
.skills(new ArrayList<>())
|
||||
.build();
|
||||
return repository.save(skill);
|
||||
cmd.skills.forEach(s -> skillGroup.getSkills().add(
|
||||
Skill.builder().id(null).name(s.name).level(s.level).years(s.years).build()));
|
||||
return repository.save(skillGroup);
|
||||
}
|
||||
|
||||
public record Command(String title, String description, String url) {
|
||||
public record CommandGroup(
|
||||
String name,
|
||||
String icon,
|
||||
List<CommandSkill> skills
|
||||
) {
|
||||
}
|
||||
|
||||
public record CommandSkill(
|
||||
String name,
|
||||
Integer level,
|
||||
Integer years
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.pablotj.portfolio.application.skill;
|
||||
|
||||
import com.pablotj.portfolio.domain.skill.Skill;
|
||||
import com.pablotj.portfolio.domain.skill.SkillId;
|
||||
import com.pablotj.portfolio.domain.skill.SkillGroup;
|
||||
import com.pablotj.portfolio.domain.skill.SkillGroupId;
|
||||
import com.pablotj.portfolio.domain.skill.port.SkillRepositoryPort;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
@@ -14,11 +14,11 @@ public class GetSkillUseCase {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<Skill> byId(Long id) {
|
||||
return repository.findById(new SkillId(id));
|
||||
public Optional<SkillGroup> byId(Long profileId, Long id) {
|
||||
return repository.findById(new SkillGroupId(profileId, id));
|
||||
}
|
||||
|
||||
public List<Skill> all() {
|
||||
return repository.findAll();
|
||||
public List<SkillGroup> all(Long profileId) {
|
||||
return repository.findAll(profileId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user