add dashboard info

This commit is contained in:
aichy126 2022-11-02 16:29:10 +08:00
parent 872689b93a
commit e84a681ce4
14 changed files with 182 additions and 22 deletions

View File

@ -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)

View File

@ -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": [

View File

@ -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": [

View File

@ -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

View File

@ -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",
})
}

View File

@ -20,4 +20,5 @@ var ProviderSetController = wire.NewSet(
NewReasonController, NewReasonController,
NewNotificationController, NewNotificationController,
NewSiteinfoController, NewSiteinfoController,
NewDashboardController,
) )

View File

@ -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,
})
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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)
} }

View File

@ -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"`
}

View File

@ -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
} }

View File

@ -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)
} }

View File

@ -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