Files
common-server-public/archive/bbs-go-active/server/internal/services/api_service.go
12600k-rog-d4 8f4d399cfd 20251209
2025-12-09 20:33:57 +08:00

123 lines
3.4 KiB
Go

package services
import (
"bbs-go/internal/models"
"bbs-go/internal/models/dto"
"bbs-go/internal/repositories"
"log/slog"
"github.com/mlogclub/simple/common/dates"
"github.com/mlogclub/simple/sqls"
"github.com/mlogclub/simple/web/params"
)
var ApiService = newApiService()
func newApiService() *apiService {
return &apiService{}
}
type apiService struct {
}
func (s *apiService) Get(id int64) *models.Api {
return repositories.ApiRepository.Get(sqls.DB(), id)
}
func (s *apiService) Take(where ...interface{}) *models.Api {
return repositories.ApiRepository.Take(sqls.DB(), where...)
}
func (s *apiService) Find(cnd *sqls.Cnd) []models.Api {
return repositories.ApiRepository.Find(sqls.DB(), cnd)
}
func (s *apiService) FindOne(cnd *sqls.Cnd) *models.Api {
return repositories.ApiRepository.FindOne(sqls.DB(), cnd)
}
func (s *apiService) FindPageByParams(params *params.QueryParams) (list []models.Api, paging *sqls.Paging) {
return repositories.ApiRepository.FindPageByParams(sqls.DB(), params)
}
func (s *apiService) FindPageByCnd(cnd *sqls.Cnd) (list []models.Api, paging *sqls.Paging) {
return repositories.ApiRepository.FindPageByCnd(sqls.DB(), cnd)
}
func (s *apiService) Count(cnd *sqls.Cnd) int64 {
return repositories.ApiRepository.Count(sqls.DB(), cnd)
}
func (s *apiService) Create(t *models.Api) error {
return repositories.ApiRepository.Create(sqls.DB(), t)
}
func (s *apiService) Update(t *models.Api) error {
return repositories.ApiRepository.Update(sqls.DB(), t)
}
func (s *apiService) Updates(id int64, columns map[string]interface{}) error {
return repositories.ApiRepository.Updates(sqls.DB(), id, columns)
}
func (s *apiService) UpdateColumn(id int64, name string, value interface{}) error {
return repositories.ApiRepository.UpdateColumn(sqls.DB(), id, name, value)
}
func (s *apiService) Delete(id int64) {
repositories.ApiRepository.Delete(sqls.DB(), id)
}
func (s *apiService) GetByPath(path string) *models.Api {
return s.FindOne(sqls.NewCnd().Where("path = ?", path))
}
func (s *apiService) GetByName(name string) *models.Api {
return s.FindOne(sqls.NewCnd().Where("name = ?", name))
}
func (s *apiService) Init(list []dto.ApiRoute) {
now := dates.NowTimestamp()
for _, item := range list {
if s.GetByPath(item.Path) != nil {
continue
}
if err := s.Create(&models.Api{
Name: item.Name,
Method: item.Method,
Path: item.Path,
CreateTime: now,
UpdateTime: now,
}); err != nil {
slog.Error("Create api error", slog.Any("error", err))
} else {
slog.Info("Create api: " + item.Method + " " + item.Path + " " + item.Name)
}
}
}
func (s *apiService) GetByMenuId(menuId int64) (list []models.Api) {
err := sqls.DB().Raw(`
select a.* from t_api a left join t_menu_api ma on a.id = ma.api_id where ma.menu_id = ? order by a.id
`, menuId).Scan(&list).Error
if err != nil {
slog.Error(err.Error(), slog.Any("error", err))
}
return
}
func (s *apiService) GetByUserId(userId int64) (list []models.Api) {
err := sqls.DB().Raw(`
select api.* from t_api api
left join t_menu_api menu_api on api.id = menu_api.api_id
left join t_role_menu role_menu on role_menu.menu_id = menu_api.menu_id
left join t_user_role user_role on user_role.role_id = role_menu.role_id
where user_role.user_id = ? order by api.id
`, userId).Scan(&list).Error
if err != nil {
slog.Error(err.Error(), slog.Any("error", err))
}
return
}