Commit 6f3a447
authored
feat: 확장된 모집 공고 기준으로 지원 프로필 저장 (#543)
* Route profile saves through recruit-specific apply records
Profile saving now uses recruitId as the authoritative recruitment context so one member can hold separate application records for concurrent active notices without the legacy active-apply lookup collapsing them together.
Constraint: Keep the existing /apply/profile path and add only the recruitId query parameter for this slice
Rejected: Continue resolving recruit by request jobFamily | it cannot distinguish concurrent notices with the same or different 모집 유형
Confidence: high
Scope-risk: moderate
Directive: Do not remove the jobFamily mismatch validation until profile payloads stop carrying jobFamily
Tested: ./gradlew test --tests org.ject.support.domain.apply.controller.ApplyControllerTest --tests org.ject.support.domain.apply.service.ApplyServiceTest --tests org.ject.support.domain.apply.repository.ApplyRepositoryTest -x jacocoTestCoverageVerification --rerun-tasks
Not-tested: Full test suite; partial test runs fail Jacoco bundle coverage when coverage verification is enabled
Related: #542
* Preserve legacy profile entry while preferring recruit context
Review feedback showed that profile save can still be reached without recruitId through non-standard frontend entry points. The endpoint now accepts a missing recruitId and falls back to the existing jobFamily-based recruit lookup, while recruitId flows keep the recruit record as the source of member jobFamily.
Constraint: Keep /apply/profile compatible for frontend transition
Rejected: Resolve missing recruitId by memberId only | a member can have multiple active applications, and first-time profile saves may not have any Apply row yet
Rejected: Remove duplicate insert handling | optimistic locking covers existing-row updates, not concurrent first inserts before the Apply row exists
Confidence: high
Scope-risk: narrow
Tested: ./gradlew test --tests org.ject.support.domain.apply.controller.ApplyControllerTest --tests org.ject.support.domain.apply.service.ApplyServiceTest --tests org.ject.support.domain.apply.repository.ApplyRepositoryTest -x jacocoTestCoverageVerification --rerun-tasks
Not-tested: Full test suite
Related: #542
* Clarify recruit fallback during profile save
Review feedback showed the recruit lookup path looked like an unused jobFamily parameter and the repository existence check used an overly long derived method. Move the fallback decision to the call site and use a JPQL exists query to preserve the same behavior with clearer intent.
Constraint: Keep existing /apply/profile clients working when recruitId is absent during frontend transition
Rejected: Require recruitId immediately | would break current profile entry paths
Rejected: Throw on duplicate apply creation | duplicate insert race means the desired apply already exists, so profile save should remain idempotent
Confidence: high
Scope-risk: narrow
Tested: ./gradlew test --tests org.ject.support.domain.apply.controller.ApplyControllerTest --tests org.ject.support.domain.apply.service.ApplyServiceTest --tests org.ject.support.domain.apply.repository.ApplyRepositoryTest -x jacocoTestCoverageVerification --rerun-tasks
* Require recruit context for profile saves
Expanded recruitment means jobFamily no longer identifies a single active notice. Profile save now requires recruitId and resolves the recruitment only from that identifier, leaving request jobFamily as payload compatibility rather than lookup context.
Constraint: Keep the existing /apply/profile URL while requiring the recruitId query parameter
Rejected: Fallback to jobFamily lookup | concurrent SEMESTER/MAKERS/SUPPORTERS notices can share the same job family
Confidence: high
Scope-risk: narrow
Tested: ./gradlew test --tests org.ject.support.domain.apply.controller.ApplyControllerTest --tests org.ject.support.domain.apply.service.ApplyServiceTest --tests org.ject.support.domain.apply.repository.ApplyRepositoryTest -x jacocoTestCoverageVerification --rerun-tasks1 parent d87d55d commit 6f3a447
8 files changed
Lines changed: 245 additions & 19 deletions
File tree
- src
- main/java/org/ject/support/domain/apply
- controller
- repository
- service
- test/java/org/ject/support/domain/apply
- controller
- repository
- service
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
| 55 | + | |
56 | 56 | | |
57 | 57 | | |
| 58 | + | |
58 | 59 | | |
59 | 60 | | |
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
| 71 | + | |
71 | 72 | | |
72 | 73 | | |
73 | | - | |
| 74 | + | |
74 | 75 | | |
75 | 76 | | |
Lines changed: 11 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
12 | | - | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
32 | 42 | | |
33 | 43 | | |
34 | 44 | | |
| |||
Lines changed: 16 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
| |||
192 | 193 | | |
193 | 194 | | |
194 | 195 | | |
195 | | - | |
| 196 | + | |
196 | 197 | | |
197 | 198 | | |
| 199 | + | |
198 | 200 | | |
199 | | - | |
| 201 | + | |
200 | 202 | | |
201 | 203 | | |
202 | 204 | | |
203 | 205 | | |
204 | 206 | | |
205 | | - | |
| 207 | + | |
206 | 208 | | |
207 | 209 | | |
208 | 210 | | |
| |||
212 | 214 | | |
213 | 215 | | |
214 | 216 | | |
215 | | - | |
216 | | - | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
217 | 221 | | |
218 | | - | |
219 | 222 | | |
220 | 223 | | |
221 | 224 | | |
222 | | - | |
| 225 | + | |
| 226 | + | |
223 | 227 | | |
224 | 228 | | |
225 | 229 | | |
| |||
238 | 242 | | |
239 | 243 | | |
240 | 244 | | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
241 | 250 | | |
242 | 251 | | |
243 | 252 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
| 29 | + | |
30 | 30 | | |
Lines changed: 118 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
Lines changed: 23 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| |||
106 | 107 | | |
107 | 108 | | |
108 | 109 | | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
109 | 131 | | |
110 | 132 | | |
111 | 133 | | |
| |||
154 | 176 | | |
155 | 177 | | |
156 | 178 | | |
157 | | - | |
| 179 | + | |
0 commit comments