From b32d19339ed9f585630139f988f455b8cf51daa2 Mon Sep 17 00:00:00 2001 From: Luan Almeida Date: Wed, 15 Jan 2025 14:05:35 -0300 Subject: [PATCH 1/2] feat: route to return store by subdomain --- package-lock.json | 4 +-- package.json | 2 +- src/features/stores/controller/public.ts | 32 ++++++++++++++++++++++++ src/features/stores/model/db.ts | 3 +++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 44b1fe2..f80d0c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vtru-studio-api", - "version": "1.0.628", + "version": "1.0.629", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vtru-studio-api", - "version": "1.0.628", + "version": "1.0.629", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.556.0", diff --git a/package.json b/package.json index 2489d3e..46ad517 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vtru-studio-api", - "version": "1.0.628", + "version": "1.0.629", "description": "", "main": "index.js", "scripts": { diff --git a/src/features/stores/controller/public.ts b/src/features/stores/controller/public.ts index d885a77..574c64c 100644 --- a/src/features/stores/controller/public.ts +++ b/src/features/stores/controller/public.ts @@ -51,4 +51,36 @@ route.get('/validate/:hash', async (req, res) => { } }); +route.get('/:subdomain', async (req, res) => { + try { + const { subdomain } = req.params; + + const store = await model.findStoresBySubdomain(subdomain); + + if (!store) { + res.status(404).json({ + code: 'vitruveo.studio.api.stores.find.failed', + message: 'Store not found', + transaction: nanoid(), + } as APIResponse); + return; + } + + res.status(200).json({ + code: 'vitruveo.studio.api.stores.find.success', + message: 'Store found', + data: store, + transaction: nanoid(), + } as APIResponse); + } catch (error) { + logger('Find stores failed: %O', error); + res.status(500).json({ + code: 'vitruveo.studio.api.stores.find.failed', + message: `Find failed: ${error}`, + args: error, + transaction: nanoid(), + } as APIResponse); + } +}); + export { route }; diff --git a/src/features/stores/model/db.ts b/src/features/stores/model/db.ts index a969fef..951fc9c 100644 --- a/src/features/stores/model/db.ts +++ b/src/features/stores/model/db.ts @@ -41,6 +41,9 @@ export const findStoresByHash = (hash: string) => stores().findOne({ hash }); export const findStoresById = (id: string) => stores().findOne({ _id: new ObjectId(id) }); +export const findStoresBySubdomain = (subdomain: string) => + stores().findOne({ 'organization.url': subdomain }); + export const updateStores = ({ id, data }: UpdateStoresParams) => { const envelope = StoresSchema.parse(data); From 58e06c41d966b43e934b7fee5cbed4c4c2169cc8 Mon Sep 17 00:00:00 2001 From: Luan Almeida Date: Fri, 17 Jan 2025 09:50:02 -0300 Subject: [PATCH 2/2] style: using desestructuring --- package-lock.json | 4 ++-- package.json | 2 +- src/features/stores/controller/rules.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index f80d0c3..5c657ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vtru-studio-api", - "version": "1.0.629", + "version": "1.0.630", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vtru-studio-api", - "version": "1.0.629", + "version": "1.0.630", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.556.0", diff --git a/package.json b/package.json index 46ad517..c8fdb50 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vtru-studio-api", - "version": "1.0.629", + "version": "1.0.630", "description": "", "main": "index.js", "scripts": { diff --git a/src/features/stores/controller/rules.ts b/src/features/stores/controller/rules.ts index 14aff30..59181a6 100644 --- a/src/features/stores/controller/rules.ts +++ b/src/features/stores/controller/rules.ts @@ -1,5 +1,6 @@ import { nanoid } from 'nanoid'; import { NextFunction, Request, Response } from 'express'; +import axios from 'axios'; import { APIResponse } from '../../../services'; import { schemaValidationArtworks, @@ -8,7 +9,6 @@ import { schemaValidationStepName, } from './schemas'; import { FrameworkSchema } from '../model'; -import axios from 'axios'; import { GENERAL_STORAGE_URL } from '../../../constants'; export const validateBodyForCreateStores = async ( @@ -28,7 +28,7 @@ export const validateBodyForCreateStores = async ( try { req.body = schemaValidationForCreateStores.parse(req.body); - const url: string = req.body.organization.url; + const { url } = req.body.organization; if (!url.match(/^[a-zA-Z0-9-]+$/) || url.length < 4) { res.status(400).json({