Skip to content
Merged
18 changes: 15 additions & 3 deletions src/main/java/com/fowoco/server/worker/api/WorkerController.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,20 @@ public WorkerController(
public WorkerPageResponse list(
@Parameter(description = "근무 상태 필터") @RequestParam(required = false) WorkerStatus status,
@Parameter(description = "선호 언어 필터") @RequestParam(required = false) String language,
@Parameter(description = "체류 만료일 이전 필터") @RequestParam(required = false) LocalDate expiryBefore,
@Parameter(description = "체류자격 만료일 이전 필터") @RequestParam(required = false) LocalDate stayExpiryBefore,
@Parameter(description = "근로계약 종료일 이전 필터") @RequestParam(required = false) LocalDate contractEndBefore,
@Parameter(description = "고용허가 기준 종료일 이전 필터") @RequestParam(required = false) LocalDate employmentPermitEndBefore,
@Parameter(description = "취업활동기간 종료일 이전 필터") @RequestParam(required = false) LocalDate employmentActivityEndBefore,
@Parameter(description = "페이지 번호 (0부터 시작)")
@RequestParam(defaultValue = "0") @Min(0) int page,
@Parameter(description = "페이지당 항목 수 (1~100)")
@RequestParam(defaultValue = "20") @Min(1) @Max(100) int size
) {
ActorContext actor = actorContextProvider.requireCurrentActor();
WorkerSearchQuery query = new WorkerSearchQuery(status, language, expiryBefore, page, size);
WorkerSearchQuery query = new WorkerSearchQuery(
status, language, stayExpiryBefore, contractEndBefore,
employmentPermitEndBefore, employmentActivityEndBefore, page, size
);
WorkerPageResult result = workerService.findPage(actor, query);
List<WorkerResponse> items = result.items().stream().map(WorkerResponse::from).toList();
return new WorkerPageResponse(items, result.page(), result.size(), result.totalElements());
Expand Down Expand Up @@ -118,9 +124,12 @@ public ResponseEntity<WorkerResponse> register(@Valid @RequestBody WorkerCreateR
request.getDisplayName(),
request.getNationalityCode(),
request.getPreferredLanguage(),
request.getVisaType(),
request.getStayExpiryDate(),
request.getContractStartDate(),
request.getContractEndDate()
request.getContractEndDate(),
request.getEmploymentPermitEndDate(),
request.getEmploymentActivityEndDate()
);
Worker worker = workerService.register(command, actor);
return ResponseEntity.status(HttpStatus.CREATED).body(WorkerResponse.from(worker));
Expand Down Expand Up @@ -201,9 +210,12 @@ public WorkerResponse patch(
request.getNationalityCode(),
request.getPreferredLanguage(),
request.getWorkStatus(),
request.getVisaType(),
request.getStayExpiryDate(),
request.getContractStartDate(),
request.getContractEndDate(),
request.getEmploymentPermitEndDate(),
request.getEmploymentActivityEndDate(),
request.getExpectedVersion()
);
Worker worker = workerService.patch(command, actor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,18 @@ public final class WorkerCreateRequest {
@Size(max = 20, message = "선호 언어는 20자 이하여야 합니다.")
private final String preferredLanguage;

@Schema(
name = "visa_type",
description = "체류자격 종류",
example = "E-9",
maxLength = 20
)
@Size(max = 20, message = "체류자격 종류는 20자 이하여야 합니다.")
private final String visaType;

@Schema(
name = "stay_expiry_date",
description = "체류 만료일",
description = "체류자격이 만료되는 날",
example = "2027-03-01",
format = "date"
)
Expand All @@ -61,27 +70,49 @@ public final class WorkerCreateRequest {

@Schema(
name = "contract_end_date",
description = "계약 종료일. contract_start_date보다 빠를 수 없습니다.",
description = "현재 근로계약이 끝나는 날. contract_start_date보다 빠를 수 없습니다.",
example = "2027-12-31",
format = "date"
)
private final LocalDate contractEndDate;

@Schema(
name = "employment_permit_end_date",
description = "사업장의 고용허가 관련 기준 종료일",
example = "2028-03-01",
format = "date"
)
private final LocalDate employmentPermitEndDate;

@Schema(
name = "employment_activity_end_date",
description = "E-9 근로자가 취업활동할 수 있는 기간의 종료일",
example = "2028-03-01",
format = "date"
)
private final LocalDate employmentActivityEndDate;

@JsonCreator
public WorkerCreateRequest(
@JsonProperty("display_name") String displayName,
@JsonProperty("nationality_code") String nationalityCode,
@JsonProperty("preferred_language") String preferredLanguage,
@JsonProperty("visa_type") String visaType,
@JsonProperty("stay_expiry_date") LocalDate stayExpiryDate,
@JsonProperty("contract_start_date") LocalDate contractStartDate,
@JsonProperty("contract_end_date") LocalDate contractEndDate
@JsonProperty("contract_end_date") LocalDate contractEndDate,
@JsonProperty("employment_permit_end_date") LocalDate employmentPermitEndDate,
@JsonProperty("employment_activity_end_date") LocalDate employmentActivityEndDate
) {
this.displayName = displayName;
this.nationalityCode = nationalityCode;
this.preferredLanguage = preferredLanguage;
this.visaType = visaType;
this.stayExpiryDate = stayExpiryDate;
this.contractStartDate = contractStartDate;
this.contractEndDate = contractEndDate;
this.employmentPermitEndDate = employmentPermitEndDate;
this.employmentActivityEndDate = employmentActivityEndDate;
}

@AssertTrue(message = "contract_end_date는 contract_start_date보다 빠를 수 없습니다.")
Expand All @@ -105,6 +136,10 @@ public String getPreferredLanguage() {
return preferredLanguage;
}

public String getVisaType() {
return visaType;
}

public LocalDate getStayExpiryDate() {
return stayExpiryDate;
}
Expand All @@ -116,4 +151,12 @@ public LocalDate getContractStartDate() {
public LocalDate getContractEndDate() {
return contractEndDate;
}

public LocalDate getEmploymentPermitEndDate() {
return employmentPermitEndDate;
}

public LocalDate getEmploymentActivityEndDate() {
return employmentActivityEndDate;
}
}
47 changes: 45 additions & 2 deletions src/main/java/com/fowoco/server/worker/api/WorkerPatchRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,18 @@ public final class WorkerPatchRequest {
)
private final WorkerStatus workStatus;

@Schema(
name = "visa_type",
description = "체류자격 종류. 생략 시 변경하지 않습니다.",
example = "E-9",
maxLength = 20
)
@Size(max = 20, message = "체류자격 종류는 20자 이하여야 합니다.")
private final String visaType;

@Schema(
name = "stay_expiry_date",
description = "체류 만료일. 생략 시 변경하지 않습니다.",
description = "체류자격이 만료되는 날. 생략 시 변경하지 않습니다.",
example = "2027-03-01",
format = "date"
)
Expand All @@ -66,12 +75,28 @@ public final class WorkerPatchRequest {

@Schema(
name = "contract_end_date",
description = "계약 종료일. 생략 시 변경하지 않습니다.",
description = "현재 근로계약이 끝나는 날. 생략 시 변경하지 않습니다.",
example = "2027-12-31",
format = "date"
)
private final LocalDate contractEndDate;

@Schema(
name = "employment_permit_end_date",
description = "사업장의 고용허가 관련 기준 종료일. 생략 시 변경하지 않습니다.",
example = "2028-03-01",
format = "date"
)
private final LocalDate employmentPermitEndDate;

@Schema(
name = "employment_activity_end_date",
description = "E-9 근로자가 취업활동할 수 있는 기간의 종료일. 생략 시 변경하지 않습니다.",
example = "2028-03-01",
format = "date"
)
private final LocalDate employmentActivityEndDate;

@Schema(
name = "expected_version",
description = "낙관적 잠금 버전. 마지막으로 조회한 WorkerResponse.version을 그대로 보내야 합니다.",
Expand All @@ -88,18 +113,24 @@ public WorkerPatchRequest(
@JsonProperty("nationality_code") String nationalityCode,
@JsonProperty("preferred_language") String preferredLanguage,
@JsonProperty("work_status") WorkerStatus workStatus,
@JsonProperty("visa_type") String visaType,
@JsonProperty("stay_expiry_date") LocalDate stayExpiryDate,
@JsonProperty("contract_start_date") LocalDate contractStartDate,
@JsonProperty("contract_end_date") LocalDate contractEndDate,
@JsonProperty("employment_permit_end_date") LocalDate employmentPermitEndDate,
@JsonProperty("employment_activity_end_date") LocalDate employmentActivityEndDate,
@JsonProperty("expected_version") Long expectedVersion
) {
this.displayName = displayName;
this.nationalityCode = nationalityCode;
this.preferredLanguage = preferredLanguage;
this.workStatus = workStatus;
this.visaType = visaType;
this.stayExpiryDate = stayExpiryDate;
this.contractStartDate = contractStartDate;
this.contractEndDate = contractEndDate;
this.employmentPermitEndDate = employmentPermitEndDate;
this.employmentActivityEndDate = employmentActivityEndDate;
this.expectedVersion = expectedVersion;
}

Expand Down Expand Up @@ -134,6 +165,10 @@ public WorkerStatus getWorkStatus() {
return workStatus;
}

public String getVisaType() {
return visaType;
}

public LocalDate getStayExpiryDate() {
return stayExpiryDate;
}
Expand All @@ -146,6 +181,14 @@ public LocalDate getContractEndDate() {
return contractEndDate;
}

public LocalDate getEmploymentPermitEndDate() {
return employmentPermitEndDate;
}

public LocalDate getEmploymentActivityEndDate() {
return employmentActivityEndDate;
}

public Long getExpectedVersion() {
return expectedVersion;
}
Expand Down
Loading
Loading