diff --git a/services/payments/src/main/java/com/workup/payments/RabbitMQListener.java b/services/payments/src/main/java/com/workup/payments/RabbitMQListener.java
index 3aec1870..9bc796e8 100644
--- a/services/payments/src/main/java/com/workup/payments/RabbitMQListener.java
+++ b/services/payments/src/main/java/com/workup/payments/RabbitMQListener.java
@@ -2,8 +2,14 @@
import com.workup.payments.commands.PaymentCommandMap;
import com.workup.payments.commands.paymentrequest.CreatePaymentRequestCommand;
+import com.workup.payments.commands.wallet.CreateWalletCommand;
+import com.workup.payments.commands.wallet.GetWalletCommand;
import com.workup.shared.commands.payments.paymentrequest.requests.CreatePaymentRequestRequest;
import com.workup.shared.commands.payments.paymentrequest.responses.CreatePaymentRequestResponse;
+import com.workup.shared.commands.payments.wallet.requests.CreateWalletRequest;
+import com.workup.shared.commands.payments.wallet.requests.GetWalletRequest;
+import com.workup.shared.commands.payments.wallet.responses.CreateWalletResponse;
+import com.workup.shared.commands.payments.wallet.responses.GetWalletResponse;
import com.workup.shared.enums.ServiceQueueNames;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
@@ -20,4 +26,14 @@ public class RabbitMQListener {
public CreatePaymentRequestResponse receive(CreatePaymentRequestRequest in) throws Exception {
return ((CreatePaymentRequestCommand) commandMap.getCommand("CreatePaymentRequest")).Run(in);
}
+
+ @RabbitHandler
+ public CreateWalletResponse receive(CreateWalletRequest in) throws Exception {
+ return ((CreateWalletCommand) commandMap.getCommand("CreateWallet")).Run(in);
+ }
+
+ @RabbitHandler
+ public GetWalletResponse receive(GetWalletRequest in) throws Exception {
+ return ((GetWalletCommand) commandMap.getCommand("GetWallet")).Run(in);
+ }
}
diff --git a/services/payments/src/test/java/com/workup/payments/PaymentsApplicationTests.java b/services/payments/src/test/java/com/workup/payments/PaymentsApplicationTests.java
index 288094a5..b5917eca 100644
--- a/services/payments/src/test/java/com/workup/payments/PaymentsApplicationTests.java
+++ b/services/payments/src/test/java/com/workup/payments/PaymentsApplicationTests.java
@@ -8,6 +8,10 @@
import com.workup.payments.repositories.WalletTransactionRepository;
import com.workup.shared.commands.payments.paymentrequest.requests.CreatePaymentRequestRequest;
import com.workup.shared.commands.payments.paymentrequest.responses.CreatePaymentRequestResponse;
+import com.workup.shared.commands.payments.wallet.requests.CreateWalletRequest;
+import com.workup.shared.commands.payments.wallet.requests.GetWalletRequest;
+import com.workup.shared.commands.payments.wallet.responses.CreateWalletResponse;
+import com.workup.shared.commands.payments.wallet.responses.GetWalletResponse;
import com.workup.shared.enums.HttpStatusCode;
import com.workup.shared.enums.ServiceQueueNames;
import java.util.UUID;
@@ -98,4 +102,62 @@ void testCreatePaymentRequest() {
},
() -> fail("Payment request not found"));
}
+
+ @Test
+ void testCreateWalletCommand() {
+
+ CreateWalletRequest createWalletRequest =
+ CreateWalletRequest.builder().withFreelancerId("1").build();
+ CreateWalletResponse response =
+ (CreateWalletResponse)
+ template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, createWalletRequest);
+ assertNotNull(response);
+ assertEquals(HttpStatusCode.CREATED, response.getStatusCode());
+ }
+
+ @Test
+ void testCreateDuplicateWalletIsInvalid() {
+ CreateWalletRequest createWalletRequest =
+ CreateWalletRequest.builder().withFreelancerId("1").build();
+ CreateWalletResponse response =
+ (CreateWalletResponse)
+ template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, createWalletRequest);
+ assertNotNull(response);
+ assertEquals(HttpStatusCode.CREATED, response.getStatusCode());
+
+ CreateWalletResponse response2 =
+ (CreateWalletResponse)
+ template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, createWalletRequest);
+ assertNotNull(response2);
+ assertEquals(HttpStatusCode.BAD_REQUEST, response2.getStatusCode());
+ }
+
+ @Test
+ void testGetValidWallet() {
+ CreateWalletRequest createWalletRequest =
+ CreateWalletRequest.builder().withFreelancerId("1").build();
+ CreateWalletResponse response =
+ (CreateWalletResponse)
+ template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, createWalletRequest);
+ assertNotNull(response);
+ assertEquals(HttpStatusCode.CREATED, response.getStatusCode());
+
+ GetWalletRequest getWalletRequest = GetWalletRequest.builder().withFreelancerId("1").build();
+ GetWalletResponse getWalletResponse =
+ (GetWalletResponse)
+ template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, getWalletRequest);
+ assertNotNull(getWalletResponse);
+ assertEquals(HttpStatusCode.OK, getWalletResponse.getStatusCode());
+ assertEquals(0, getWalletResponse.getBalance());
+ }
+
+ @Test
+ void testGetInvalidWallet() {
+ GetWalletRequest getWalletRequest = GetWalletRequest.builder().withFreelancerId("1").build();
+ GetWalletResponse getWalletResponse =
+ (GetWalletResponse)
+ template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, getWalletRequest);
+ assertNotNull(getWalletResponse);
+ assertEquals(HttpStatusCode.NOT_FOUND, getWalletResponse.getStatusCode());
+ }
}
diff --git a/services/users/.mvn/jvm.config b/services/users/.mvn/jvm.config
new file mode 100644
index 00000000..e2a50e08
--- /dev/null
+++ b/services/users/.mvn/jvm.config
@@ -0,0 +1 @@
+--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
\ No newline at end of file
diff --git a/services/users/pom.xml b/services/users/pom.xml
index 9ff894c4..ff215d4a 100644
--- a/services/users/pom.xml
+++ b/services/users/pom.xml
@@ -9,7 +9,7 @@
3.2.3
- org.example
+ com.workup
users
0.0.1-SNAPSHOT
users
diff --git a/services/users/src/main/java/com/workup/users/commands/AddFreelancerAchievementCommand.java b/services/users/src/main/java/com/workup/users/commands/AddFreelancerAchievementCommand.java
new file mode 100644
index 00000000..1f40a83f
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/AddFreelancerAchievementCommand.java
@@ -0,0 +1,36 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.AddFreelancerAchievementRequest;
+import com.workup.shared.commands.users.responses.AddFreelancerAchievementResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Achievement;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class AddFreelancerAchievementCommand
+ extends UserCommand {
+ @Override
+ public AddFreelancerAchievementResponse Run(AddFreelancerAchievementRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancer_id());
+ if (freelancerOptional.isEmpty())
+ return AddFreelancerAchievementResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ Achievement newAchievement =
+ Achievement.builder()
+ .withAchievement_description(request.getAchievement_description())
+ .withAchievement_name(request.getAchievement_name())
+ .withAward_date(request.getAward_date())
+ .withAwarded_by(request.getAwarded_by())
+ .build();
+ newAchievement = achievementRepository.save(newAchievement);
+ freelancer.getAchievements().add(newAchievement);
+ freelancerRepository.save(freelancer);
+ return AddFreelancerAchievementResponse.builder()
+ .withStatusCode(HttpStatusCode.CREATED)
+ .build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/AddFreelancerEducationCommand.java b/services/users/src/main/java/com/workup/users/commands/AddFreelancerEducationCommand.java
new file mode 100644
index 00000000..78b8b7bf
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/AddFreelancerEducationCommand.java
@@ -0,0 +1,39 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.AddFreelancerEducationRequest;
+import com.workup.shared.commands.users.responses.AddFreelancerEducationResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Education;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class AddFreelancerEducationCommand
+ extends UserCommand {
+
+ @Override
+ public AddFreelancerEducationResponse Run(AddFreelancerEducationRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancer_id());
+ if (freelancerOptional.isEmpty())
+ return AddFreelancerEducationResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ Education newEducation =
+ Education.builder()
+ .withCity(request.getCity())
+ .withDegree(request.getDegree())
+ .withEducation_description(request.getEducation_description())
+ .withEducation_start_date(request.getEducation_start_date())
+ .withEnd_date(request.getEnd_date())
+ .withGrade(request.getGrade())
+ .withMajor(request.getMajor())
+ .withSchool_name(request.getSchool_name())
+ .build();
+ newEducation = educationRepository.save(newEducation);
+ freelancer.getEducations().add(newEducation);
+ freelancerRepository.save(freelancer);
+ return AddFreelancerEducationResponse.builder().withStatusCode(HttpStatusCode.CREATED).build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/AddFreelancerExperienceCommand.java b/services/users/src/main/java/com/workup/users/commands/AddFreelancerExperienceCommand.java
new file mode 100644
index 00000000..d8704a26
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/AddFreelancerExperienceCommand.java
@@ -0,0 +1,36 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.AddFreelancerExperienceRequest;
+import com.workup.shared.commands.users.responses.AddFreelancerExperienceResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Experience;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class AddFreelancerExperienceCommand
+ extends UserCommand {
+ @Override
+ public AddFreelancerExperienceResponse Run(AddFreelancerExperienceRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancerId());
+ if (freelancerOptional.isEmpty())
+ return AddFreelancerExperienceResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ Experience newExperience =
+ Experience.builder()
+ .withExperience_description(request.getExperience_description())
+ .withCity(request.getCity())
+ .withCompany_name(request.getCompany_name())
+ .withEmployment_end(request.getEmployment_end())
+ .withEmployment_start(request.getEmployment_start())
+ .withJob_title(request.getJob_title())
+ .build();
+ newExperience = experienceRepository.save(newExperience);
+ freelancer.getExperiences().add(newExperience);
+ freelancerRepository.save(freelancer);
+ return AddFreelancerExperienceResponse.builder().withStatusCode(HttpStatusCode.CREATED).build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/AddFreelancerLanguageCommand.java b/services/users/src/main/java/com/workup/users/commands/AddFreelancerLanguageCommand.java
new file mode 100644
index 00000000..ccf5772f
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/AddFreelancerLanguageCommand.java
@@ -0,0 +1,25 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.AddFreelancerLanguageRequest;
+import com.workup.shared.commands.users.responses.AddFreelancerLanguageResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class AddFreelancerLanguageCommand
+ extends UserCommand {
+
+ @Override
+ public AddFreelancerLanguageResponse Run(AddFreelancerLanguageRequest request) {
+ Optional freelancerOptional = freelancerRepository.findById(request.getUser_id());
+ if (freelancerOptional.isEmpty())
+ return AddFreelancerLanguageResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ freelancer.getLanguages().add(request.getNewLanguage());
+ freelancerRepository.save(freelancer);
+ return AddFreelancerLanguageResponse.builder().withStatusCode(HttpStatusCode.CREATED).build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/AddFreelancerSkillCommand.java b/services/users/src/main/java/com/workup/users/commands/AddFreelancerSkillCommand.java
new file mode 100644
index 00000000..5d9d77ea
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/AddFreelancerSkillCommand.java
@@ -0,0 +1,28 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.AddFreelancerSkillRequest;
+import com.workup.shared.commands.users.responses.AddFreelancerSkillResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Freelancer;
+import java.util.List;
+import java.util.Optional;
+
+public class AddFreelancerSkillCommand
+ extends UserCommand {
+
+ @Override
+ public AddFreelancerSkillResponse Run(AddFreelancerSkillRequest request) {
+ Optional freelancerOptional = freelancerRepository.findById(request.getUser_id());
+ if (freelancerOptional.isEmpty())
+ return AddFreelancerSkillResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ String newSkill = request.getNewSkill();
+ Freelancer freelancer = freelancerOptional.get();
+ List skills = freelancer.getSkills();
+ if (!skills.contains(newSkill)) skills.add(newSkill);
+ freelancerRepository.save(freelancer);
+ return AddFreelancerSkillResponse.builder().withStatusCode(HttpStatusCode.CREATED).build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/ClientGetProfileCommand.java b/services/users/src/main/java/com/workup/users/commands/ClientGetProfileCommand.java
index 74cc730a..dcac4ef7 100644
--- a/services/users/src/main/java/com/workup/users/commands/ClientGetProfileCommand.java
+++ b/services/users/src/main/java/com/workup/users/commands/ClientGetProfileCommand.java
@@ -11,7 +11,7 @@ public class ClientGetProfileCommand
@Override
public ClientGetProfileResponse Run(ClientGetProfileRequest request) {
- Optional clientOptional = clientRepository.findById(request.user_id);
+ Optional clientOptional = clientRepository.findById(request.getUser_id());
if (!clientOptional.isPresent()) {
return ClientGetProfileResponse.builder()
diff --git a/services/users/src/main/java/com/workup/users/commands/ClientSetProfileCommand.java b/services/users/src/main/java/com/workup/users/commands/ClientSetProfileCommand.java
index 489394d1..2f8db954 100644
--- a/services/users/src/main/java/com/workup/users/commands/ClientSetProfileCommand.java
+++ b/services/users/src/main/java/com/workup/users/commands/ClientSetProfileCommand.java
@@ -14,33 +14,33 @@ public ClientSetProfileResponse Run(ClientSetProfileRequest request) {
Client client;
- if (request.user_id == null) {
+ if (request.getUser_id() == null) {
client = Client.builder().build();
} else {
- Optional clientOption = clientRepository.findById(request.user_id);
+ Optional clientOption = clientRepository.findById(request.getUser_id());
if (!clientOption.isPresent()) {
throw new RuntimeException("User not found");
}
client = clientOption.get();
}
- if (request.name != null) {
- client.setClient_name(request.name);
+ if (request.getName() != null) {
+ client.setClient_name(request.getName());
}
- if (request.email != null) {
- client.setEmail(request.email);
+ if (request.getEmail() != null) {
+ client.setEmail(request.getEmail());
}
- if (request.city != null) {
- client.setCity(request.city);
+ if (request.getCity() != null) {
+ client.setCity(request.getCity());
}
- if (request.description != null) {
- client.setClient_description(request.description);
+ if (request.getDescription() != null) {
+ client.setClient_description(request.getDescription());
}
- if (request.industry != null) {
- client.setIndustry(request.industry);
+ if (request.getIndustry() != null) {
+ client.setIndustry(request.getIndustry());
}
- if (request.employee_count != null) {
- client.setEmployee_count(request.employee_count);
+ if (request.getEmployee_count() != null) {
+ client.setEmployee_count(request.getEmployee_count());
}
clientRepository.save(client);
diff --git a/services/users/src/main/java/com/workup/users/commands/FreelancerGetPhotoCommand.java b/services/users/src/main/java/com/workup/users/commands/FreelancerGetPhotoCommand.java
index f9cbe387..a0203e51 100644
--- a/services/users/src/main/java/com/workup/users/commands/FreelancerGetPhotoCommand.java
+++ b/services/users/src/main/java/com/workup/users/commands/FreelancerGetPhotoCommand.java
@@ -12,14 +12,14 @@ public class FreelancerGetPhotoCommand
@Override
public FreelancerGetPhotoResponse Run(FreelancerGetPhotoRequest request) {
- Optional clientOptional = clientRepository.findById(request.user_id);
+ Optional clientOptional = clientRepository.findById(request.getUser_id());
if (!clientOptional.isPresent()) {
return FreelancerGetPhotoResponse.builder()
.withStatusCode(HttpStatusCode.INTERNAL_SERVER_ERROR)
.build();
}
- String name = PHOTO_BUCKET + request.user_id;
+ String name = PHOTO_BUCKET + request.getUser_id();
byte[] bytesArr;
try {
diff --git a/services/users/src/main/java/com/workup/users/commands/FreelancerGetProfileBriefCommand.java b/services/users/src/main/java/com/workup/users/commands/FreelancerGetProfileBriefCommand.java
index 9e33eac1..e23c7483 100644
--- a/services/users/src/main/java/com/workup/users/commands/FreelancerGetProfileBriefCommand.java
+++ b/services/users/src/main/java/com/workup/users/commands/FreelancerGetProfileBriefCommand.java
@@ -11,7 +11,7 @@ public class FreelancerGetProfileBriefCommand
@Override
public FreelancerGetProfileBriefResponse Run(FreelancerGetProfileBriefRequest request) {
- Optional freelancer = freelancerRepository.findById(request.user_id);
+ Optional freelancer = freelancerRepository.findById(request.getUser_id());
if (!freelancer.isPresent()) {
return FreelancerGetProfileBriefResponse.builder()
diff --git a/services/users/src/main/java/com/workup/users/commands/FreelancerGetProfileCommand.java b/services/users/src/main/java/com/workup/users/commands/FreelancerGetProfileCommand.java
index 8d9aabd3..14de14a3 100644
--- a/services/users/src/main/java/com/workup/users/commands/FreelancerGetProfileCommand.java
+++ b/services/users/src/main/java/com/workup/users/commands/FreelancerGetProfileCommand.java
@@ -11,7 +11,7 @@ public class FreelancerGetProfileCommand
@Override
public FreelancerGetProfileResponse Run(FreelancerGetProfileRequest request) {
- Optional freelancer = freelancerRepository.findById(request.user_id);
+ Optional freelancer = freelancerRepository.findById(request.getUser_id());
if (!freelancer.isPresent()) {
return FreelancerGetProfileResponse.builder()
diff --git a/services/users/src/main/java/com/workup/users/commands/FreelancerSetProfileCommand.java b/services/users/src/main/java/com/workup/users/commands/FreelancerSetProfileCommand.java
index 855aa3e3..edbe91f5 100644
--- a/services/users/src/main/java/com/workup/users/commands/FreelancerSetProfileCommand.java
+++ b/services/users/src/main/java/com/workup/users/commands/FreelancerSetProfileCommand.java
@@ -44,7 +44,6 @@ public FreelancerSetProfileResponse Run(FreelancerSetProfileRequest request) {
}
freelancerRepository.save(freelancer);
-
return FreelancerSetProfileResponse.builder().withStatusCode(HttpStatusCode.OK).build();
}
}
diff --git a/services/users/src/main/java/com/workup/users/commands/FreelancerSetResumeCommand.java b/services/users/src/main/java/com/workup/users/commands/FreelancerSetResumeCommand.java
index 5573751e..3fe74def 100644
--- a/services/users/src/main/java/com/workup/users/commands/FreelancerSetResumeCommand.java
+++ b/services/users/src/main/java/com/workup/users/commands/FreelancerSetResumeCommand.java
@@ -12,9 +12,9 @@ public class FreelancerSetResumeCommand
@Override
public FreelancerSetResumeResponse Run(FreelancerSetResumeRequest request) {
- String name = RESUME_BUCKET + request.user_id;
+ String name = RESUME_BUCKET + request.getUser_id();
- byte[] resume_byes_arr = Base64.getDecoder().decode(request.resume_encoded);
+ byte[] resume_byes_arr = Base64.getDecoder().decode(request.getResume_encoded());
try {
gridFsTemplate.store(new ByteArrayInputStream(resume_byes_arr), name);
diff --git a/services/users/src/main/java/com/workup/users/commands/GetFreelancerAchievementsCommand.java b/services/users/src/main/java/com/workup/users/commands/GetFreelancerAchievementsCommand.java
new file mode 100644
index 00000000..e0663bff
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/GetFreelancerAchievementsCommand.java
@@ -0,0 +1,29 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.GetFreelancerAchievementsRequest;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.commands.responses.GetFreelancerAchievementsResponse;
+import com.workup.users.db.Achievement;
+import com.workup.users.db.Freelancer;
+import java.util.List;
+import java.util.Optional;
+
+public class GetFreelancerAchievementsCommand
+ extends UserCommand {
+ @Override
+ public GetFreelancerAchievementsResponse Run(GetFreelancerAchievementsRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancer_id());
+ if (freelancerOptional.isEmpty())
+ return GetFreelancerAchievementsResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ List achievements = freelancer.getAchievements();
+ return GetFreelancerAchievementsResponse.builder()
+ .withStatusCode(HttpStatusCode.OK)
+ .withAchievements(achievements)
+ .build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/GetFreelancerEducationsCommand.java b/services/users/src/main/java/com/workup/users/commands/GetFreelancerEducationsCommand.java
new file mode 100644
index 00000000..2b9c7fb6
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/GetFreelancerEducationsCommand.java
@@ -0,0 +1,28 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.GetFreelancerEducationsRequest;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.commands.responses.GetFreelancerEducationsResponse;
+import com.workup.users.db.Education;
+import com.workup.users.db.Freelancer;
+import java.util.List;
+import java.util.Optional;
+
+public class GetFreelancerEducationsCommand
+ extends UserCommand {
+ @Override
+ public GetFreelancerEducationsResponse Run(GetFreelancerEducationsRequest request) {
+ Optional freelancerOptional = freelancerRepository.findById(request.getUser_id());
+ if (freelancerOptional.isEmpty())
+ return GetFreelancerEducationsResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ List educations = freelancer.getEducations();
+ return GetFreelancerEducationsResponse.builder()
+ .withStatusCode(HttpStatusCode.OK)
+ .withEducations(educations)
+ .build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/GetFreelancerExperiencesCommand.java b/services/users/src/main/java/com/workup/users/commands/GetFreelancerExperiencesCommand.java
new file mode 100644
index 00000000..0ed86ed1
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/GetFreelancerExperiencesCommand.java
@@ -0,0 +1,30 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.GetFreelancerExperiencesRequest;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.commands.responses.GetFreelancerExperiencesResponse;
+import com.workup.users.db.Experience;
+import com.workup.users.db.Freelancer;
+import java.util.List;
+import java.util.Optional;
+
+public class GetFreelancerExperiencesCommand
+ extends UserCommand {
+
+ @Override
+ public GetFreelancerExperiencesResponse Run(GetFreelancerExperiencesRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancerId());
+ if (freelancerOptional.isEmpty())
+ return GetFreelancerExperiencesResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ List experiences = freelancer.getExperiences();
+ return GetFreelancerExperiencesResponse.builder()
+ .withStatusCode(HttpStatusCode.OK)
+ .withExperiences(experiences)
+ .build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/GetFreelancerLanguagesCommand.java b/services/users/src/main/java/com/workup/users/commands/GetFreelancerLanguagesCommand.java
new file mode 100644
index 00000000..cc3f1fac
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/GetFreelancerLanguagesCommand.java
@@ -0,0 +1,27 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.GetFreelancerLanguagesRequest;
+import com.workup.shared.commands.users.responses.GetFreelancerLanguagesResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Freelancer;
+import java.util.List;
+import java.util.Optional;
+
+public class GetFreelancerLanguagesCommand
+ extends UserCommand {
+ @Override
+ public GetFreelancerLanguagesResponse Run(GetFreelancerLanguagesRequest request) {
+ Optional freelancerOptional = freelancerRepository.findById(request.getUser_id());
+ if (freelancerOptional.isEmpty())
+ return GetFreelancerLanguagesResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ List languages = freelancer.getLanguages();
+ return GetFreelancerLanguagesResponse.builder()
+ .withStatusCode(HttpStatusCode.OK)
+ .withLanguages(languages)
+ .build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/GetFreelancerSkillsCommand.java b/services/users/src/main/java/com/workup/users/commands/GetFreelancerSkillsCommand.java
new file mode 100644
index 00000000..9874532e
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/GetFreelancerSkillsCommand.java
@@ -0,0 +1,28 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.GetFreelancerSkillsRequest;
+import com.workup.shared.commands.users.responses.GetFreelancerSkillsResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Freelancer;
+import java.util.List;
+import java.util.Optional;
+
+public class GetFreelancerSkillsCommand
+ extends UserCommand {
+
+ @Override
+ public GetFreelancerSkillsResponse Run(GetFreelancerSkillsRequest request) {
+ Optional freelancerOptional = freelancerRepository.findById(request.getUser_id());
+ if (freelancerOptional.isEmpty())
+ return GetFreelancerSkillsResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ List skills = freelancer.getSkills();
+ return GetFreelancerSkillsResponse.builder()
+ .withStatusCode(HttpStatusCode.OK)
+ .withSkills(skills)
+ .build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerAchievementCommand.java b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerAchievementCommand.java
new file mode 100644
index 00000000..14fdec63
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerAchievementCommand.java
@@ -0,0 +1,35 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.RemoveFreelancerAchievementRequest;
+import com.workup.shared.commands.users.responses.RemoveFreelancerAchievementResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Achievement;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class RemoveFreelancerAchievementCommand
+ extends UserCommand {
+ @Override
+ public RemoveFreelancerAchievementResponse Run(RemoveFreelancerAchievementRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancerId());
+ if (freelancerOptional.isEmpty())
+ return RemoveFreelancerAchievementResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ freelancer
+ .getAchievements()
+ .removeIf(achievement -> achievement.getId().toString().equals(request.getAchievementId()));
+ deleteAchievement(request.getAchievementId());
+ freelancerRepository.save(freelancer);
+ return RemoveFreelancerAchievementResponse.builder().withStatusCode(HttpStatusCode.OK).build();
+ }
+
+ public void deleteAchievement(String id) {
+ Optional achievementOptional = achievementRepository.findById(id);
+ if (achievementOptional.isEmpty()) return;
+ achievementRepository.delete(achievementOptional.get());
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerEducationCommand.java b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerEducationCommand.java
new file mode 100644
index 00000000..e2f4d8eb
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerEducationCommand.java
@@ -0,0 +1,36 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.RemoveFreelancerEducationRequest;
+import com.workup.shared.commands.users.responses.RemoveFreelancerEducationResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Education;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class RemoveFreelancerEducationCommand
+ extends UserCommand {
+
+ @Override
+ public RemoveFreelancerEducationResponse Run(RemoveFreelancerEducationRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancer_id());
+ if (freelancerOptional.isEmpty())
+ return RemoveFreelancerEducationResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ freelancer
+ .getEducations()
+ .removeIf(education -> education.getId().toString().equals(request.getEducation_id()));
+ deleteEducation(request.getEducation_id());
+ freelancerRepository.save(freelancer);
+ return RemoveFreelancerEducationResponse.builder().withStatusCode(HttpStatusCode.OK).build();
+ }
+
+ void deleteEducation(String id) {
+ Optional educationOptional = educationRepository.findById(id);
+ if (educationOptional.isEmpty()) return;
+ educationRepository.delete(educationOptional.get());
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerExperienceCommand.java b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerExperienceCommand.java
new file mode 100644
index 00000000..665ca054
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerExperienceCommand.java
@@ -0,0 +1,35 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.RemoveFreelancerExperienceRequest;
+import com.workup.shared.commands.users.responses.RemoveFreelancerExperienceResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Experience;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class RemoveFreelancerExperienceCommand
+ extends UserCommand {
+ @Override
+ public RemoveFreelancerExperienceResponse Run(RemoveFreelancerExperienceRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancer_id());
+ if (freelancerOptional.isEmpty())
+ return RemoveFreelancerExperienceResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ freelancer
+ .getExperiences()
+ .removeIf(experience -> experience.getId().toString().equals(request.getExperience_id()));
+ deleteExperience(request.getExperience_id());
+ freelancerRepository.save(freelancer);
+ return RemoveFreelancerExperienceResponse.builder().withStatusCode(HttpStatusCode.OK).build();
+ }
+
+ public void deleteExperience(String id) {
+ Optional experienceOptional = experienceRepository.findById(id);
+ if (experienceOptional.isEmpty()) return;
+ experienceRepository.delete(experienceOptional.get());
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerLanguageCommand.java b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerLanguageCommand.java
new file mode 100644
index 00000000..31acbee3
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerLanguageCommand.java
@@ -0,0 +1,24 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.RemoveFreelancerLanguageRequest;
+import com.workup.shared.commands.users.responses.RemoveFreelancerLanguageResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class RemoveFreelancerLanguageCommand
+ extends UserCommand {
+ @Override
+ public RemoveFreelancerLanguageResponse Run(RemoveFreelancerLanguageRequest request) {
+ Optional freelancerOptional = freelancerRepository.findById(request.getUser_id());
+ if (freelancerOptional.isEmpty())
+ return RemoveFreelancerLanguageResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ freelancer.getLanguages().remove(request.getLanguageToRemove());
+ freelancerRepository.save(freelancer);
+ return RemoveFreelancerLanguageResponse.builder().withStatusCode(HttpStatusCode.OK).build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerSkillCommand.java b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerSkillCommand.java
new file mode 100644
index 00000000..2dd93979
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/RemoveFreelancerSkillCommand.java
@@ -0,0 +1,24 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.RemoveFreelancerSkillRequest;
+import com.workup.shared.commands.users.responses.RemoveFreelancerSkillResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class RemoveFreelancerSkillCommand
+ extends UserCommand {
+ @Override
+ public RemoveFreelancerSkillResponse Run(RemoveFreelancerSkillRequest request) {
+ Optional freelancerOptional = freelancerRepository.findById(request.getUser_id());
+ if (freelancerOptional.isEmpty())
+ return RemoveFreelancerSkillResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ freelancer.getSkills().remove(request.getSkillToRemove());
+ freelancerRepository.save(freelancer);
+ return RemoveFreelancerSkillResponse.builder().withStatusCode(HttpStatusCode.OK).build();
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerAchievementCommand.java b/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerAchievementCommand.java
new file mode 100644
index 00000000..c21da6c8
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerAchievementCommand.java
@@ -0,0 +1,53 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.UpdateFreelancerAchievementRequest;
+import com.workup.shared.commands.users.responses.UpdateFreelancerAchievementResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Achievement;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class UpdateFreelancerAchievementCommand
+ extends UserCommand {
+ @Override
+ public UpdateFreelancerAchievementResponse Run(UpdateFreelancerAchievementRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancer_id());
+ if (freelancerOptional.isEmpty())
+ return UpdateFreelancerAchievementResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ Achievement updatedAchievement =
+ Achievement.builder()
+ .withAchievement_description(request.getNew_achievement_description())
+ .withAchievement_name(request.getNew_achievement_name())
+ .withAward_date(request.getNew_award_date())
+ .withAwarded_by(request.getNew_awarded_by())
+ .build();
+ updateAchievement(request.getAchievement_id(), updatedAchievement);
+ freelancerRepository.save(freelancer);
+ return UpdateFreelancerAchievementResponse.builder().withStatusCode(HttpStatusCode.OK).build();
+ }
+
+ public void updateAchievement(String id, Achievement updatedAchievement) {
+ Optional achievementOptional = achievementRepository.findById(id);
+ if (achievementOptional.isEmpty()) return;
+ Achievement existingAchievement = achievementOptional.get();
+ if (updatedAchievement.getAchievement_name() != null) {
+ existingAchievement.setAchievement_name(updatedAchievement.getAchievement_name());
+ }
+ if (updatedAchievement.getAchievement_description() != null) {
+ existingAchievement.setAchievement_description(
+ updatedAchievement.getAchievement_description());
+ }
+ if (updatedAchievement.getAward_date() != null) {
+ existingAchievement.setAward_date(updatedAchievement.getAward_date());
+ }
+ if (updatedAchievement.getAwarded_by() != null) {
+ existingAchievement.setAwarded_by(updatedAchievement.getAwarded_by());
+ }
+ achievementRepository.save(existingAchievement);
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerEducationCommand.java b/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerEducationCommand.java
new file mode 100644
index 00000000..03beaf0f
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerEducationCommand.java
@@ -0,0 +1,70 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.UpdateFreelancerEducationRequest;
+import com.workup.shared.commands.users.responses.UpdateFreelancerEducationResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Education;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class UpdateFreelancerEducationCommand
+ extends UserCommand {
+
+ @Override
+ public UpdateFreelancerEducationResponse Run(UpdateFreelancerEducationRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancer_id());
+ if (freelancerOptional.isEmpty())
+ return UpdateFreelancerEducationResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ Education updatedEducation =
+ Education.builder()
+ .withCity(request.getNew_city())
+ .withDegree(request.getNew_degree())
+ .withEducation_description(request.getNew_education_description())
+ .withEducation_start_date(request.getNew_education_start_date())
+ .withEnd_date(request.getNew_end_date())
+ .withGrade(request.getNew_grade())
+ .withMajor(request.getNew_major())
+ .withSchool_name(request.getNew_school_name())
+ .build();
+ updateEducation(request.getEducation_id(), updatedEducation);
+ freelancerRepository.save(freelancer);
+ return UpdateFreelancerEducationResponse.builder().withStatusCode(HttpStatusCode.OK).build();
+ }
+
+ void updateEducation(String id, Education updatedEducation) {
+ Optional educationOptional = educationRepository.findById(id);
+ if (educationOptional.isEmpty()) return;
+ Education existingEducation = educationOptional.get();
+ if (updatedEducation.getCity() != null) {
+ existingEducation.setCity(updatedEducation.getCity());
+ }
+ if (updatedEducation.getDegree() != null) {
+ existingEducation.setDegree(updatedEducation.getDegree());
+ }
+ if (updatedEducation.getEducation_start_date() != null) {
+ existingEducation.setEducation_start_date(updatedEducation.getEducation_start_date());
+ }
+ if (updatedEducation.getEnd_date() != null) {
+ existingEducation.setEnd_date(updatedEducation.getEnd_date());
+ }
+ if (updatedEducation.getEducation_description() != null) {
+ existingEducation.setEducation_description(updatedEducation.getEducation_description());
+ }
+ if (updatedEducation.getGrade() != null) {
+ existingEducation.setGrade(updatedEducation.getGrade());
+ }
+ if (updatedEducation.getMajor() != null) {
+ existingEducation.setMajor(updatedEducation.getMajor());
+ }
+ if (updatedEducation.getSchool_name() != null) {
+ existingEducation.setSchool_name(updatedEducation.getSchool_name());
+ }
+
+ educationRepository.save(existingEducation);
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerExperienceCommand.java b/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerExperienceCommand.java
new file mode 100644
index 00000000..e0bf47fb
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/UpdateFreelancerExperienceCommand.java
@@ -0,0 +1,61 @@
+package com.workup.users.commands;
+
+import com.workup.shared.commands.users.requests.UpdateFreelancerExperienceRequest;
+import com.workup.shared.commands.users.responses.UpdateFreelancerExperienceResponse;
+import com.workup.shared.enums.HttpStatusCode;
+import com.workup.users.db.Experience;
+import com.workup.users.db.Freelancer;
+import java.util.Optional;
+
+public class UpdateFreelancerExperienceCommand
+ extends UserCommand {
+ @Override
+ public UpdateFreelancerExperienceResponse Run(UpdateFreelancerExperienceRequest request) {
+ Optional freelancerOptional =
+ freelancerRepository.findById(request.getFreelancer_id());
+ if (freelancerOptional.isEmpty())
+ return UpdateFreelancerExperienceResponse.builder()
+ .withStatusCode(HttpStatusCode.NOT_FOUND)
+ .withErrorMessage("Freelancer Doesn't Exist")
+ .build();
+ Freelancer freelancer = freelancerOptional.get();
+ Experience updatedExperience =
+ Experience.builder()
+ .withExperience_description(request.getNew_experience_description())
+ .withCity(request.getNew_city())
+ .withCompany_name(request.getNew_company_name())
+ .withEmployment_end(request.getNew_employment_end())
+ .withEmployment_start(request.getNew_employment_start())
+ .withJob_title(request.getNew_job_title())
+ .build();
+ updateExperience(request.getExperience_id(), updatedExperience);
+ freelancerRepository.save(freelancer);
+ return UpdateFreelancerExperienceResponse.builder().withStatusCode(HttpStatusCode.OK).build();
+ }
+
+ public void updateExperience(String id, Experience updatedExperience) {
+ Optional experienceOptional = experienceRepository.findById(id);
+ if (experienceOptional.isEmpty()) return;
+ Experience existingExperience = experienceOptional.get();
+ if (updatedExperience.getExperience_description() != null) {
+ existingExperience.setExperience_description(updatedExperience.getExperience_description());
+ }
+ if (updatedExperience.getCity() != null) {
+ existingExperience.setCity(updatedExperience.getCity());
+ }
+ if (updatedExperience.getCompany_name() != null) {
+ existingExperience.setCompany_name(updatedExperience.getCompany_name());
+ }
+ if (updatedExperience.getEmployment_end() != null) {
+ existingExperience.setEmployment_end(updatedExperience.getEmployment_end());
+ }
+ if (updatedExperience.getEmployment_start() != null) {
+ existingExperience.setEmployment_start(updatedExperience.getEmployment_start());
+ }
+ if (updatedExperience.getJob_title() != null) {
+ existingExperience.setJob_title(updatedExperience.getJob_title());
+ }
+
+ experienceRepository.save(existingExperience);
+ }
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/UserCommand.java b/services/users/src/main/java/com/workup/users/commands/UserCommand.java
index d338324c..efb85fb9 100644
--- a/services/users/src/main/java/com/workup/users/commands/UserCommand.java
+++ b/services/users/src/main/java/com/workup/users/commands/UserCommand.java
@@ -1,7 +1,9 @@
package com.workup.users.commands;
import com.workup.shared.commands.Command;
+import com.workup.users.repositories.AchievementRepository;
import com.workup.users.repositories.ClientRepository;
+import com.workup.users.repositories.EducationRepository;
import com.workup.users.repositories.ExperienceRepository;
import com.workup.users.repositories.FreelancerRepository;
import lombok.Setter;
@@ -20,6 +22,10 @@ public abstract class UserCommand<
@Setter ExperienceRepository experienceRepository;
+ @Setter EducationRepository educationRepository;
+
+ @Setter AchievementRepository achievementRepository;
+
@Setter ClientRepository clientRepository;
@Autowired GridFsTemplate gridFsTemplate;
diff --git a/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerAchievementsResponse.java b/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerAchievementsResponse.java
new file mode 100644
index 00000000..10ce5eb2
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerAchievementsResponse.java
@@ -0,0 +1,15 @@
+package com.workup.users.commands.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import com.workup.users.db.Achievement;
+import java.util.List;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerAchievementsResponse extends CommandResponse {
+ List achievements;
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerEducationsResponse.java b/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerEducationsResponse.java
new file mode 100644
index 00000000..4b5608b7
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerEducationsResponse.java
@@ -0,0 +1,15 @@
+package com.workup.users.commands.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import com.workup.users.db.Education;
+import java.util.List;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerEducationsResponse extends CommandResponse {
+ List educations;
+}
diff --git a/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerExperiencesResponse.java b/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerExperiencesResponse.java
new file mode 100644
index 00000000..b6930462
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/commands/responses/GetFreelancerExperiencesResponse.java
@@ -0,0 +1,15 @@
+package com.workup.users.commands.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import com.workup.users.db.Experience;
+import java.util.List;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerExperiencesResponse extends CommandResponse {
+ private List experiences;
+}
diff --git a/services/users/src/main/java/com/workup/users/db/Achievement.java b/services/users/src/main/java/com/workup/users/db/Achievement.java
index 50127b43..33cba1da 100644
--- a/services/users/src/main/java/com/workup/users/db/Achievement.java
+++ b/services/users/src/main/java/com/workup/users/db/Achievement.java
@@ -11,7 +11,7 @@
@Builder(setterPrefix = "with")
@Getter
@Setter
-@Document
+@Document(collection = "Achievements")
public class Achievement {
@Id private ObjectId id;
diff --git a/services/users/src/main/java/com/workup/users/db/Education.java b/services/users/src/main/java/com/workup/users/db/Education.java
index 30ef90f6..4558694b 100644
--- a/services/users/src/main/java/com/workup/users/db/Education.java
+++ b/services/users/src/main/java/com/workup/users/db/Education.java
@@ -11,7 +11,7 @@
@Builder(setterPrefix = "with")
@Getter
@Setter
-@Document
+@Document(collection = "Education")
public class Education {
@Id private ObjectId id;
diff --git a/services/users/src/main/java/com/workup/users/db/Experience.java b/services/users/src/main/java/com/workup/users/db/Experience.java
index 6ac383e2..22946108 100644
--- a/services/users/src/main/java/com/workup/users/db/Experience.java
+++ b/services/users/src/main/java/com/workup/users/db/Experience.java
@@ -11,7 +11,7 @@
@Builder(setterPrefix = "with")
@Getter
@Setter
-@Document
+@Document(collection = "Experience")
public class Experience {
@Id private ObjectId id;
diff --git a/services/users/src/main/java/com/workup/users/db/Freelancer.java b/services/users/src/main/java/com/workup/users/db/Freelancer.java
index f599a8d9..ba00ba2c 100644
--- a/services/users/src/main/java/com/workup/users/db/Freelancer.java
+++ b/services/users/src/main/java/com/workup/users/db/Freelancer.java
@@ -14,7 +14,7 @@
@Builder(setterPrefix = "with")
@Getter
@Setter
-@Document
+@Document(collection = "Freelancer")
public class Freelancer {
@Id private ObjectId id;
@Indexed private String email;
diff --git a/services/users/src/main/java/com/workup/users/repositories/AchievementRepository.java b/services/users/src/main/java/com/workup/users/repositories/AchievementRepository.java
new file mode 100644
index 00000000..d6099b45
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/repositories/AchievementRepository.java
@@ -0,0 +1,6 @@
+package com.workup.users.repositories;
+
+import com.workup.users.db.Achievement;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface AchievementRepository extends MongoRepository {}
diff --git a/services/users/src/main/java/com/workup/users/repositories/EducationRepository.java b/services/users/src/main/java/com/workup/users/repositories/EducationRepository.java
new file mode 100644
index 00000000..5321cdc0
--- /dev/null
+++ b/services/users/src/main/java/com/workup/users/repositories/EducationRepository.java
@@ -0,0 +1,6 @@
+package com.workup.users.repositories;
+
+import com.workup.users.db.Education;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface EducationRepository extends MongoRepository {}
diff --git a/shared/.mvn/jvm.config b/shared/.mvn/jvm.config
new file mode 100644
index 00000000..e2a50e08
--- /dev/null
+++ b/shared/.mvn/jvm.config
@@ -0,0 +1 @@
+--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
\ No newline at end of file
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerAchievementRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerAchievementRequest.java
new file mode 100644
index 00000000..7c950fe5
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerAchievementRequest.java
@@ -0,0 +1,18 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import java.util.Date;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerAchievementRequest extends CommandRequest {
+ String freelancer_id;
+ String achievement_name;
+ String awarded_by;
+ String achievement_description;
+ Date award_date;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerEducationRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerEducationRequest.java
new file mode 100644
index 00000000..2bac0981
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerEducationRequest.java
@@ -0,0 +1,22 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import java.util.Date;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerEducationRequest extends CommandRequest {
+ String freelancer_id;
+ String school_name;
+ String degree;
+ Date education_start_date;
+ String city;
+ Date end_date;
+ String major;
+ String education_description;
+ String grade;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerExperienceRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerExperienceRequest.java
new file mode 100644
index 00000000..d6aaa03c
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerExperienceRequest.java
@@ -0,0 +1,20 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import java.util.Date;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerExperienceRequest extends CommandRequest {
+ String freelancerId;
+ String company_name;
+ String job_title;
+ Date employment_start;
+ Date employment_end;
+ String experience_description;
+ String city;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerLanguageRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerLanguageRequest.java
new file mode 100644
index 00000000..bc939d73
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerLanguageRequest.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerLanguageRequest extends CommandRequest {
+ String user_id;
+ String newLanguage;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerSkillRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerSkillRequest.java
new file mode 100644
index 00000000..0116ca7c
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/AddFreelancerSkillRequest.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerSkillRequest extends CommandRequest {
+ String user_id;
+ String newSkill;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerAchievementsRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerAchievementsRequest.java
new file mode 100644
index 00000000..35062ba6
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerAchievementsRequest.java
@@ -0,0 +1,13 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerAchievementsRequest extends CommandRequest {
+ String freelancer_id;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerEducationsRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerEducationsRequest.java
new file mode 100644
index 00000000..3fecb3ea
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerEducationsRequest.java
@@ -0,0 +1,13 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerEducationsRequest extends CommandRequest {
+ private String user_id;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerExperiencesRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerExperiencesRequest.java
new file mode 100644
index 00000000..cda0209f
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerExperiencesRequest.java
@@ -0,0 +1,13 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerExperiencesRequest extends CommandRequest {
+ private String freelancerId;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerLanguagesRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerLanguagesRequest.java
new file mode 100644
index 00000000..a1acf8f8
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerLanguagesRequest.java
@@ -0,0 +1,13 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerLanguagesRequest extends CommandRequest {
+ String user_id;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerSkillsRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerSkillsRequest.java
new file mode 100644
index 00000000..dbc325ae
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/GetFreelancerSkillsRequest.java
@@ -0,0 +1,13 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerSkillsRequest extends CommandRequest {
+ String user_id;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerAchievementRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerAchievementRequest.java
new file mode 100644
index 00000000..266cca34
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerAchievementRequest.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerAchievementRequest extends CommandRequest {
+ String freelancerId;
+ String achievementId;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerEducationRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerEducationRequest.java
new file mode 100644
index 00000000..1c68fa73
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerEducationRequest.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerEducationRequest extends CommandRequest {
+ String freelancer_id;
+ String education_id;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerExperienceRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerExperienceRequest.java
new file mode 100644
index 00000000..1e82f5eb
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerExperienceRequest.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerExperienceRequest extends CommandRequest {
+ String freelancer_id;
+ String experience_id;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerLanguageRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerLanguageRequest.java
new file mode 100644
index 00000000..a2537640
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerLanguageRequest.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerLanguageRequest extends CommandRequest {
+ private String user_id;
+ private String languageToRemove;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerSkillRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerSkillRequest.java
new file mode 100644
index 00000000..3f1cfece
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/RemoveFreelancerSkillRequest.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerSkillRequest extends CommandRequest {
+ String user_id;
+ String skillToRemove;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerAchievementRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerAchievementRequest.java
new file mode 100644
index 00000000..e31a4447
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerAchievementRequest.java
@@ -0,0 +1,19 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import java.util.Date;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class UpdateFreelancerAchievementRequest extends CommandRequest {
+ String freelancer_id;
+ String achievement_id;
+ String new_achievement_name;
+ String new_awarded_by;
+ String new_achievement_description;
+ Date new_award_date;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerEducationRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerEducationRequest.java
new file mode 100644
index 00000000..3140bf08
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerEducationRequest.java
@@ -0,0 +1,23 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import java.util.Date;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class UpdateFreelancerEducationRequest extends CommandRequest {
+ String freelancer_id;
+ String education_id;
+ String new_school_name;
+ String new_degree;
+ Date new_education_start_date;
+ String new_city;
+ Date new_end_date;
+ String new_major;
+ String new_education_description;
+ String new_grade;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerExperienceRequest.java b/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerExperienceRequest.java
new file mode 100644
index 00000000..a19f5862
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/requests/UpdateFreelancerExperienceRequest.java
@@ -0,0 +1,21 @@
+package com.workup.shared.commands.users.requests;
+
+import com.workup.shared.commands.CommandRequest;
+import java.util.Date;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class UpdateFreelancerExperienceRequest extends CommandRequest {
+ String freelancer_id;
+ String experience_id;
+ String new_company_name;
+ String new_job_title;
+ Date new_employment_start;
+ Date new_employment_end;
+ String new_experience_description;
+ String new_city;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerAchievementResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerAchievementResponse.java
new file mode 100644
index 00000000..2ba3370a
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerAchievementResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerAchievementResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerEducationResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerEducationResponse.java
new file mode 100644
index 00000000..398912d2
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerEducationResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerEducationResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerExperienceResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerExperienceResponse.java
new file mode 100644
index 00000000..373a6901
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerExperienceResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerExperienceResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerLanguageResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerLanguageResponse.java
new file mode 100644
index 00000000..29d88c7a
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerLanguageResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerLanguageResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerSkillResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerSkillResponse.java
new file mode 100644
index 00000000..eed450ce
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/AddFreelancerSkillResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class AddFreelancerSkillResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/GetFreelancerLanguagesResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/GetFreelancerLanguagesResponse.java
new file mode 100644
index 00000000..7929ff59
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/GetFreelancerLanguagesResponse.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import java.util.List;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerLanguagesResponse extends CommandResponse {
+ List languages;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/GetFreelancerSkillsResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/GetFreelancerSkillsResponse.java
new file mode 100644
index 00000000..c7f07e94
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/GetFreelancerSkillsResponse.java
@@ -0,0 +1,14 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import java.util.List;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class GetFreelancerSkillsResponse extends CommandResponse {
+ List skills;
+}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerAchievementResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerAchievementResponse.java
new file mode 100644
index 00000000..50cdb78a
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerAchievementResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerAchievementResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerEducationResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerEducationResponse.java
new file mode 100644
index 00000000..e88ae8d0
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerEducationResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerEducationResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerExperienceResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerExperienceResponse.java
new file mode 100644
index 00000000..19ecdc2d
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerExperienceResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerExperienceResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerLanguageResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerLanguageResponse.java
new file mode 100644
index 00000000..3c370160
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerLanguageResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerLanguageResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerSkillResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerSkillResponse.java
new file mode 100644
index 00000000..9abb09ba
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/RemoveFreelancerSkillResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class RemoveFreelancerSkillResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerAchievementResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerAchievementResponse.java
new file mode 100644
index 00000000..08158dda
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerAchievementResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class UpdateFreelancerAchievementResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerEducationResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerEducationResponse.java
new file mode 100644
index 00000000..abcf1dc4
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerEducationResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class UpdateFreelancerEducationResponse extends CommandResponse {}
diff --git a/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerExperienceResponse.java b/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerExperienceResponse.java
new file mode 100644
index 00000000..f68dfe19
--- /dev/null
+++ b/shared/src/main/java/com/workup/shared/commands/users/responses/UpdateFreelancerExperienceResponse.java
@@ -0,0 +1,11 @@
+package com.workup.shared.commands.users.responses;
+
+import com.workup.shared.commands.CommandResponse;
+import lombok.Getter;
+import lombok.experimental.SuperBuilder;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@SuperBuilder(setterPrefix = "with")
+@Jacksonized
+public class UpdateFreelancerExperienceResponse extends CommandResponse {}