|
15 | 15 | :secondary_skillset ["bills-questions"]}])
|
16 | 16 | ;; -- end of jobs and agents definition --
|
17 | 17 |
|
| 18 | +;; -- sorting by urgency -- |
18 | 19 | (defn sorted-jobs
|
19 | 20 | [jobs]
|
20 | 21 | (sort-by (complement :urgent) jobs))
|
21 | 22 |
|
22 | 23 | (sorted-jobs jobs)
|
| 24 | +;; -- end of sorting by urgency -- |
23 | 25 |
|
24 |
| -;; filtering by skillsets |
25 |
| - |
| 26 | +;; -- filtering by skillsets -- |
26 | 27 | (def first-job (first jobs))
|
27 | 28 | (def second-job (second jobs))
|
28 | 29 |
|
|
35 | 36 | (defn filter-by-skillset
|
36 | 37 | [current-job agents]
|
37 | 38 | (filter #(by-skillset current-job %) agents))
|
| 39 | +;; -- end of filtering by skillsets -- |
38 | 40 |
|
39 | 41 | ;; -- examples of function use --
|
40 | 42 | (filter-by-skillset first-job agents)
|
41 | 43 | (filter-by-skillset second-job agents)
|
42 | 44 | (filter-by-skillset second-job (conj agents {:id "123" :name "Mr. Nothing" :primary_skillset ["nothing-other"] :secondary_skillset ["nothing"]}))
|
43 | 45 | ;; -- end of examples of function use --
|
| 46 | + |
| 47 | +;; -- sorting by job type -- |
| 48 | +(defn find-agent-by-id |
| 49 | + [id] |
| 50 | + (first |
| 51 | + (filter |
| 52 | + (fn [agent] (= id (:id agent))) |
| 53 | + agents))) |
| 54 | + |
| 55 | +(defn agent-has-job-type-as-skillset? |
| 56 | + [job-type agent] |
| 57 | + (if (some #{job-type} (:primary_skillset agent)) |
| 58 | + 0 |
| 59 | + 1)) |
| 60 | + |
| 61 | +(defn has-skillset-and-id-pair |
| 62 | + [job-type agent] |
| 63 | + [(agent-has-job-type-as-skillset? job-type agent) |
| 64 | + (:id agent)]) |
| 65 | + |
| 66 | +(defn build-agent-by-id |
| 67 | + [agent-id] |
| 68 | + {:id agent-id |
| 69 | + :name (:name (find-agent-by-id agent-id)) |
| 70 | + :primary_skillset (:primary_skillset (find-agent-by-id agent-id)) |
| 71 | + :secondary_skillset (:secondary_skillset (find-agent-by-id agent-id))}) |
| 72 | + |
| 73 | +(defn rebuild-agent |
| 74 | + [agent] |
| 75 | + (let [agent-id (second agent)] |
| 76 | + (build-agent-by-id agent-id))) |
| 77 | + |
| 78 | +(->> agents |
| 79 | + (map (partial has-skillset-and-id-pair (:type second-job))) |
| 80 | + (sort-by first) |
| 81 | + (map rebuild-agent)) |
0 commit comments