From 058de2f77092576aa2976b29d1a2dc384a7d2610 Mon Sep 17 00:00:00 2001 From: sanika-wani Date: Sat, 23 Dec 2023 22:22:34 +0530 Subject: [PATCH 1/2] 457-Create-Application-Model-and-full-Endpoint --- controller/application.js | 78 +++++++++++++++++++++++++++++++++++ models/application.js | 87 +++++++++++++++++++++++++++++++++++++++ services/application.js | 44 ++++++++++++++++++++ 3 files changed, 209 insertions(+) create mode 100644 controller/application.js create mode 100644 models/application.js create mode 100644 services/application.js diff --git a/controller/application.js b/controller/application.js new file mode 100644 index 0000000..a671ba8 --- /dev/null +++ b/controller/application.js @@ -0,0 +1,78 @@ +import { + addNewApplication, + deleteApplicationById, + updateApplicationById, + getApplication, + } from "#services/application"; + import { logger } from "#util"; + + async function addApplication(req, res) { + const { + ERPID, + type, + data, + collection, + } = req.body; + try { + const application = await addNewApplication( + ERPID, + type, + data, + collection, + ); + res.json({ + res: `added application ${application.ERPID}`, + id: application.id, + }); + } catch (error) { + logger.error("Error while inserting", error); + res.status(500); + res.json({ err: "Error while inserting in DB" }); + } + } + async function deleteApplication(req, res) { + const { id } = req.params; + try { + await deleteApplicationById(id); + res.json({ res: "Application deleted successfully" }); + } catch (error) { + logger.error("Error while deleting", error); + res.status(500); + res.json({ err: "Error while deleting from DB" }); + } + } + + async function updateApplication(req, res) { + const { id } = req.params; + const { ...data } = req.body; + + try { + await updateApplicationById(id, data); + res.json({ res: `${id} application updated` }); + } catch (error) { + logger.error("Error while inserting", error); + res.status(500); + res.json({ err: "Error while inserting in DB" }); + } + } + + async function showApplication(req, res) { + try { + const filter = req.body; + const { limit, page } = req.query; + const application = await getApplication(filter, limit, page); + return res.json({ res: application }); + } catch (error) { + logger.error("Error while fetching", error); + res.status(500); + return res.json({ err: "Error while fetching the data" }); + } + } + + export default { + addApplication, + updateApplication, + deleteApplication, + showApplication, + }; + \ No newline at end of file diff --git a/models/application.js b/models/application.js new file mode 100644 index 0000000..525b034 --- /dev/null +++ b/models/application.js @@ -0,0 +1,87 @@ +import connector from "#models/databaseUtil"; + +const applicationSchema = { + ERPID: { type: String, required: true }, + type: { + type: String, + enum: ["insert", "update", "delete"], + required: true, + }, + data: { + type: connector.Schema.Types.ObjectId, + ref: "Data", + required: "true", + }, + collection: { type: String, required: true }, +}; +const Application = connector.model("Application",applicationSchema ); + +//crud operation +async function create(applicationData) { + const { + ERPID, + type, + data, + collection, + } = applicationData; + const application = new Application({ + ERPID, + type, + data, + collection, + }); + const applicationDoc = await application.save(); + return applicationDoc; + } + + async function createMultiple(applicationDataArray) { + const applications = applicationDataArray.map( + ({ + ERPID, + type, + data, + collection, + }) => + Application({ + ERPID, + type, + data, + collection, + }), + ); + + const applicationDocs = await Application.insertMany(applications); + return applicationDocs; + } + + async function read(filter, limit = 0, page = 1) { + const applicationDoc = await Application.find(filter) + .limit(limit) + .skip((page - 1) * limit) + .exec(); + const count = await Application.count(); + const totalPages = Math.ceil(count / limit); + return { totalPages, data: applicationDoc }; + } + + async function update(filter, updateObject, options = { multi: true }) { + const updateApplication = await Application.updateMany( + filter, + { $set: updateObject }, + options, + ); + return updateApplication.acknowledged; + } + + async function remove(filter) { + const deleteApplication = await Application.deleteMany(filter).exec(); + return deleteApplication.acknowledged; + } + + export default { + create, + read, + update, + remove, + createMultiple, + }; \ No newline at end of file diff --git a/services/application.js b/services/application.js new file mode 100644 index 0000000..d434296 --- /dev/null +++ b/services/application.js @@ -0,0 +1,44 @@ +import Application from "#models/application"; +import databaseError from "#error/database"; + +export async function addNewApplication( + ERPID, + type, + data, + collection, +) { + const newApplication = await Application.create({ + ERPID, + type, + data, + collection, + }); + if (String(newApplication.ERPID) === ERPID) { + return newApplication; + } + throw new databaseError.DataEntryError("Add Application"); +} + +export async function getApplication(filter, limit, page) { + const applications = await Application.read(filter, limit, page); + if (applications) { + return applications; + } + throw new databaseError.DataNotFoundError("Application"); +} + +export async function deleteAppliactionById(applicationId) { + const deleted = await Application.remove({ _id: applicationId }); + if (deleted) { + return deleted; + } + throw new databaseError.DataDeleteError("Application"); +} + +export async function updateApplicationById(id, data) { + const updated = await Application.update({ _id: id }, data); + if (updated) { + return updated; + } + throw new databaseError.DataEntryError("Application"); +} From 47e32bb66cd0fd0e866a5ede9afe70e903aa7130 Mon Sep 17 00:00:00 2001 From: Tejas Nair <85873779+TejasNair9977@users.noreply.github.com> Date: Sat, 6 Jan 2024 13:11:39 +0530 Subject: [PATCH 2/2] replaced dockerhub with ghcr --- .github/workflows/dockerhub.yml | 25 -------------------- .github/workflows/ghcrPush.yml | 42 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 25 deletions(-) delete mode 100644 .github/workflows/dockerhub.yml create mode 100644 .github/workflows/ghcrPush.yml diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml deleted file mode 100644 index 49feddd..0000000 --- a/.github/workflows/dockerhub.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Dockerhub - -on: - push: - branches: - - main - workflow_dispatch: - -permissions: - contents: read - -jobs: - test: - name: Uploading Img - timeout-minutes: 30 - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Building Docker Image - run: docker build -t ${{ secrets.username }}/erp-backend:prod . - - name: DockerHub Login - run: docker login -u "${{ secrets.username }}" -p "${{ secrets.pass }}" - - name: Uploading Image to DockerHub - run: docker push ${{ secrets.username }}/erp-backend:prod diff --git a/.github/workflows/ghcrPush.yml b/.github/workflows/ghcrPush.yml new file mode 100644 index 0000000..ef114c2 --- /dev/null +++ b/.github/workflows/ghcrPush.yml @@ -0,0 +1,42 @@ +name: Publishing Docker Image to ghcr.io + +on: + push: + branches: + - main + tags: + - v* + workflow_dispatch: + pull_request: + +jobs: + push: + name: Building Image and pushing + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - name: Build image + run: docker build . --file Dockerfile --tag $IMAGE_NAME --label "runnumber=${GITHUB_RUN_ID}" + - name: Log in to registry + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $ --password-stdin + - name: Push image + run: | + IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME + IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') +This changes all uppercase characters to lowercase. + + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') +This strips the git ref prefix from the version. + + [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') +This strips the "v" prefix from the tag name. + + [ "$VERSION" == "main" ] && VERSION=latest + echo IMAGE_ID=$IMAGE_ID + echo VERSION=$VERSION + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION + docker push $IMAGE_ID:$VERSION