mirror of https://gitee.com/answerdev/answer.git
add dashboard info
This commit is contained in:
parent
872689b93a
commit
e84a681ce4
|
@ -175,7 +175,8 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
|
||||||
notificationCommon := notificationcommon.NewNotificationCommon(dataData, notificationRepo, userCommon, activityRepo, followRepo, objService)
|
notificationCommon := notificationcommon.NewNotificationCommon(dataData, notificationRepo, userCommon, activityRepo, followRepo, objService)
|
||||||
notificationService := notification2.NewNotificationService(dataData, notificationRepo, notificationCommon)
|
notificationService := notification2.NewNotificationService(dataData, notificationRepo, notificationCommon)
|
||||||
notificationController := controller.NewNotificationController(notificationService)
|
notificationController := controller.NewNotificationController(notificationService)
|
||||||
answerAPIRouter := router.NewAnswerAPIRouter(langController, userController, commentController, reportController, voteController, tagController, followController, collectionController, questionController, answerController, searchController, revisionController, rankController, controller_backyardReportController, userBackyardController, reasonController, themeController, siteInfoController, siteinfoController, notificationController)
|
dashboardController := controller.NewDashboardController(dashboardService)
|
||||||
|
answerAPIRouter := router.NewAnswerAPIRouter(langController, userController, commentController, reportController, voteController, tagController, followController, collectionController, questionController, answerController, searchController, revisionController, rankController, controller_backyardReportController, userBackyardController, reasonController, themeController, siteInfoController, siteinfoController, notificationController, dashboardController)
|
||||||
swaggerRouter := router.NewSwaggerRouter(swaggerConf)
|
swaggerRouter := router.NewSwaggerRouter(swaggerConf)
|
||||||
uiRouter := router.NewUIRouter()
|
uiRouter := router.NewUIRouter()
|
||||||
authUserMiddleware := middleware.NewAuthUserMiddleware(authService)
|
authUserMiddleware := middleware.NewAuthUserMiddleware(authService)
|
||||||
|
|
28
docs/docs.go
28
docs/docs.go
|
@ -113,6 +113,34 @@ const docTemplate = `{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/answer/admin/api/dashboard": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"ApiKeyAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "DashboardInfo",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"admin"
|
||||||
|
],
|
||||||
|
"summary": "DashboardInfo",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/handler.RespBody"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/answer/admin/api/language/options": {
|
"/answer/admin/api/language/options": {
|
||||||
"get": {
|
"get": {
|
||||||
"security": [
|
"security": [
|
||||||
|
|
|
@ -101,6 +101,34 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/answer/admin/api/dashboard": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"ApiKeyAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "DashboardInfo",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"admin"
|
||||||
|
],
|
||||||
|
"summary": "DashboardInfo",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/handler.RespBody"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/answer/admin/api/language/options": {
|
"/answer/admin/api/language/options": {
|
||||||
"get": {
|
"get": {
|
||||||
"security": [
|
"security": [
|
||||||
|
|
|
@ -1430,6 +1430,23 @@ paths:
|
||||||
summary: AdminSetAnswerStatus
|
summary: AdminSetAnswerStatus
|
||||||
tags:
|
tags:
|
||||||
- admin
|
- admin
|
||||||
|
/answer/admin/api/dashboard:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: DashboardInfo
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/handler.RespBody'
|
||||||
|
security:
|
||||||
|
- ApiKeyAuth: []
|
||||||
|
summary: DashboardInfo
|
||||||
|
tags:
|
||||||
|
- admin
|
||||||
/answer/admin/api/language/options:
|
/answer/admin/api/language/options:
|
||||||
get:
|
get:
|
||||||
description: Get language options
|
description: Get language options
|
||||||
|
|
|
@ -11,7 +11,6 @@ import (
|
||||||
"github.com/answerdev/answer/internal/service"
|
"github.com/answerdev/answer/internal/service"
|
||||||
"github.com/answerdev/answer/internal/service/dashboard"
|
"github.com/answerdev/answer/internal/service/dashboard"
|
||||||
"github.com/answerdev/answer/internal/service/rank"
|
"github.com/answerdev/answer/internal/service/rank"
|
||||||
"github.com/davecgh/go-spew/spew"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/segmentfault/pacman/errors"
|
"github.com/segmentfault/pacman/errors"
|
||||||
)
|
)
|
||||||
|
@ -246,12 +245,3 @@ func (ac *AnswerController) AdminSetAnswerStatus(ctx *gin.Context) {
|
||||||
err := ac.answerService.AdminSetAnswerStatus(ctx, req.AnswerID, req.StatusStr)
|
err := ac.answerService.AdminSetAnswerStatus(ctx, req.AnswerID, req.StatusStr)
|
||||||
handler.HandleResponse(ctx, err, gin.H{})
|
handler.HandleResponse(ctx, err, gin.H{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// dashboardService
|
|
||||||
func (ac *AnswerController) Dashboard(ctx *gin.Context) {
|
|
||||||
err := ac.dashboardService.Statistical(ctx)
|
|
||||||
spew.Dump(err)
|
|
||||||
handler.HandleResponse(ctx, err, gin.H{
|
|
||||||
"ping": "pong",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
@ -20,4 +20,5 @@ var ProviderSetController = wire.NewSet(
|
||||||
NewReasonController,
|
NewReasonController,
|
||||||
NewNotificationController,
|
NewNotificationController,
|
||||||
NewSiteinfoController,
|
NewSiteinfoController,
|
||||||
|
NewDashboardController,
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package controller
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/answerdev/answer/internal/base/handler"
|
||||||
|
"github.com/answerdev/answer/internal/service/dashboard"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DashboardController struct {
|
||||||
|
dashboardService *dashboard.DashboardService
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewDashboardController new controller
|
||||||
|
func NewDashboardController(
|
||||||
|
dashboardService *dashboard.DashboardService,
|
||||||
|
) *DashboardController {
|
||||||
|
return &DashboardController{
|
||||||
|
dashboardService: dashboardService,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DashboardInfo godoc
|
||||||
|
// @Summary DashboardInfo
|
||||||
|
// @Description DashboardInfo
|
||||||
|
// @Tags admin
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @Router /answer/admin/api/dashboard [get]
|
||||||
|
// @Success 200 {object} handler.RespBody
|
||||||
|
func (ac *DashboardController) DashboardInfo(ctx *gin.Context) {
|
||||||
|
info, err := ac.dashboardService.Statistical(ctx)
|
||||||
|
handler.HandleResponse(ctx, err, gin.H{
|
||||||
|
"info": info,
|
||||||
|
})
|
||||||
|
}
|
|
@ -94,3 +94,12 @@ func (ar *reportRepo) UpdateByID(
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (vr *reportRepo) GetReportCount(ctx context.Context) (count int64, err error) {
|
||||||
|
list := make([]*entity.Report, 0)
|
||||||
|
count, err = vr.data.DB.Where("status =?", entity.ReportStatusPending).FindAndCount(&list)
|
||||||
|
if err != nil {
|
||||||
|
return count, errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -149,3 +149,12 @@ func (ur *userRepo) GetByEmail(ctx context.Context, email string) (userInfo *ent
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (vr *userRepo) GetUserCount(ctx context.Context) (count int64, err error) {
|
||||||
|
list := make([]*entity.User, 0)
|
||||||
|
count, err = vr.data.DB.Where("mail_status =?", entity.EmailStatusAvailable).And("status =?", entity.UserStatusAvailable).FindAndCount(&list)
|
||||||
|
if err != nil {
|
||||||
|
return count, errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ type AnswerAPIRouter struct {
|
||||||
siteInfoController *controller_backyard.SiteInfoController
|
siteInfoController *controller_backyard.SiteInfoController
|
||||||
siteinfoController *controller.SiteinfoController
|
siteinfoController *controller.SiteinfoController
|
||||||
notificationController *controller.NotificationController
|
notificationController *controller.NotificationController
|
||||||
|
dashboardController *controller.DashboardController
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAnswerAPIRouter(
|
func NewAnswerAPIRouter(
|
||||||
|
@ -50,6 +51,7 @@ func NewAnswerAPIRouter(
|
||||||
siteInfoController *controller_backyard.SiteInfoController,
|
siteInfoController *controller_backyard.SiteInfoController,
|
||||||
siteinfoController *controller.SiteinfoController,
|
siteinfoController *controller.SiteinfoController,
|
||||||
notificationController *controller.NotificationController,
|
notificationController *controller.NotificationController,
|
||||||
|
dashboardController *controller.DashboardController,
|
||||||
|
|
||||||
) *AnswerAPIRouter {
|
) *AnswerAPIRouter {
|
||||||
return &AnswerAPIRouter{
|
return &AnswerAPIRouter{
|
||||||
|
@ -73,6 +75,7 @@ func NewAnswerAPIRouter(
|
||||||
siteInfoController: siteInfoController,
|
siteInfoController: siteInfoController,
|
||||||
notificationController: notificationController,
|
notificationController: notificationController,
|
||||||
siteinfoController: siteinfoController,
|
siteinfoController: siteinfoController,
|
||||||
|
dashboardController: dashboardController,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,9 +89,6 @@ func (a *AnswerAPIRouter) RegisterUnAuthAnswerAPIRouter(r *gin.RouterGroup) {
|
||||||
r.GET("/personal/comment/page", a.commentController.GetCommentPersonalWithPage)
|
r.GET("/personal/comment/page", a.commentController.GetCommentPersonalWithPage)
|
||||||
r.GET("/comment", a.commentController.GetComment)
|
r.GET("/comment", a.commentController.GetComment)
|
||||||
|
|
||||||
//test
|
|
||||||
r.GET("/test", a.answerController.Dashboard)
|
|
||||||
|
|
||||||
// user
|
// user
|
||||||
r.GET("/user/info", a.userController.GetUserInfoByUserID)
|
r.GET("/user/info", a.userController.GetUserInfoByUserID)
|
||||||
r.GET("/user/status", a.userController.GetUserStatus)
|
r.GET("/user/status", a.userController.GetUserStatus)
|
||||||
|
@ -228,4 +228,7 @@ func (a *AnswerAPIRouter) RegisterAnswerCmsAPIRouter(r *gin.RouterGroup) {
|
||||||
r.PUT("/siteinfo/interface", a.siteInfoController.UpdateInterface)
|
r.PUT("/siteinfo/interface", a.siteInfoController.UpdateInterface)
|
||||||
r.GET("/setting/smtp", a.siteInfoController.GetSMTPConfig)
|
r.GET("/setting/smtp", a.siteInfoController.GetSMTPConfig)
|
||||||
r.PUT("/setting/smtp", a.siteInfoController.UpdateSMTPConfig)
|
r.PUT("/setting/smtp", a.siteInfoController.UpdateSMTPConfig)
|
||||||
|
|
||||||
|
//dashboard
|
||||||
|
r.GET("/dashboard", a.dashboardController.DashboardInfo)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package schema
|
||||||
|
|
||||||
|
type DashboardInfo struct {
|
||||||
|
QuestionCount int64 `json:"question_count"`
|
||||||
|
AnswerCount int64 `json:"answer_count"`
|
||||||
|
CommentCount int64 `json:"comment_count"`
|
||||||
|
VoteCount int64 `json:"vote_count"`
|
||||||
|
UserCount int64 `json:"user_count"`
|
||||||
|
ReportCount int64 `json:"report_count"`
|
||||||
|
UploadingFiles string `json:"uploading_files"` //Allowed or Not allowed
|
||||||
|
SMTP string `json:"smtp"` //Enabled or Disabled
|
||||||
|
TimeZone string `json:"time_zone"`
|
||||||
|
OccupyingStorageSpace string `json:"occupying_storage_space"`
|
||||||
|
AppStartTime string `json:"app_start_time"`
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ package dashboard
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"github.com/answerdev/answer/internal/schema"
|
||||||
"github.com/answerdev/answer/internal/service/activity_common"
|
"github.com/answerdev/answer/internal/service/activity_common"
|
||||||
answercommon "github.com/answerdev/answer/internal/service/answer_common"
|
answercommon "github.com/answerdev/answer/internal/service/answer_common"
|
||||||
"github.com/answerdev/answer/internal/service/comment_common"
|
"github.com/answerdev/answer/internal/service/comment_common"
|
||||||
|
@ -10,7 +11,6 @@ import (
|
||||||
questioncommon "github.com/answerdev/answer/internal/service/question_common"
|
questioncommon "github.com/answerdev/answer/internal/service/question_common"
|
||||||
"github.com/answerdev/answer/internal/service/report_common"
|
"github.com/answerdev/answer/internal/service/report_common"
|
||||||
usercommon "github.com/answerdev/answer/internal/service/user_common"
|
usercommon "github.com/answerdev/answer/internal/service/user_common"
|
||||||
"github.com/davecgh/go-spew/spew"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type DashboardService struct {
|
type DashboardService struct {
|
||||||
|
@ -45,18 +45,19 @@ func NewDashboardService(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Statistical
|
// Statistical
|
||||||
func (ds *DashboardService) Statistical(ctx context.Context) error {
|
func (ds *DashboardService) Statistical(ctx context.Context) (*schema.DashboardInfo, error) {
|
||||||
|
dashboardInfo := &schema.DashboardInfo{}
|
||||||
questionCount, err := ds.questionRepo.GetQuestionCount(ctx)
|
questionCount, err := ds.questionRepo.GetQuestionCount(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return dashboardInfo, err
|
||||||
}
|
}
|
||||||
answerCount, err := ds.answerRepo.GetAnswerCount(ctx)
|
answerCount, err := ds.answerRepo.GetAnswerCount(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return dashboardInfo, err
|
||||||
}
|
}
|
||||||
commentCount, err := ds.commentRepo.GetCommentCount(ctx)
|
commentCount, err := ds.commentRepo.GetCommentCount(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return dashboardInfo, err
|
||||||
}
|
}
|
||||||
|
|
||||||
typeKeys := []string{
|
typeKeys := []string{
|
||||||
|
@ -78,8 +79,27 @@ func (ds *DashboardService) Statistical(ctx context.Context) error {
|
||||||
|
|
||||||
voteCount, err := ds.voteRepo.GetVoteCount(ctx, activityTypes)
|
voteCount, err := ds.voteRepo.GetVoteCount(ctx, activityTypes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return dashboardInfo, err
|
||||||
}
|
}
|
||||||
spew.Dump(questionCount, answerCount, commentCount, activityTypes, voteCount)
|
userCount, err := ds.userRepo.GetUserCount(ctx)
|
||||||
return nil
|
if err != nil {
|
||||||
|
return dashboardInfo, err
|
||||||
|
}
|
||||||
|
|
||||||
|
reportCount, err := ds.reportRepo.GetReportCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return dashboardInfo, err
|
||||||
|
}
|
||||||
|
dashboardInfo.QuestionCount = questionCount
|
||||||
|
dashboardInfo.AnswerCount = answerCount
|
||||||
|
dashboardInfo.CommentCount = commentCount
|
||||||
|
dashboardInfo.VoteCount = voteCount
|
||||||
|
dashboardInfo.UserCount = userCount
|
||||||
|
dashboardInfo.ReportCount = reportCount
|
||||||
|
|
||||||
|
dashboardInfo.UploadingFiles = "Allowed"
|
||||||
|
dashboardInfo.SMTP = "Enabled"
|
||||||
|
dashboardInfo.OccupyingStorageSpace = "1MB"
|
||||||
|
dashboardInfo.AppStartTime = "102"
|
||||||
|
return dashboardInfo, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package report_common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/answerdev/answer/internal/entity"
|
"github.com/answerdev/answer/internal/entity"
|
||||||
"github.com/answerdev/answer/internal/schema"
|
"github.com/answerdev/answer/internal/schema"
|
||||||
)
|
)
|
||||||
|
@ -12,4 +13,5 @@ type ReportRepo interface {
|
||||||
GetReportListPage(ctx context.Context, query schema.GetReportListPageDTO) (reports []entity.Report, total int64, err error)
|
GetReportListPage(ctx context.Context, query schema.GetReportListPageDTO) (reports []entity.Report, total int64, err error)
|
||||||
GetByID(ctx context.Context, id string) (report entity.Report, exist bool, err error)
|
GetByID(ctx context.Context, id string) (report entity.Report, exist bool, err error)
|
||||||
UpdateByID(ctx context.Context, id string, handleData entity.Report) (err error)
|
UpdateByID(ctx context.Context, id string, handleData entity.Report) (err error)
|
||||||
|
GetReportCount(ctx context.Context) (count int64, err error)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ type UserRepo interface {
|
||||||
BatchGetByID(ctx context.Context, ids []string) ([]*entity.User, error)
|
BatchGetByID(ctx context.Context, ids []string) ([]*entity.User, error)
|
||||||
GetByUsername(ctx context.Context, username string) (userInfo *entity.User, exist bool, err error)
|
GetByUsername(ctx context.Context, username string) (userInfo *entity.User, exist bool, err error)
|
||||||
GetByEmail(ctx context.Context, email string) (userInfo *entity.User, exist bool, err error)
|
GetByEmail(ctx context.Context, email string) (userInfo *entity.User, exist bool, err error)
|
||||||
|
GetUserCount(ctx context.Context) (count int64, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserCommon user service
|
// UserCommon user service
|
||||||
|
|
Loading…
Reference in New Issue