feat: structured salary fields (min/max/currency/period)
Adds SalaryMin/SalaryMax/SalaryCurrency/SalaryPeriod alongside the existing free-text Salary field (kept for back-compat and display). - JobApplication model + idempotent column bridging for SQLite and MySQL - Create/Update DTOs with NormalizeSalary (clamps negatives, swaps inverted min/max, uppercases currency, whitelists period) - JobApplicationDto exposes the fields; CSV export gains 4 columns - UI: add/edit dialogs get min/max/currency/period inputs; job table renders a formatted range via shared salary.ts formatter (falls back to free-text when structured values are absent) - EN/NB translations; backend + full frontend suites green Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -58,6 +58,10 @@ namespace JobTrackerApi.Controllers
|
||||
"DateApplied",
|
||||
"Location",
|
||||
"Salary",
|
||||
"SalaryMin",
|
||||
"SalaryMax",
|
||||
"SalaryCurrency",
|
||||
"SalaryPeriod",
|
||||
"NextAction",
|
||||
"FollowUpAt",
|
||||
"JobUrl",
|
||||
@@ -76,6 +80,10 @@ namespace JobTrackerApi.Controllers
|
||||
Esc(j.DateApplied.ToString("o")),
|
||||
Esc(j.Location),
|
||||
Esc(j.Salary),
|
||||
Esc(j.SalaryMin?.ToString(System.Globalization.CultureInfo.InvariantCulture)),
|
||||
Esc(j.SalaryMax?.ToString(System.Globalization.CultureInfo.InvariantCulture)),
|
||||
Esc(j.SalaryCurrency),
|
||||
Esc(j.SalaryPeriod),
|
||||
Esc(j.NextAction),
|
||||
Esc(j.FollowUpAt?.ToString("o")),
|
||||
Esc(j.JobUrl),
|
||||
|
||||
Reference in New Issue
Block a user