From 6888c339f6c9078168fe945d8cbf01955c49deee Mon Sep 17 00:00:00 2001 From: Lacey Pevey <7490308+pevey@users.noreply.github.com> Date: Wed, 17 May 2023 09:27:13 -0500 Subject: [PATCH] changes to search by tag endpoints --- CHANGELOG.md | 8 ++++ package.json | 2 +- src/api/index.ts | 18 ++++----- src/services/blog.ts | 94 ++++++++++++++++++++++---------------------- 4 files changed, 63 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index edb6471..e82d9b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 0.0.4 + +### Patch Changes + +- Changes to retrieve by tag endpoints + +# Change Log + ## 0.0.3 ### Patch Changes diff --git a/package.json b/package.json index 12b8f59..ec74cee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "medusa-plugin-blog", - "version": "0.0.3", + "version": "0.0.4", "description": "Basic blog for Medusa", "repository": { "type": "git", diff --git a/src/api/index.ts b/src/api/index.ts index 61311c9..aa0e9c2 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -62,18 +62,14 @@ export default (rootDirectory: string): Router | Router[] => { }) // GET ALL BLOG POSTS TAGGED WITH A TAG OR AN ARRAY OF TAGS - router.get("/store/blog/tags", cors(storeCorsOptions), async (req, res) => { - const tags = req.query.tags + // Ex: /store/blog/tags/posts?tag=tag1&tag=tag2&tag=tag3 + router.get("/store/blog/tags/posts", cors(storeCorsOptions), async (req, res) => { + if (!req.query.tag) { return res.json([]) } + const tag_ids = (typeof req.query.tag === "string")? [req.query.tag] : req.query.tag const blogService = req.scope.resolve("blogService") - if (Array.isArray(tags)) { - blogService.getBlogPostsAllTags(tags).then((blog_posts) => { - return res.json(blog_posts) - }) - } else { - blogService.getBlogPostsByTag(tags).then((blog_posts) => { - return res.json(blog_posts) - }) - } + blogService.getBlogPostsByTags(tag_ids).then((blog_posts) => { + return res.json(blog_posts) + }) }) // GET ALL BLOG POSTS TAGGED WITH A PRODUCT diff --git a/src/services/blog.ts b/src/services/blog.ts index 9634348..164b801 100644 --- a/src/services/blog.ts +++ b/src/services/blog.ts @@ -4,7 +4,6 @@ import { ProductCollectionRepository } from '@medusajs/medusa/dist/repositories/ import { BlogCategoryRepository } from '../repositories/blog-category' import { BlogPostRepository } from '../repositories/blog-post' import { BlogTagRepository } from '../repositories/blog-tag' -import { ArrayContains, ArrayOverlap } from 'typeorm' export default class BlogService extends TransactionBaseService { protected readonly productRepository_: typeof ProductRepository @@ -126,65 +125,66 @@ export default class BlogService extends TransactionBaseService { async getBlogPostsByTag(tag_id) { /* @ts-ignore */ const blogPostRepository = this.activeManager_.withRepository(this.blogPostRepository_) - return await blogPostRepository.find({ - relations: { - category: true, - tags: true, - products: true, - collections: true - }, - where: { - tags: ArrayContains(tag_id) - } - }) + return await blogPostRepository.createQueryBuilder('blog_post') + .leftJoinAndSelect('blog_post.tags', 'tags') + .leftJoinAndSelect('blog_post.category', 'category') + .leftJoinAndSelect('blog_post.products', 'products') + .leftJoinAndSelect('blog_post.collections', 'collections') + .where('tags.id = :tag_id)', { tag_id }) + .getMany() } async getBlogPostsAllTags(tag_ids) { /* @ts-ignore */ const blogPostRepository = this.activeManager_.withRepository(this.blogPostRepository_) - return await blogPostRepository.find({ - relations: { - category: true, - tags: true, - products: true, - collections: true - }, - where: { - tags: ArrayOverlap(tag_ids) - } - }) + // return await blogPostRepository.createQueryBuilder('blog_post') + // .leftJoinAndSelect('blog_post.category', 'category') + // .leftJoinAndSelect('blog_post.products', 'products') + // .leftJoinAndSelect('blog_post.collections', 'collections') + // .innerJoinAndSelect('blog_post.tags', 'tags', 'tags.id IN (:...tag_ids)', { tag_ids }) + // .getMany() + // return await blogPostRepository.createQueryBuilder('blog_post') + // .leftJoinAndSelect('blog_post.tags', 'tags') + // .leftJoinAndSelect('blog_post.category', 'category') + // .leftJoinAndSelect('blog_post.products', 'products') + // .leftJoinAndSelect('blog_post.collections', 'collections') + // .where('tags.id IN (:...tag_ids)', { tag_ids }) + // .getMany() } - - async getBlogPostsByProduct(product_id) { + + async getBlogPostsByTags(tag_ids:number[]) { /* @ts-ignore */ const blogPostRepository = this.activeManager_.withRepository(this.blogPostRepository_) - return await blogPostRepository.find({ - relations: { - category: true, - tags: true, - products: true, - collections: true - }, - where: { - products: ArrayContains(product_id) - } - }) + return await blogPostRepository.createQueryBuilder('blog_post') + .innerJoinAndSelect('blog_post.tags', 'tags', 'tags.id IN (:...tag_ids)', { tag_ids }) + .leftJoinAndSelect('blog_post.category', 'category') + .leftJoinAndSelect('blog_post.products', 'products') + .leftJoinAndSelect('blog_post.collections', 'collections') + .getMany() + } + + async getBlogPostsByProduct(product_id:string) { + /* @ts-ignore */ + const blogPostRepository = this.activeManager_.withRepository(this.blogPostRepository_) + return await blogPostRepository.createQueryBuilder('blog_post') + .leftJoinAndSelect('blog_post.tags', 'tags') + .leftJoinAndSelect('blog_post.category', 'category') + .leftJoinAndSelect('blog_post.products', 'products') + .leftJoinAndSelect('blog_post.collections', 'collections') + .where('products.id = :product_id', { product_id }) + .getMany() } async getBlogPostsByCollection(collection_id) { /* @ts-ignore */ const blogPostRepository = this.activeManager_.withRepository(this.blogPostRepository_) - return await blogPostRepository.find({ - relations: { - category: true, - tags: true, - products: true, - collections: true - }, - where: { - collections: ArrayContains(collection_id) - } - }) + return await blogPostRepository.createQueryBuilder('blog_post') + .leftJoinAndSelect('blog_post.tags', 'tags') + .leftJoinAndSelect('blog_post.category', 'category') + .leftJoinAndSelect('blog_post.products', 'products') + .leftJoinAndSelect('blog_post.collections', 'collections') + .where('collections.id = :collection_id)', { collection_id }) + .getMany() }