Skip to content

Commit

Permalink
1571: fixed issues
Browse files Browse the repository at this point in the history
  • Loading branch information
f1sh1918 committed Sep 23, 2024
1 parent 63a751f commit 1246274
Show file tree
Hide file tree
Showing 12 changed files with 37 additions and 52 deletions.
12 changes: 3 additions & 9 deletions administration/src/bp-modules/stores/StoresCSVInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,21 +43,15 @@ const lineToStoreEntry = (line: string[], headers: string[], fields: StoreFieldC

const getStoreDuplicates = (stores: AcceptingStoreEntry[]): number[][] => {
return Object.values(
stores.reduce((acc, entry, index) => {
stores.reduce((acc: Record<string, number[]>, entry, index) => {
const { data } = entry
const groupKey = JSON.stringify([
data['name'],
data['street'],
data['houseNumber'],
data['postalCode'],
data['location'],
])
const groupKey = JSON.stringify([data.name, data.street, data.houseNumber, data.postalCode, data.location])
const entryNumber = index + 1
if (acc[groupKey] === undefined) {
return { ...acc, [groupKey]: [entryNumber] }
}
return { ...acc, [groupKey]: [...acc[groupKey], entryNumber] }
}, {} as { [key: string]: number[] })
}, {})
).filter(entryNumber => entryNumber.length > 1)
}

Expand Down
4 changes: 2 additions & 2 deletions administration/src/bp-modules/stores/StoresImportAlert.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ const StoresImportAlert = ({ dryRun, setDryRun, storesCount }: StoreImportAlertP
<>
{dryRun ? (
<span data-testid='dry-run-alert'>
<b>Testlauf:</b> In diesem Testlauf wird nur simuliert, wie viele Stores geändert oder gelöscht werden würden.
Es werden keine Daten in die Datenbank geschrieben.
<b>Testlauf:</b> In diesem Testlauf wird nur simuliert, wie viele Akzeptanzpartner geändert oder gelöscht
werden würden. Es werden noch keine Änderungen an der Datenbank vorgenommen.
</span>
) : (
<>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ const StoresImportDuplicates = ({ entries }: StoresImportDuplicatesProps): React
return (
<Container>
Die CSV enthält doppelte Einträge:
{entries.map((entry, index) => (
<span key={index}>Eintrag {entry.join(', ')} sind identisch.</span>
))}
{entries.map(entry => {
const entries = entry.join(', ')
return <span key={entries}>Die Einträge {entries} sind identisch.</span>
})}
Bitte löschen Sie die doppelten Einträge.
</Container>
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const wrapper = ({ children }: { children: ReactElement }) => <ProjectConfigProv
const setDryRun = jest.fn()
describe('StoreImportAlert', () => {
it('should show the correct alert information for dry run', () => {
const { getByTestId, queryByTestId } = render(
const { getByTestId, queryByTestId, getByText } = render(
<StoresImportAlert dryRun setDryRun={setDryRun} storesCount={100} />,
{
wrapper,
Expand All @@ -18,8 +18,14 @@ describe('StoreImportAlert', () => {
const infoSpanElement = getByTestId('dry-run-alert')
expect(infoSpanElement).toBeTruthy()
expect(infoSpanElement.textContent).toBe(
'Testlauf: In diesem Testlauf wird nur simuliert, wie viele Stores geändert oder gelöscht werden würden. Es werden keine Daten in die Datenbank geschrieben.'
'Testlauf: In diesem Testlauf wird nur simuliert, wie viele Akzeptanzpartner geändert oder gelöscht werden würden. Es werden noch keine Änderungen an der Datenbank vorgenommen.'
)
expect(getByText('Testlauf:')).toBeTruthy()
expect(
getByText(
'In diesem Testlauf wird nur simuliert, wie viele Akzeptanzpartner geändert oder gelöscht werden würden. Es werden noch keine Änderungen an der Datenbank vorgenommen.'
)
).toBeTruthy()
const durationSpanElement = queryByTestId('duration-alert')
expect(durationSpanElement).toBeFalsy()
})
Expand Down
4 changes: 0 additions & 4 deletions administration/src/errors/DefaultErrorMap.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@ const defaultErrorMap = (extensions?: ErrorExtensions): GraphQLErrorMessage => {

if (!extensions || !extensions['code']) return defaultError
switch (extensions['code']) {
case GraphQlExceptionCode.DatabaseIo:
return {
title: 'Es ist unbekannter Datenbankfehler aufgetreten.',
}
case GraphQlExceptionCode.EmailAlreadyExists:
return {
title: 'Die Email-Adresse wird bereits verwendet.',
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package app.ehrenamtskarte.backend.exception.webservice.schema

enum class GraphQLExceptionCode {
DATABASE_IO,
EMAIL_ALREADY_EXISTS,
INVALID_INPUT,
INVALID_CARD_HASH,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import app.ehrenamtskarte.backend.stores.importer.common.types.AcceptingStore
import app.ehrenamtskarte.backend.stores.utils.mapCsvToStore
import app.ehrenamtskarte.backend.stores.webservice.schema.types.CSVAcceptingStore
import app.ehrenamtskarte.backend.stores.webservice.schema.types.Coordinates
import app.ehrenamtskarte.backend.stores.webservice.schema.types.StoreImportResultModel
import app.ehrenamtskarte.backend.stores.webservice.schema.types.StoreImportReturnResultModel
import net.postgis.jdbc.geometry.Point
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.sql.ComparisonOp
Expand Down Expand Up @@ -114,26 +114,29 @@ object AcceptingStoresRepository {
}.firstOrNull()?.let { it[AcceptingStores.id].value }
}

fun getAcceptingStoreImportResult(stores: List<CSVAcceptingStore>, projectId: EntityID<Int>, dryRun: Boolean): StoreImportResultModel {
fun importAcceptingStores(stores: List<CSVAcceptingStore>, projectId: EntityID<Int>, dryRun: Boolean): StoreImportReturnResultModel {
var numStoresCreated = 0
var numStoresUntouched = 0
val acceptingStoreIdsToRemove =
AcceptingStores.slice(AcceptingStores.id).select { AcceptingStores.projectId eq projectId }
.map { it[AcceptingStores.id].value }.toMutableSet()
for (acceptingStore in stores) {
val existingStoreId: Int? =
getIdIfExists(mapCsvToStore(acceptingStore), projectId)
if (existingStoreId != null) {
stores.map { mapCsvToStore(it) }.forEach {
val existingStoreId = getIdIfExists(it, projectId)
if (existingStoreId == null) {
if (!dryRun) {
createStore(it, projectId)
}
numStoresCreated += 1
} else {
acceptingStoreIdsToRemove.remove(existingStoreId)
numStoresUntouched += 1
continue
}
if (!dryRun) {
createStore(mapCsvToStore(acceptingStore), projectId)
}
numStoresCreated += 1
}
return StoreImportResultModel(numStoresCreated, acceptingStoreIdsToRemove, numStoresUntouched)
if (!dryRun) {
deleteStores(acceptingStoreIdsToRemove)
}

return StoreImportReturnResultModel(numStoresCreated, acceptingStoreIdsToRemove.size, numStoresUntouched)
}

fun createStore(acceptingStore: AcceptingStore, currentProjectId: EntityID<Int>) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package app.ehrenamtskarte.backend.stores.utils

import app.ehrenamtskarte.backend.stores.importer.replaceNa

/** Returns null if string can't be trimmed f.e. empty string
* Removes subsequent whitespaces
* */
fun String?.clean(removeSubsequentWhitespaces: Boolean = true): String? {
if (this.isNullOrEmpty()) {
return null
}
this.replaceNa()
val trimmed = this.trim()
if (removeSubsequentWhitespaces) {
return trimmed.replace(Regex("""\s{2,}"""), " ")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,9 @@ class AcceptingStoresMutationService {
}

val projectId = projectEntity.id
val (storesCreated, storesToDelete, storesUntouched) = AcceptingStoresRepository.getAcceptingStoreImportResult(stores, projectId, dryRun)
val (storesCreated, storesToDelete, storesUntouched) = AcceptingStoresRepository.importAcceptingStores(stores, projectId, dryRun)

if (!dryRun) {
AcceptingStoresRepository.deleteStores(storesToDelete)
}
return@transaction StoreImportReturnResultModel(storesCreated, storesToDelete.size, storesUntouched)
return@transaction StoreImportReturnResultModel(storesCreated, storesToDelete, storesUntouched)
}
}
}

This file was deleted.

1 change: 0 additions & 1 deletion specs/backend-api.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,6 @@ enum GoldenCardEntitlementType {
}

enum GraphQLExceptionCode {
DATABASE_IO
EMAIL_ALREADY_EXISTS
INVALID_CARD_HASH
INVALID_CODE_TYPE
Expand Down

0 comments on commit 1246274

Please sign in to comment.