Create ArticleController

    import { Body, Logger, Post } from '@nestjs/common';
import { Controller, Get, HttpCode } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { ArticleService } from './article.service';

@ApiTags("Articles")
@Controller("api/v1/articles")
export class ArticleController {

private readonly logger = new Logger(ArticleController.name);

constructor(private readonly articleService: ArticleService){

}

@Get()
@HttpCode(200)
async getStats() {

const results= this.articleService.getStats();
return results;

}

@Post()
@HttpCode(200)
async addArticle(@Body() article:any){
const results= this.articleService.addArticle(article);
return results;
}



}

Create ArticleService

    import { Injectable, Logger } from '@nestjs/common';
import { ArticleDAO } from './article.dao';
import { UserArticleDAO } from './user-article.dao';

@Injectable()
export class ArticleService {

private readonly logger = new Logger(ArticleService.name);

constructor(private readonly articleDAO: ArticleDAO, private readonly userArticleDAO: UserArticleDAO){

}

async getStats(){
return this.articleDAO.getStats();
}

async getArticles(category:string, userId:string, status:string){
return this.userArticleDAO.getArticles(category,userId,status);
}

async addArticle(article:any){
return this.articleDAO.save(article);
}
async assignArticle(userArticle:any){
return this.userArticleDAO.save(userArticle);
}


}

Create ArticleDAO

    import { Injectable, Logger } from '@nestjs/common';
import { Connection } from 'typeorm';

@Injectable()
export class ArticleDAO {

private readonly logger = new Logger(ArticleDAO.name);

constructor(private connection: Connection){

}

async getStats() {
const result = await this.connection.query("SELECT category,COUNT(*) AS cnt FROM lms_articles GROUP BY category", []);
return result;
}

async save(article:any) {
const result = await this.connection.query("insert into lms_articles (category,duration,status,tags,title,url) values (?,?,?,?,?,?)", [article.category, article.duration,article.status, article.tags, article.title, article.url]);
return result;
}
}

Create UserArticleController

    import { Body, Controller, Get, HttpCode, Logger, Post, Query } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { ArticleService } from './article.service';

@ApiTags("User Articles")
@Controller("api/v1/userarticles")
export class UserarticleController {

private readonly logger = new Logger(UserarticleController.name);

constructor(private readonly articleService: ArticleService){

}

@Get('stats')
@HttpCode(200)
async getUserArticles() {

const results= this.articleService.getStats();
return results;

}

@Get('search')
@HttpCode(200)
async getArticles(@Query("category") category:string, @Query("userId") userId:string, @Query("status") status:string) {

const results= this.articleService.getArticles(category,userId, status);
return results;

}

@Post()
@HttpCode(200)
async assignArticle(@Body() userArticle:any){
const results= this.articleService.assignArticle(userArticle);
return results;
}


}

Create UserArticle DAO

    import { Injectable, Logger } from '@nestjs/common';
import { Connection } from 'typeorm';

@Injectable()
export class UserArticleDAO {

private readonly logger = new Logger(UserArticleDAO.name);

constructor(private connection: Connection){

}

async getArticles(category:string, userId:string, status:string) {
const result = await this.connection.query("SELECT * FROM lms_articles where category = ? and id not in (select article_id from lms_user_articles where status='C' and user_id = ? ) order by display_order", [category,userId]);
return result;
}

async save(userArticle:any) {
const result = await this.connection.query("insert into lms_user_articles (article_id,user_id,status) values (?,?,?)", [userArticle.articleId, userArticle.userId, userArticle.status]);
return result;
}
}