Make it possible to use validators code from frontend

This commit is contained in:
ShootingStar91
2024-05-24 11:43:53 +03:00
parent a49808ead6
commit 929cf36bd9
5 changed files with 42 additions and 11 deletions
+9 -6
View File
@@ -4,9 +4,10 @@ ENV TZ="Europe/Helsinki"
WORKDIR /usr/src/app
RUN mkdir -p /usr/src/app/frontend/src/
RUN mkdir -p /usr/src/app/frontend/src/validators
COPY frontend/src/backendTypes.d.ts /usr/src/app/frontend/src/
COPY frontend/src/validators /usr/src/app/frontend/src/validators
COPY backend/package.json backend/
COPY backend/package-lock.json backend/
COPY backend/prisma backend
@@ -18,18 +19,20 @@ WORKDIR /usr/src/app/backend
RUN npm ci
COPY backend .
RUN rm -rf build
RUN npm run build
# alpine3.16 because newer versions have changed a dependency, causing Prisma to fail
FROM node:20-alpine3.16 AS node-run
WORKDIR /usr/src/app
RUN mkdir -p /usr/src/app/backend
WORKDIR /usr/src/app/backend
COPY --from=backend-build /usr/src/app/backend/build /usr/src/app/build
COPY --from=backend-build /usr/src/app/backend/node_modules /usr/src/app/node_modules
COPY --from=backend-build /usr/src/app/backend/build .
COPY --from=backend-build /usr/src/app/backend/node_modules ./node_modules
EXPOSE 4000
ENV NODE_ENV=production
RUN pwd
CMD ["node", "backend/src/index.js"]
CMD ["node", "build/index.js"]
+13 -1
View File
@@ -1,5 +1,12 @@
import { Request, Router } from 'express'
import { editLocality, fixEditedLocality, getAllLocalities, getLocalityDetails } from '../services/locality'
import {
editLocality,
filterLocality,
fixEditedLocality,
getAllLocalities,
getLocalityDetails,
validateEntireLocality,
} from '../services/locality'
import { fixBigInt } from '../utils/common'
import { detailedDiff } from 'deep-object-diff'
import { LocalityDetails } from '../../../frontend/src/backendTypes'
@@ -23,6 +30,11 @@ router.put('/', async (req: Request<object, object, { locality: LocalityDetails
const fixedEditedLocality = fixEditedLocality(editedLocality)
const oldLocality = await getLocalityDetails(fixedEditedLocality.lid)
const difference = detailedDiff(oldLocality!, fixedEditedLocality)
const filteredLoc = filterLocality(difference.updated)
const validationErrors = validateEntireLocality(filteredLoc)
if (validationErrors.length > 0) {
return res.status(400).send({ validationErrors })
}
const result = await editLocality(oldLocality!.lid, difference.updated)
if (!result) return res.status(400).send()
return res.status(200).send(result)
+16 -1
View File
@@ -2,6 +2,7 @@ import { logger } from '../utils/logger'
import { prisma } from '../utils/db'
import { LocalityDetails } from '../../../frontend/src/backendTypes'
import Prisma from '@prisma/client'
import { validateLocality } from '../../../frontend/src/validators/locality'
export const testDb = async () => {
const result = await prisma.now_loc.findMany({ select: { loc_name: true }, where: { loc_name: 'Amba East' } })
@@ -78,7 +79,17 @@ export const fixEditedLocality = (editedLocality: LocalityDetails) => {
return editedLocality
}
export const editLocality = async (lid: number, editedFields: Partial<LocalityDetails>) => {
export const validateEntireLocality = (editedFields: Partial<Prisma.now_loc>) => {
const keys = Object.keys(editedFields)
const errors = []
for (const key of keys) {
const error = validateLocality(editedFields as LocalityDetails, key as keyof LocalityDetails)
if (error !== null) errors.push(error)
}
return errors
}
export const filterLocality = (editedFields: Partial<LocalityDetails>) => {
const fields = Object.keys(prisma.now_loc.fields)
const filteredLoc = Object.entries(editedFields)
.filter(([field]) => fields.includes(field))
@@ -86,6 +97,10 @@ export const editLocality = async (lid: number, editedFields: Partial<LocalityDe
obj[cur[0]] = cur[1]
return obj
}, {}) as Partial<Prisma.now_loc>
return filteredLoc
}
export const editLocality = async (lid: number, filteredLoc: Partial<Prisma.now_loc>) => {
const result = await prisma.now_loc.update({
where: {
lid,
+3 -2
View File
@@ -13,11 +13,12 @@ services:
container_name: nowdb-backend-dev
image: node:20-alpine3.16
volumes:
- ./backend/:/usr/src/app
- ./backend/:/usr/src/app/backend/
- ./frontend/src/validators:/usr/src/app/frontend/src/validators
ports:
- 127.0.0.1:4000:4000
command: >
sh -c "cd /usr/src/app && npm ci && npm run dev"
sh -c "cd /usr/src/app/backend && npm ci && npm run dev"
env_file: .dev.env
db:
container_name: nowdb-db-dev
+1 -1
View File
@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import { LocalityDetails } from '@/backendTypes'
import { LocalityDetails } from '../backendTypes'
export const validateLocality = (editData: LocalityDetails, fieldName: keyof LocalityDetails) => {
const getValidator: {