diff --git a/backend/src/services/locality.ts b/backend/src/services/locality.ts index 25878923..0e1288ad 100644 --- a/backend/src/services/locality.ts +++ b/backend/src/services/locality.ts @@ -1,5 +1,15 @@ -import { EditDataType, EditMetaData, LocalityDetailsType, User, Role } from '../../../frontend/src/shared/types' +import { + EditDataType, + EditMetaData, + LocalityDetailsType, + User, + Role, + LocalitySpeciesDetailsType, + Editable, + SpeciesDetailsType, +} from '../../../frontend/src/shared/types' import { validateLocality } from '../../../frontend/src/shared/validators/locality' +import { validateSpecies } from '../../../frontend/src/shared/validators/species' import { ValidationObject, referenceValidator } from '../../../frontend/src/shared/validators/validator' import Prisma from '../../prisma/generated/now_test_client' import { AccessError } from '../middlewares/authorizer' @@ -200,6 +210,7 @@ export const getLocalityDetails = async (id: number, user: User | undefined) => return JSON.parse(fixBigInt(result)!) as LocalityDetailsType } +// also validates possible new species that were added to this locality export const validateEntireLocality = async (editedFields: EditDataType & EditMetaData) => { const keys = Object.keys(editedFields) const errors: ValidationObject[] = [] @@ -207,6 +218,17 @@ export const validateEntireLocality = async (editedFields: EditDataType, key as keyof LocalityDetailsType) if (error.error) errors.push(error) } + if ('now_ls' in editedFields) { + for (const species of editedFields.now_ls as Array>) { + if (species.rowState === 'new') { + const keys = Object.keys(species.com_species) + for (const key of keys) { + const newSpeciesError = validateSpecies(species.com_species, key as keyof SpeciesDetailsType) + if (newSpeciesError.error) errors.push(newSpeciesError) + } + } + } + } let error = null if ('references' in editedFields && editedFields.references) { error = referenceValidator(editedFields.references)