UpdateJobFieldCommand.java
package com.wilzwert.myjobs.core.domain.model.job.command;
import com.wilzwert.myjobs.core.domain.model.job.JobId;
import com.wilzwert.myjobs.core.domain.model.user.UserId;
import java.util.Optional;
/**
* @author Wilhelm Zwertvaegher
* Date:05/06/2025
* Time:08:42
* A command to update a specific field in a Job
*
*/
public record UpdateJobFieldCommand(JobId jobId, UserId userId, Field field, String value) implements UpdateJobCommand {
public enum Field {
URL,
TITLE,
COMPANY,
DESCRIPTION,
PROFILE,
COMMENT,
SALARY;
public static Optional<Field> fromString(String input) {
try {
return Optional.of(Field.valueOf(input.toUpperCase()));
} catch (IllegalArgumentException | NullPointerException e) {
return Optional.empty();
}
}
}
public static class Builder {
private JobId jobId;
private UserId userId;
private Field field;
private String value;
public Builder() {}
public Builder(UpdateJobFieldCommand command) {
this.jobId = command.jobId();
this.userId = command.userId();
this.field = command.field();
this.value = command.value();
}
public Builder jobId(JobId jobId) {
this.jobId = jobId;
return this;
}
public Builder userId(UserId userId) {
this.userId = userId;
return this;
}
public Builder field(Field field) {
this.field = field;
return this;
}
public Builder value(String value) {
this.value = value;
return this;
}
public UpdateJobFieldCommand build() {
return new UpdateJobFieldCommand(jobId, userId, field, value);
}
}
}