add article

This commit is contained in:
2025-09-01 18:29:59 +08:00
parent 34ff6ce916
commit 5d5372e359
59 changed files with 45435 additions and 1535 deletions

View File

@@ -0,0 +1,28 @@
package repositories
import (
"context"
"tyapi-server/internal/domains/article/entities"
"tyapi-server/internal/domains/article/repositories/queries"
"tyapi-server/internal/shared/interfaces"
)
// ArticleRepository 文章仓储接口
type ArticleRepository interface {
interfaces.Repository[entities.Article]
// 自定义查询方法
FindByAuthorID(ctx context.Context, authorID string) ([]*entities.Article, error)
FindByCategoryID(ctx context.Context, categoryID string) ([]*entities.Article, error)
FindByStatus(ctx context.Context, status entities.ArticleStatus) ([]*entities.Article, error)
FindFeatured(ctx context.Context) ([]*entities.Article, error)
Search(ctx context.Context, query *queries.SearchArticleQuery) ([]*entities.Article, int64, error)
ListArticles(ctx context.Context, query *queries.ListArticleQuery) ([]*entities.Article, int64, error)
// 统计方法
CountByCategoryID(ctx context.Context, categoryID string) (int64, error)
CountByStatus(ctx context.Context, status entities.ArticleStatus) (int64, error)
// 更新统计信息
IncrementViewCount(ctx context.Context, articleID string) error
}

View File

@@ -0,0 +1,19 @@
package repositories
import (
"context"
"tyapi-server/internal/domains/article/entities"
"tyapi-server/internal/shared/interfaces"
)
// CategoryRepository 分类仓储接口
type CategoryRepository interface {
interfaces.Repository[entities.Category]
// 自定义查询方法
FindActive(ctx context.Context) ([]*entities.Category, error)
FindBySortOrder(ctx context.Context) ([]*entities.Category, error)
// 统计方法
CountActive(ctx context.Context) (int64, error)
}

View File

@@ -0,0 +1,48 @@
package queries
import "tyapi-server/internal/domains/article/entities"
// ListArticleQuery 文章列表查询
type ListArticleQuery struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
Status entities.ArticleStatus `json:"status"`
CategoryID string `json:"category_id"`
TagID string `json:"tag_id"`
Title string `json:"title"`
Summary string `json:"summary"`
IsFeatured *bool `json:"is_featured"`
OrderBy string `json:"order_by"`
OrderDir string `json:"order_dir"`
}
// SearchArticleQuery 文章搜索查询
type SearchArticleQuery struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
Keyword string `json:"keyword"`
CategoryID string `json:"category_id"`
AuthorID string `json:"author_id"`
Status entities.ArticleStatus `json:"status"`
OrderBy string `json:"order_by"`
OrderDir string `json:"order_dir"`
}
// GetArticleQuery 获取文章详情查询
type GetArticleQuery struct {
ID string `json:"id"`
}
// GetArticlesByAuthorQuery 获取作者文章查询
type GetArticlesByAuthorQuery struct {
AuthorID string `json:"author_id"`
Page int `json:"page"`
PageSize int `json:"page_size"`
}
// GetArticlesByCategoryQuery 获取分类文章查询
type GetArticlesByCategoryQuery struct {
CategoryID string `json:"category_id"`
Page int `json:"page"`
PageSize int `json:"page_size"`
}

View File

@@ -0,0 +1,21 @@
package repositories
import (
"context"
"tyapi-server/internal/domains/article/entities"
"tyapi-server/internal/shared/interfaces"
)
// TagRepository 标签仓储接口
type TagRepository interface {
interfaces.Repository[entities.Tag]
// 自定义查询方法
FindByArticleID(ctx context.Context, articleID string) ([]*entities.Tag, error)
FindByName(ctx context.Context, name string) (*entities.Tag, error)
// 关联方法
AddTagToArticle(ctx context.Context, articleID string, tagID string) error
RemoveTagFromArticle(ctx context.Context, articleID string, tagID string) error
GetArticleTags(ctx context.Context, articleID string) ([]*entities.Tag, error)
}