You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
kratos/examples/blog/internal/data/article.go

80 lines
1.7 KiB

package data
import (
"context"
"time"
"github.com/go-kratos/kratos/examples/blog/internal/biz"
"github.com/go-kratos/kratos/v2/log"
)
type articleRepo struct {
data *Data
log *log.Helper
}
// NewArticleRepo .
func NewArticleRepo(data *Data, logger log.Logger) biz.ArticleRepo {
return &articleRepo{
data: data,
log: log.NewHelper(logger),
}
}
func (ar *articleRepo) ListArticle(ctx context.Context) ([]*biz.Article, error) {
ps, err := ar.data.db.Article.Query().All(ctx)
if err != nil {
return nil, err
}
rv := make([]*biz.Article, 0, len(ps))
for _, p := range ps {
rv = append(rv, &biz.Article{
ID: p.ID,
Title: p.Title,
Content: p.Content,
CreatedAt: p.CreatedAt,
UpdatedAt: p.UpdatedAt,
})
}
return rv, nil
}
func (ar *articleRepo) GetArticle(ctx context.Context, id int64) (*biz.Article, error) {
p, err := ar.data.db.Article.Get(ctx, id)
if err != nil {
return nil, err
}
return &biz.Article{
ID: p.ID,
Title: p.Title,
Content: p.Content,
CreatedAt: p.CreatedAt,
UpdatedAt: p.UpdatedAt,
}, nil
}
func (ar *articleRepo) CreateArticle(ctx context.Context, article *biz.Article) error {
_, err := ar.data.db.Article.
Create().
SetTitle(article.Title).
SetContent(article.Content).
Save(ctx)
return err
}
func (ar *articleRepo) UpdateArticle(ctx context.Context, id int64, article *biz.Article) error {
p, err := ar.data.db.Article.Get(ctx, id)
if err != nil {
return err
}
_, err = p.Update().
SetTitle(article.Title).
SetContent(article.Content).
SetUpdatedAt(time.Now()).
Save(ctx)
return err
}
func (ar *articleRepo) DeleteArticle(ctx context.Context, id int64) error {
return ar.data.db.Article.DeleteOneID(id).Exec(ctx)
}