internal/router/answer_api_router.go (275 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package router import ( "github.com/apache/answer/internal/base/middleware" "github.com/apache/answer/internal/controller" "github.com/apache/answer/internal/controller_admin" "github.com/gin-gonic/gin" ) type AnswerAPIRouter struct { langController *controller.LangController userController *controller.UserController commentController *controller.CommentController reportController *controller.ReportController voteController *controller.VoteController tagController *controller.TagController followController *controller.FollowController collectionController *controller.CollectionController questionController *controller.QuestionController answerController *controller.AnswerController searchController *controller.SearchController revisionController *controller.RevisionController rankController *controller.RankController adminUserController *controller_admin.UserAdminController reasonController *controller.ReasonController themeController *controller_admin.ThemeController adminSiteInfoController *controller_admin.SiteInfoController siteInfoController *controller.SiteInfoController notificationController *controller.NotificationController dashboardController *controller.DashboardController uploadController *controller.UploadController activityController *controller.ActivityController roleController *controller_admin.RoleController pluginController *controller_admin.PluginController permissionController *controller.PermissionController userPluginController *controller.UserPluginController reviewController *controller.ReviewController metaController *controller.MetaController badgeController *controller.BadgeController adminBadgeController *controller_admin.BadgeController } func NewAnswerAPIRouter( langController *controller.LangController, userController *controller.UserController, commentController *controller.CommentController, reportController *controller.ReportController, voteController *controller.VoteController, tagController *controller.TagController, followController *controller.FollowController, collectionController *controller.CollectionController, questionController *controller.QuestionController, answerController *controller.AnswerController, searchController *controller.SearchController, revisionController *controller.RevisionController, rankController *controller.RankController, adminUserController *controller_admin.UserAdminController, reasonController *controller.ReasonController, themeController *controller_admin.ThemeController, adminSiteInfoController *controller_admin.SiteInfoController, siteInfoController *controller.SiteInfoController, notificationController *controller.NotificationController, dashboardController *controller.DashboardController, uploadController *controller.UploadController, activityController *controller.ActivityController, roleController *controller_admin.RoleController, pluginController *controller_admin.PluginController, permissionController *controller.PermissionController, userPluginController *controller.UserPluginController, reviewController *controller.ReviewController, metaController *controller.MetaController, badgeController *controller.BadgeController, adminBadgeController *controller_admin.BadgeController, ) *AnswerAPIRouter { return &AnswerAPIRouter{ langController: langController, userController: userController, commentController: commentController, reportController: reportController, voteController: voteController, tagController: tagController, followController: followController, collectionController: collectionController, questionController: questionController, answerController: answerController, searchController: searchController, revisionController: revisionController, rankController: rankController, adminUserController: adminUserController, reasonController: reasonController, themeController: themeController, adminSiteInfoController: adminSiteInfoController, notificationController: notificationController, siteInfoController: siteInfoController, dashboardController: dashboardController, uploadController: uploadController, activityController: activityController, roleController: roleController, pluginController: pluginController, permissionController: permissionController, userPluginController: userPluginController, reviewController: reviewController, metaController: metaController, badgeController: badgeController, adminBadgeController: adminBadgeController, } } func (a *AnswerAPIRouter) RegisterMustUnAuthAnswerAPIRouter(authUserMiddleware *middleware.AuthUserMiddleware, r *gin.RouterGroup) { // i18n r.GET("/language/config", a.langController.GetLangMapping) r.GET("/language/options", a.langController.GetUserLangOptions) // siteinfo r.GET("/siteinfo", a.siteInfoController.GetSiteInfo) r.GET("/siteinfo/legal", a.siteInfoController.GetSiteLegalInfo) // user r.GET("/user/info", a.userController.GetUserInfoByUserID) r.GET("/user/action/record", authUserMiddleware.Auth(), a.userController.ActionRecord) routerGroup := r.Group("", middleware.BanAPIForUserCenter) routerGroup.POST("/user/login/email", a.userController.UserEmailLogin) routerGroup.POST("/user/register/email", a.userController.UserRegisterByEmail) routerGroup.POST("/user/email/verification", a.userController.UserVerifyEmail) routerGroup.PUT("/user/email", a.userController.UserChangeEmailVerify) routerGroup.POST("/user/password/reset", a.userController.RetrievePassWord) routerGroup.POST("/user/password/replacement", a.userController.UseRePassWord) routerGroup.PUT("/user/notification/unsubscribe", a.userController.UserUnsubscribeNotification) // plugins r.GET("/plugin/status", a.pluginController.GetAllPluginStatus) } func (a *AnswerAPIRouter) RegisterUnAuthAnswerAPIRouter(r *gin.RouterGroup) { // user r.GET("/personal/user/info", a.userController.GetOtherUserInfoByUsername) r.GET("/user/ranking", a.userController.UserRanking) r.GET("/user/staff", a.userController.UserStaff) // answer r.GET("/answer/info", a.answerController.Get) r.GET("/answer/page", a.answerController.AnswerList) r.GET("/personal/answer/page", a.questionController.PersonalAnswerPage) // question r.GET("/question/info", a.questionController.GetQuestion) r.GET("/question/invite", a.questionController.GetQuestionInviteUserInfo) r.GET("/question/page", a.questionController.QuestionPage) r.GET("/question/recommend/page", a.questionController.QuestionRecommendPage) r.GET("/question/similar/tag", a.questionController.SimilarQuestion) r.GET("/personal/qa/top", a.questionController.UserTop) r.GET("/personal/question/page", a.questionController.PersonalQuestionPage) r.GET("/question/link", a.questionController.GetQuestionLink) // comment r.GET("/comment/page", a.commentController.GetCommentWithPage) r.GET("/personal/comment/page", a.commentController.GetCommentPersonalWithPage) r.GET("/comment", a.commentController.GetComment) // revision r.GET("/revisions", a.revisionController.GetRevisionList) // tag r.GET("/tags/page", a.tagController.GetTagWithPage) r.GET("/tags/following", a.tagController.GetFollowingTags) r.GET("/tag", a.tagController.GetTagInfo) r.GET("/tags", a.tagController.GetTagsBySlugName) r.GET("/tag/synonyms", a.tagController.GetTagSynonyms) // search r.GET("/search", a.searchController.Search) r.GET("/search/desc", a.searchController.SearchDesc) // rank r.GET("/personal/rank/page", a.rankController.GetRankPersonalWithPage) // reaction r.GET("/meta/reaction", a.metaController.GetReaction) // badges r.GET("/badge", a.badgeController.GetBadgeInfo) r.GET("/badge/awards/page", a.badgeController.GetBadgeAwardList) r.GET("/badge/user/awards/recent", a.badgeController.GetRecentBadgeAwardListByUsername) r.GET("/badge/user/awards", a.badgeController.GetAllBadgeAwardListByUsername) r.GET("/badges", a.badgeController.GetBadgeList) } func (a *AnswerAPIRouter) RegisterAuthUserWithAnyStatusAnswerAPIRouter(r *gin.RouterGroup) { r.GET("/user/logout", a.userController.UserLogout) r.POST("/user/email/change/code", middleware.BanAPIForUserCenter, a.userController.UserChangeEmailSendCode) r.POST("/user/email/verification/send", middleware.BanAPIForUserCenter, a.userController.UserVerifyEmailSend) } func (a *AnswerAPIRouter) RegisterAnswerAPIRouter(r *gin.RouterGroup) { // revisions r.GET("/revisions/unreviewed", a.revisionController.GetUnreviewedRevisionList) r.PUT("/revisions/audit", a.revisionController.RevisionAudit) r.GET("/revisions/edit/check", a.revisionController.CheckCanUpdateRevision) r.GET("/reviewing/type", a.revisionController.GetReviewingType) // comment r.POST("/comment", a.commentController.AddComment) r.DELETE("/comment", a.commentController.RemoveComment) r.PUT("/comment", a.commentController.UpdateComment) // report r.POST("/report", a.reportController.AddReport) r.GET("/report/unreviewed/post", a.reportController.GetUnreviewedReportPostPage) r.PUT("/report/review", a.reportController.ReviewReport) // review r.GET("/review/pending/post/page", a.reviewController.GetUnreviewedPostPage) r.PUT("/review/pending/post", a.reviewController.UpdateReview) // vote r.POST("/vote/up", a.voteController.VoteUp) r.POST("/vote/down", a.voteController.VoteDown) // follow r.POST("/follow", a.followController.Follow) r.PUT("/follow/tags", a.followController.UpdateFollowTags) // tag r.GET("/question/tags", a.tagController.SearchTagLike) r.POST("/tag", a.tagController.AddTag) r.PUT("/tag", a.tagController.UpdateTag) r.POST("/tag/recover", a.tagController.RecoverTag) r.DELETE("/tag", a.tagController.RemoveTag) r.PUT("/tag/synonym", a.tagController.UpdateTagSynonym) r.POST("/tag/merge", a.tagController.MergeTag) // collection r.POST("/collection/switch", a.collectionController.CollectionSwitch) r.GET("/personal/collection/page", a.questionController.PersonalCollectionPage) // question r.POST("/question", a.questionController.AddQuestion) r.POST("/question/answer", a.questionController.AddQuestionByAnswer) r.PUT("/question", a.questionController.UpdateQuestion) r.PUT("/question/invite", a.questionController.UpdateQuestionInviteUser) r.DELETE("/question", a.questionController.RemoveQuestion) r.PUT("/question/status", a.questionController.CloseQuestion) r.PUT("/question/operation", a.questionController.OperationQuestion) r.PUT("/question/reopen", a.questionController.ReopenQuestion) r.GET("/question/similar", a.questionController.GetSimilarQuestions) r.POST("/question/recover", a.questionController.QuestionRecover) // answer r.POST("/answer", a.answerController.Add) r.PUT("/answer", a.answerController.Update) r.POST("/answer/acceptance", a.answerController.Accepted) r.DELETE("/answer", a.answerController.RemoveAnswer) r.POST("/answer/recover", a.answerController.RecoverAnswer) // user r.PUT("/user/password", middleware.BanAPIForUserCenter, a.userController.UserModifyPassWord) r.PUT("/user/info", a.userController.UserUpdateInfo) r.PUT("/user/interface", a.userController.UserUpdateInterface) r.GET("/user/notification/config", a.userController.GetUserNotificationConfig) r.PUT("/user/notification/config", a.userController.UpdateUserNotificationConfig) r.GET("/user/info/search", a.userController.SearchUserListByName) // vote r.GET("/personal/vote/page", a.voteController.UserVotes) // reason r.GET("/reasons", a.reasonController.Reasons) // permission r.GET("/permission", a.permissionController.GetPermission) // notification r.GET("/notification/status", a.notificationController.GetRedDot) r.PUT("/notification/status", a.notificationController.ClearRedDot) r.GET("/notification/page", a.notificationController.GetList) r.PUT("/notification/read/state/all", a.notificationController.ClearUnRead) r.PUT("/notification/read/state", a.notificationController.ClearIDUnRead) // upload file r.POST("/file", a.uploadController.UploadFile) r.POST("/post/render", a.uploadController.PostRender) // activity r.GET("/activity/timeline", a.activityController.GetObjectTimeline) r.GET("/activity/timeline/detail", a.activityController.GetObjectTimelineDetail) // plugin r.GET("/user/plugin/configs", a.userPluginController.GetUserPluginList) r.GET("/user/plugin/config", a.userPluginController.GetUserPluginConfig) r.PUT("/user/plugin/config", a.userPluginController.UpdatePluginUserConfig) // meta r.PUT("/meta/reaction", a.metaController.AddOrUpdateReaction) } func (a *AnswerAPIRouter) RegisterAnswerAdminAPIRouter(r *gin.RouterGroup) { r.GET("/question/page", a.questionController.AdminQuestionPage) r.PUT("/question/status", a.questionController.AdminUpdateQuestionStatus) r.GET("/answer/page", a.questionController.AdminAnswerPage) r.PUT("/answer/status", a.answerController.AdminUpdateAnswerStatus) // user r.GET("/users/page", a.adminUserController.GetUserPage) r.PUT("/user/status", a.adminUserController.UpdateUserStatus) r.PUT("/user/role", a.adminUserController.UpdateUserRole) r.GET("/user/activation", a.adminUserController.GetUserActivation) r.POST("/user/activation", a.adminUserController.SendUserActivation) r.POST("/user", a.adminUserController.AddUser) r.POST("/users", a.adminUserController.AddUsers) r.PUT("/user/password", a.adminUserController.UpdateUserPassword) r.PUT("/user/profile", a.adminUserController.EditUserProfile) r.DELETE("/delete/permanently", a.adminUserController.DeletePermanently) // reason r.GET("/reasons", a.reasonController.Reasons) // language r.GET("/language/options", a.langController.GetAdminLangOptions) // theme r.GET("/theme/options", a.themeController.GetThemeOptions) // siteinfo r.GET("/siteinfo/general", a.adminSiteInfoController.GetGeneral) r.PUT("/siteinfo/general", a.adminSiteInfoController.UpdateGeneral) r.GET("/siteinfo/interface", a.adminSiteInfoController.GetInterface) r.PUT("/siteinfo/interface", a.adminSiteInfoController.UpdateInterface) r.GET("/siteinfo/branding", a.adminSiteInfoController.GetSiteBranding) r.PUT("/siteinfo/branding", a.adminSiteInfoController.UpdateBranding) r.GET("/siteinfo/write", a.adminSiteInfoController.GetSiteWrite) r.PUT("/siteinfo/write", a.adminSiteInfoController.UpdateSiteWrite) r.GET("/siteinfo/legal", a.adminSiteInfoController.GetSiteLegal) r.PUT("/siteinfo/legal", a.adminSiteInfoController.UpdateSiteLegal) r.GET("/siteinfo/seo", a.adminSiteInfoController.GetSeo) r.PUT("/siteinfo/seo", a.adminSiteInfoController.UpdateSeo) r.GET("/siteinfo/login", a.adminSiteInfoController.GetSiteLogin) r.PUT("/siteinfo/login", a.adminSiteInfoController.UpdateSiteLogin) r.GET("/siteinfo/custom-css-html", a.adminSiteInfoController.GetSiteCustomCssHTML) r.PUT("/siteinfo/custom-css-html", a.adminSiteInfoController.UpdateSiteCustomCssHTML) r.GET("/siteinfo/theme", a.adminSiteInfoController.GetSiteTheme) r.PUT("/siteinfo/theme", a.adminSiteInfoController.SaveSiteTheme) r.GET("/siteinfo/users", a.adminSiteInfoController.GetSiteUsers) r.PUT("/siteinfo/users", a.adminSiteInfoController.UpdateSiteUsers) r.GET("/setting/smtp", a.adminSiteInfoController.GetSMTPConfig) r.PUT("/setting/smtp", a.adminSiteInfoController.UpdateSMTPConfig) r.GET("/setting/privileges", a.adminSiteInfoController.GetPrivilegesConfig) r.PUT("/setting/privileges", a.adminSiteInfoController.UpdatePrivilegesConfig) // dashboard r.GET("/dashboard", a.dashboardController.DashboardInfo) // roles r.GET("/roles", a.roleController.GetRoleList) // plugin r.GET("/plugins", a.pluginController.GetPluginList) r.PUT("/plugin/status", a.pluginController.UpdatePluginStatus) r.GET("/plugin/config", a.pluginController.GetPluginConfig) r.PUT("/plugin/config", a.pluginController.UpdatePluginConfig) // badge r.GET("/badges", a.adminBadgeController.GetBadgeList) r.PUT("/badge/status", a.adminBadgeController.UpdateBadgeStatus) }