File

src/blog/blog.controller.ts

Prefix

blog

Index

Methods

Methods

createObjectCategory
createObjectCategory(modelBlog: any)
Parameters :
Name Type Optional
modelBlog any No
Returns : any
deleteBlog
deleteBlog(params: IsParameterWithIdOfTable)
Decorators :
@Delete(':id')
Parameters :
Name Type Optional
params IsParameterWithIdOfTable No
Returns : any
getBlog
getBlog()
Decorators :
@Get()
Returns : any
getBlogByCategoryPublic
getBlogByCategoryPublic(params: any)
Decorators :
@Public()
@Get('category/:slug')
Parameters :
Name Type Optional
params any No
Returns : any
Async getBlogByIdOrSlug
getBlogByIdOrSlug(res, params)
Decorators :
@Public()
@Get('search/:id')
Parameters :
Name Optional
res No
params No
Returns : Promise<any>
getBlogPublicated
getBlogPublicated()
Decorators :
@Public()
@Get('publish')
Returns : any
getLastestBlog
getLastestBlog()
Decorators :
@Public()
@Get('last')
Returns : any
Async getMostReadBlog
getMostReadBlog()
Decorators :
@Public()
@Get('popular')
Returns : unknown
saveBlog
saveBlog(modelBlog: BlogValidation)
Decorators :
@UseInterceptors(undefined)
@Post()
Parameters :
Name Type Optional
modelBlog BlogValidation No
Returns : any
updateBlog
updateBlog(modelBlog: BlogValidation, params: IsParameterWithIdOfTable)
Decorators :
@UseInterceptors(undefined)
@Put(':id')
Parameters :
Name Type Optional
modelBlog BlogValidation No
params IsParameterWithIdOfTable No
Returns : any
import { Body, Controller, Get, Param, Post, Put, Req, UseInterceptors, Delete, Res, HttpStatus, NotFoundException } from '@nestjs/common';
import { BlogService } from './blog.service';
import { FileInterceptor } from '@nestjs/platform-express';
import { BlogValidation } from 'src/database/validation/blog-validation';
import { IsParameterWithIdOfTable } from 'src/database/validation/parameter-validation';
import { Public } from 'src/auth/auth.controller';
import { ExceptionErrorMessage } from 'src/validation/exception-error';
import { analytics } from 'src/utils/utils';
import { response } from 'express';
import { SkipThrottle } from '@nestjs/throttler';
//import { propertyId } from 'src/utils/constante';
//import { convertAnaliticsFormat, getYearFormat } from 'src/utils/utils';




@SkipThrottle()
@Controller('blog')
export class BlogController {

  constructor(private blogService:BlogService){}

  //Exponer punto para el listado de todas los Blogs
  /*@Public()
  @Get('list')
  getBlogPublic():any{
    return this.blogService.findAllBlogs();
  }*/
  //Exponer punto para el listado de los blogs mas vistos segun las analiticas

  
  @Public()
  @Get('popular')
  async getMostReadBlog(){
    try {
      let iteration = 1, reponseAnalitics = [], isValid = false
      while(iteration<4){
        reponseAnalitics = await analytics(iteration);
        if(reponseAnalitics.length>=4){
          isValid = true
          break;
        }
        iteration++
      }
      reponseAnalitics = reponseAnalitics.map(obj =>  obj.path.replace('/blog/', ''))
      return isValid ? this.blogService.findAllBlogsAnalitics(reponseAnalitics) : [] ; 
    } catch (error) {
      ExceptionErrorMessage(error);            
    }

  }

  //Exponer punto para el listado de los blogs por categoria
  @Public()
  @Get('category/:slug')
  getBlogByCategoryPublic(@Param() params:any):any{
    return this.blogService.findByCategory(params.slug);
  }

  //Exponer punto para el listado de todas los Blogs
  @Get()
  getBlog():any{
    return this.blogService.findAllBlogs();
  }

  //Exponer punto para el listado de todas los Blogs
  @Public()
  @Get('publish')
  getBlogPublicated():any{
    return this.blogService.findAllBlogsPublicated();
  }


  //Exponer punto para el listado de un blog por su id o slug
  @Public()
  @Get('search/:id')
  async getBlogByIdOrSlug(@Res() res, @Param() params):Promise<any>{
    try {
      const isNumeric = n => !isNaN(n);
      let parameter = { name:"", value:params.id}
      isNumeric(params.id) ? parameter.name = "id": parameter.name = "slug";
      const blog = await this.blogService.findlByIdOrSlug(parameter);
    
      if(blog){
        console.log("1")
        const slugs = await this.blogService.getListBlogSlug();
    
        const index = slugs.findIndex(object => {
          return object.id === blog.id  ;
        });
    
        const prev = index > 0 ? slugs[index-1]:[];
        const next = index < slugs.length-1? slugs[index+1]:[];
       
    
        const result = Object.assign(blog, {prev}, {next})
    
        res.status(HttpStatus.OK).json(result).send();
        //return result;
      }
      else{
        res.status(HttpStatus.NOT_FOUND).send();
      }
  
      
    } catch (error) {
      console.log(error)
      ExceptionErrorMessage(error);      
    }

  }

  //Exponer punto para los 3 ultimos blog
  @Public()
  @Get('last')
  getLastestBlog():any{
    return this.blogService.findlastestBlogs();
  }


  //Exponer punto guardar blogs
  @UseInterceptors(FileInterceptor(''))
  @Post()
  saveBlog(@Body() modelBlog:BlogValidation):any {

    const [blogModel, blogCategoryDetail] = this.createObjectCategory(modelBlog)
    return this.blogService.saveBlog(blogModel,blogCategoryDetail);
  }

  //Exponer punto para actualizar blog
  @UseInterceptors(FileInterceptor(''))
  @Put(':id')
  updateBlog(@Body() modelBlog:BlogValidation, @Param() params:IsParameterWithIdOfTable ):any{
  
    const [blogModel, blogCategoryDetail] = this.createObjectCategory(modelBlog)

    return this.blogService.updateBlog(params.id, blogModel, blogCategoryDetail);
  }

  createObjectCategory(modelBlog:any):any{
    try {
      let blogCategoryDetail = [];
      modelBlog.categories.forEach((element) => { 
        const blogCategory = { categoryId:element };
        blogCategoryDetail.push(blogCategory);
      });
  
      delete modelBlog.categories;
  
      return [modelBlog, blogCategoryDetail];
    } catch (error) {
      ExceptionErrorMessage(error);            
    }
  }

  //Exponer punto para borrar un blog mediante su id
  @Delete(':id')
  deleteBlog(@Param() params:IsParameterWithIdOfTable){
    return this.blogService.deleteBlog(params.id);
  }


}

results matching ""

    No results matching ""