delete/archive implemented
This commit is contained in:
1 parent
89b8687431
commit
9ca05f5ea1
13 files changed
+680
-163
No files matched your search
@@ -28,21 +28,23 @@ export class ArticlesService {
|
||||
async findAll(
|
||||
dto: FindArticlesDto,
|
||||
): Promise<{ data: Article[]; total: number }> {
|
||||
const {
|
||||
category,
|
||||
author,
|
||||
tag,
|
||||
status = ArticleStatus.PUBLISHED,
|
||||
search,
|
||||
page = 1,
|
||||
limit = 10,
|
||||
} = dto;
|
||||
const { category, author, tag, status, search, page = 1, limit = 10 } = dto;
|
||||
|
||||
const queryBuilder = this.articleRepository
|
||||
.createQueryBuilder('article')
|
||||
.leftJoinAndSelect('article.author', 'author')
|
||||
.leftJoinAndSelect('article.category', 'category')
|
||||
.where('article.status = :status', { status });
|
||||
.leftJoinAndSelect('article.category', 'category');
|
||||
|
||||
// Handle status filter - can be single value or comma-separated list
|
||||
if (status) {
|
||||
if (typeof status === 'string' && status.includes(',')) {
|
||||
const statuses = status.split(',').map((s) => s.trim());
|
||||
queryBuilder.where('article.status IN (:...statuses)', { statuses });
|
||||
} else {
|
||||
queryBuilder.where('article.status = :status', { status });
|
||||
}
|
||||
}
|
||||
// If no status specified, return all articles (for admin dashboard)
|
||||
|
||||
if (category) {
|
||||
queryBuilder.andWhere('category.slug = :category', { category });
|
||||
@@ -109,6 +111,18 @@ export class ArticlesService {
|
||||
await this.articleRepository.remove(article);
|
||||
}
|
||||
|
||||
async archive(id: string): Promise<Article> {
|
||||
const article = await this.findOne(id);
|
||||
article.status = ArticleStatus.ARCHIVED;
|
||||
return await this.articleRepository.save(article);
|
||||
}
|
||||
|
||||
async publish(id: string, status: ArticleStatus = ArticleStatus.PUBLISHED): Promise<Article> {
|
||||
const article = await this.findOne(id);
|
||||
article.status = status;
|
||||
return await this.articleRepository.save(article);
|
||||
}
|
||||
|
||||
async syncFromStrapi(
|
||||
strapiId: string,
|
||||
data: Partial<CreateArticleDto>,
|
||||
@@ -129,8 +143,10 @@ export class ArticlesService {
|
||||
}
|
||||
|
||||
async removeByStrapiId(strapiId: string): Promise<void> {
|
||||
const article = await this.articleRepository.findOne({ where: { strapiId } });
|
||||
|
||||
const article = await this.articleRepository.findOne({
|
||||
where: { strapiId },
|
||||
});
|
||||
|
||||
if (!article) {
|
||||
this.logger.warn(`Article with strapiId ${strapiId} not found`);
|
||||
return;
|
||||
|
||||
Reference in new issue
Block a user