Skip to content

Commit 8948a69

Browse files
authored
Tallennetaan useat Nekku asiakastyypit tietokantaan (#6973)
1 parent c91be2e commit 8948a69

File tree

4 files changed

+214
-12
lines changed

4 files changed

+214
-12
lines changed

service/src/integrationTest/kotlin/fi/espoo/evaka/nekku/NekkuIntegrationTest.kt

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,214 @@ class NekkuIntegrationTest : FullApplicationTest(resetDbBeforeEach = true) {
8989
}
9090
}
9191

92+
@Test
93+
fun `Nekku customer sync with multiple customer types adds every type to database`() {
94+
val client =
95+
TestNekkuClient(
96+
customers =
97+
listOf(
98+
NekkuApiCustomer(
99+
"2501K6089",
100+
"Ahvenojan päiväkoti",
101+
"Varhaiskasvatus",
102+
listOf(
103+
CustomerApiType(
104+
listOf(
105+
NekkuCustomerApiWeekday.MONDAY,
106+
NekkuCustomerApiWeekday.TUESDAY,
107+
NekkuCustomerApiWeekday.WEDNESDAY,
108+
NekkuCustomerApiWeekday.THURSDAY,
109+
NekkuCustomerApiWeekday.FRIDAY,
110+
),
111+
"100-lasta",
112+
),
113+
CustomerApiType(
114+
listOf(
115+
NekkuCustomerApiWeekday.SATURDAY,
116+
NekkuCustomerApiWeekday.SUNDAY,
117+
NekkuCustomerApiWeekday.WEEKDAYHOLIDAY,
118+
),
119+
"Palvelu-Ovelle-viikonloppu",
120+
),
121+
),
122+
),
123+
NekkuApiCustomer(
124+
"2501K0000",
125+
"Ylikylän päiväkoti",
126+
"Varhaiskasvatus",
127+
listOf(
128+
CustomerApiType(
129+
listOf(
130+
NekkuCustomerApiWeekday.MONDAY,
131+
NekkuCustomerApiWeekday.TUESDAY,
132+
NekkuCustomerApiWeekday.WEDNESDAY,
133+
NekkuCustomerApiWeekday.THURSDAY,
134+
NekkuCustomerApiWeekday.FRIDAY,
135+
),
136+
"100-lasta",
137+
),
138+
CustomerApiType(
139+
listOf(
140+
NekkuCustomerApiWeekday.SATURDAY,
141+
NekkuCustomerApiWeekday.SUNDAY,
142+
NekkuCustomerApiWeekday.WEEKDAYHOLIDAY,
143+
),
144+
"Palvelu-Ovelle-viikonloppu",
145+
),
146+
),
147+
),
148+
)
149+
)
150+
fetchAndUpdateNekkuCustomers(client, db, asyncJobRunner, now)
151+
db.transaction { tx ->
152+
val customers = tx.getNekkuCustomers()
153+
assertEquals(
154+
listOf(
155+
NekkuCustomer(
156+
number = "2501K0000",
157+
name = "Ylikylän päiväkoti",
158+
group = "Varhaiskasvatus",
159+
listOf(
160+
CustomerType(
161+
listOf(
162+
NekkuCustomerWeekday.MONDAY,
163+
NekkuCustomerWeekday.TUESDAY,
164+
NekkuCustomerWeekday.WEDNESDAY,
165+
NekkuCustomerWeekday.THURSDAY,
166+
NekkuCustomerWeekday.FRIDAY,
167+
),
168+
"100-lasta",
169+
),
170+
CustomerType(
171+
listOf(
172+
NekkuCustomerWeekday.SATURDAY,
173+
NekkuCustomerWeekday.SUNDAY,
174+
NekkuCustomerWeekday.WEEKDAYHOLIDAY,
175+
),
176+
"Palvelu-Ovelle-viikonloppu",
177+
),
178+
),
179+
),
180+
NekkuCustomer(
181+
number = "2501K6089",
182+
name = "Ahvenojan päiväkoti",
183+
group = "Varhaiskasvatus",
184+
listOf(
185+
CustomerType(
186+
listOf(
187+
NekkuCustomerWeekday.MONDAY,
188+
NekkuCustomerWeekday.TUESDAY,
189+
NekkuCustomerWeekday.WEDNESDAY,
190+
NekkuCustomerWeekday.THURSDAY,
191+
NekkuCustomerWeekday.FRIDAY,
192+
),
193+
"100-lasta",
194+
),
195+
CustomerType(
196+
listOf(
197+
NekkuCustomerWeekday.SATURDAY,
198+
NekkuCustomerWeekday.SUNDAY,
199+
NekkuCustomerWeekday.WEEKDAYHOLIDAY,
200+
),
201+
"Palvelu-Ovelle-viikonloppu",
202+
),
203+
),
204+
),
205+
),
206+
customers,
207+
)
208+
}
209+
}
210+
211+
@Test
212+
fun `Nekku customer sync with different customer types and same weekdays does sync`() {
213+
val client =
214+
TestNekkuClient(
215+
customers =
216+
listOf(
217+
NekkuApiCustomer(
218+
"2501K6089",
219+
"Ahvenojan päiväkoti",
220+
"Varhaiskasvatus",
221+
listOf(
222+
CustomerApiType(
223+
listOf(
224+
NekkuCustomerApiWeekday.MONDAY,
225+
NekkuCustomerApiWeekday.TUESDAY,
226+
NekkuCustomerApiWeekday.WEDNESDAY,
227+
NekkuCustomerApiWeekday.THURSDAY,
228+
NekkuCustomerApiWeekday.FRIDAY,
229+
),
230+
"100-lasta",
231+
),
232+
CustomerApiType(
233+
listOf(
234+
NekkuCustomerApiWeekday.MONDAY,
235+
NekkuCustomerApiWeekday.TUESDAY,
236+
NekkuCustomerApiWeekday.WEDNESDAY,
237+
NekkuCustomerApiWeekday.THURSDAY,
238+
NekkuCustomerApiWeekday.FRIDAY,
239+
),
240+
"palvelu-ovelle-arki",
241+
),
242+
CustomerApiType(
243+
listOf(
244+
NekkuCustomerApiWeekday.SATURDAY,
245+
NekkuCustomerApiWeekday.SUNDAY,
246+
NekkuCustomerApiWeekday.WEEKDAYHOLIDAY,
247+
),
248+
"Palvelu-Ovelle-viikonloppu",
249+
),
250+
),
251+
)
252+
)
253+
)
254+
fetchAndUpdateNekkuCustomers(client, db, asyncJobRunner, now)
255+
db.transaction { tx ->
256+
val customers = tx.getNekkuCustomers()
257+
assertEquals(
258+
listOf(
259+
NekkuCustomer(
260+
number = "2501K6089",
261+
name = "Ahvenojan päiväkoti",
262+
group = "Varhaiskasvatus",
263+
listOf(
264+
CustomerType(
265+
listOf(
266+
NekkuCustomerWeekday.MONDAY,
267+
NekkuCustomerWeekday.TUESDAY,
268+
NekkuCustomerWeekday.WEDNESDAY,
269+
NekkuCustomerWeekday.THURSDAY,
270+
NekkuCustomerWeekday.FRIDAY,
271+
),
272+
"100-lasta",
273+
),
274+
CustomerType(
275+
listOf(
276+
NekkuCustomerWeekday.MONDAY,
277+
NekkuCustomerWeekday.TUESDAY,
278+
NekkuCustomerWeekday.WEDNESDAY,
279+
NekkuCustomerWeekday.THURSDAY,
280+
NekkuCustomerWeekday.FRIDAY,
281+
),
282+
"palvelu-ovelle-arki",
283+
),
284+
CustomerType(
285+
listOf(
286+
NekkuCustomerWeekday.SATURDAY,
287+
NekkuCustomerWeekday.SUNDAY,
288+
NekkuCustomerWeekday.WEEKDAYHOLIDAY,
289+
),
290+
"Palvelu-Ovelle-viikonloppu",
291+
),
292+
),
293+
)
294+
),
295+
customers,
296+
)
297+
}
298+
}
299+
92300
@Test
93301
fun `Nekku customer lists only 'Varhaiskasvatus'-data`() {
94302
val client =

service/src/main/kotlin/fi/espoo/evaka/nekku/NekkuQueries.kt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ fun fetchAndUpdateNekkuCustomers(
4343
}
4444
val deletedCustomerCount = tx.setCustomerNumbers(customersFromNekku)
4545

46-
tx.setNekkuCustomerTypes(customersFromNekku.map { it.number to it.customerType })
46+
tx.setNekkuCustomerTypes(customersFromNekku)
4747

4848
logger.info {
4949
"Deleted: $deletedCustomerCount Nekku customer numbers, inserted ${customersFromNekku.size}"
@@ -120,9 +120,9 @@ WHERE
120120
return deletedCustomerCount
121121
}
122122

123-
fun Database.Transaction.setNekkuCustomerTypes(
124-
nekkuCustomerTypes: List<Pair<String, List<CustomerType>>>
125-
) {
123+
fun Database.Transaction.setNekkuCustomerTypes(customerNumbers: List<NekkuCustomer>) {
124+
val nekkuCustomerTypes = customerNumbers.map { it.number to it.customerType }
125+
126126
val newNekkuCustomerNumbers = nekkuCustomerTypes.flatMap { it.second }.map { it.type }
127127
val deletedNekkuCustomerTypesCount = execute {
128128
sql(
@@ -147,14 +147,6 @@ INSERT INTO nekku_customer_type (
147147
${bind { (_, field) -> field.type }},
148148
${bind { (_, field) -> field.weekdays }}
149149
)
150-
ON CONFLICT (customer_number) DO
151-
UPDATE SET
152-
type = excluded.type,
153-
weekdays = excluded.weekdays
154-
WHERE
155-
nekku_customer_type.type <> excluded.type OR
156-
nekku_customer_type.weekdays <> excluded.weekdays;
157-
158150
"""
159151
)
160152
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE nekku_customer_type DROP CONSTRAINT IF EXISTS uniq$unique_customer_number;

service/src/main/resources/migrations.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,3 +528,4 @@ V529__citizen_system_notification_i18n.sql
528528
V530__child_document_decision_number.sql
529529
V531__nekku_order_report.sql
530530
V532__absence_application.sql
531+
V533__remove_nekku_customer_number_constraint.sql

0 commit comments

Comments
 (0)