初始化项目框架,完成部分接口开发

This commit is contained in:
2025-07-10 21:04:29 +08:00
commit b2871ec0d2
168 changed files with 6399 additions and 0 deletions

138
internal/logic/book/book.go Normal file
View File

@ -0,0 +1,138 @@
package book
import (
"context"
"server/internal/dao"
"server/internal/model"
"server/internal/model/do"
"server/internal/service"
"server/utility/ecode"
)
type sBook struct{}
func New() service.IBook {
return &sBook{}
}
func init() {
service.RegisterBook(New())
}
// List retrieves a paginated list of books
func (s *sBook) List(ctx context.Context, in *model.BookListIn) (out *model.BookListOut, err error) {
out = &model.BookListOut{}
m := dao.Books.Ctx(ctx)
if in.Title != "" {
m = m.Where(dao.Books.Columns().Title+" like ?", "%"+in.Title+"%")
}
if in.CategoryId != 0 {
m = m.Where(dao.Books.Columns().CategoryId, in.CategoryId)
}
if in.AuthorId != 0 {
m = m.Where(dao.Books.Columns().AuthorId, in.AuthorId)
}
if in.Status != 0 {
m = m.Where(dao.Books.Columns().Status, in.Status)
}
if in.IsRecommended != 0 {
m = m.Where(dao.Books.Columns().IsRecommended, in.IsRecommended)
}
if err = m.Page(in.Page, in.Size).ScanAndCount(&out.List, &out.Total, false); err != nil {
return
}
return
}
func (s *sBook) Create(ctx context.Context, in *model.BookAddIn) (out *model.BookCRUDOut, err error) {
exist, err := dao.Books.Ctx(ctx).
Where(dao.Books.Columns().Title, in.Title).
Exist()
if err != nil {
return nil, ecode.Fail.Sub("book_query_failed")
}
if exist {
return nil, ecode.Params.Sub("book_exists")
}
if _, err := dao.Books.Ctx(ctx).Data(do.Books{
AuthorId: in.AuthorId,
CategoryId: in.CategoryId,
Title: in.Title,
CoverUrl: in.CoverUrl,
Description: in.Description,
Status: in.Status,
Tags: in.Tags,
IsRecommended: in.IsRecommended,
}).Insert(); err != nil {
return nil, ecode.Fail.Sub("book_create_failed")
}
return &model.BookCRUDOut{
Success: true,
}, nil
}
func (s *sBook) Update(ctx context.Context, in *model.BookEditIn) (out *model.BookCRUDOut, err error) {
exist, err := dao.Books.Ctx(ctx).
WherePri(in.Id).
Exist()
if err != nil {
return nil, ecode.Fail.Sub("book_query_failed")
}
if !exist {
return nil, ecode.NotFound.Sub("book_not_found")
}
exist, err = dao.Books.Ctx(ctx).
Where(dao.Books.Columns().Title, in.Title).
Where("id != ?", in.Id).
Exist()
if err != nil {
return nil, ecode.Fail.Sub("book_query_failed")
}
if exist {
return nil, ecode.Params.Sub("book_exists")
}
_, err = dao.Books.Ctx(ctx).
WherePri(in.Id).
Data(do.Books{
AuthorId: in.AuthorId,
CategoryId: in.CategoryId,
Title: in.Title,
CoverUrl: in.CoverUrl,
Description: in.Description,
Status: in.Status,
Tags: in.Tags,
IsRecommended: in.IsRecommended,
}).Update()
if err != nil {
return nil, ecode.Fail.Sub("book_update_failed")
}
return &model.BookCRUDOut{
Success: true,
}, nil
}
func (s *sBook) Delete(ctx context.Context, in *model.BookDelIn) (out *model.BookCRUDOut, err error) {
exist, err := dao.Books.Ctx(ctx).
WherePri(in.Id).
Exist()
if err != nil {
return nil, ecode.Fail.Sub("book_query_failed")
}
if !exist {
return nil, ecode.NotFound.Sub("book_not_found")
}
_, err = dao.Books.Ctx(ctx).WherePri(in.Id).Delete()
if err != nil {
return nil, ecode.Fail.Sub("book_delete_failed")
}
return &model.BookCRUDOut{
Success: true,
}, nil
}