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;
}
}