mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-22 17:31:03 +01:00
refactor: restructured code
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/crawlab-team/crawlab/core/middlewares"
|
||||
"github.com/crawlab-team/crawlab/core/models/models"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type RouterGroups struct {
|
||||
@@ -229,6 +230,16 @@ func InitRoutes(app *gin.Engine) (err error) {
|
||||
},
|
||||
}...))
|
||||
RegisterController(groups.AuthGroup, "/users", NewController[models.User]([]Action{
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/:id",
|
||||
HandlerFunc: GetUserById,
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "",
|
||||
HandlerFunc: GetUserList,
|
||||
},
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "",
|
||||
|
||||
@@ -1,29 +1,132 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/crawlab-team/crawlab/core/models/models"
|
||||
"github.com/crawlab-team/crawlab/core/models/service"
|
||||
"github.com/crawlab-team/crawlab/core/utils"
|
||||
"github.com/crawlab-team/crawlab/db/mongo"
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
mongo2 "go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
func GetUserById(c *gin.Context) {
|
||||
id, err := primitive.ObjectIDFromHex(c.Param("id"))
|
||||
if err != nil {
|
||||
HandleErrorBadRequest(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// get user
|
||||
user, err := service.NewModelService[models.User]().GetById(id)
|
||||
if err != nil {
|
||||
HandleErrorInternalServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// get role
|
||||
if !user.RoleId.IsZero() {
|
||||
role, err := service.NewModelService[models.Role]().GetById(user.RoleId)
|
||||
if err != nil {
|
||||
HandleErrorInternalServerError(c, err)
|
||||
return
|
||||
}
|
||||
user.Role = role.Name
|
||||
user.IsAdmin = role.Admin
|
||||
}
|
||||
|
||||
HandleSuccessWithData(c, user)
|
||||
}
|
||||
|
||||
func GetUserList(c *gin.Context) {
|
||||
// params
|
||||
pagination := MustGetPagination(c)
|
||||
query := MustGetFilterQuery(c)
|
||||
sort := MustGetSortOption(c)
|
||||
|
||||
// get users
|
||||
users, err := service.NewModelService[models.User]().GetMany(query, &mongo.FindOptions{
|
||||
Sort: sort,
|
||||
Skip: pagination.Size * (pagination.Page - 1),
|
||||
Limit: pagination.Size,
|
||||
})
|
||||
if err != nil {
|
||||
if errors.Is(err, mongo2.ErrNoDocuments) {
|
||||
HandleSuccessWithListData(c, nil, 0)
|
||||
} else {
|
||||
HandleErrorInternalServerError(c, err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// get roles
|
||||
var roleIds []primitive.ObjectID
|
||||
for _, user := range users {
|
||||
if !user.RoleId.IsZero() {
|
||||
roleIds = append(roleIds, user.RoleId)
|
||||
}
|
||||
}
|
||||
if len(roleIds) > 0 {
|
||||
roles, err := service.NewModelService[models.Role]().GetMany(bson.M{
|
||||
"_id": bson.M{"$in": roleIds},
|
||||
}, nil)
|
||||
if err != nil {
|
||||
HandleErrorInternalServerError(c, err)
|
||||
return
|
||||
}
|
||||
rolesMap := make(map[primitive.ObjectID]models.Role)
|
||||
for _, role := range roles {
|
||||
rolesMap[role.Id] = role
|
||||
}
|
||||
for i, user := range users {
|
||||
if user.RoleId.IsZero() {
|
||||
continue
|
||||
}
|
||||
if role, ok := rolesMap[user.RoleId]; ok {
|
||||
users[i].Role = role.Name
|
||||
users[i].IsAdmin = role.Admin
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// total count
|
||||
total, err := service.NewModelService[models.User]().Count(query)
|
||||
if err != nil {
|
||||
HandleErrorInternalServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// response
|
||||
HandleSuccessWithListData(c, users, total)
|
||||
}
|
||||
|
||||
func PostUser(c *gin.Context) {
|
||||
var payload struct {
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Role string `json:"role"`
|
||||
Email string `json:"email"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Role string `json:"role"`
|
||||
RoleId primitive.ObjectID `json:"role_id"`
|
||||
Email string `json:"email"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&payload); err != nil {
|
||||
HandleErrorBadRequest(c, err)
|
||||
return
|
||||
}
|
||||
if !payload.RoleId.IsZero() {
|
||||
_, err := service.NewModelService[models.Role]().GetById(payload.RoleId)
|
||||
if err != nil {
|
||||
HandleErrorBadRequest(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
u := GetUserFromContext(c)
|
||||
model := models.User{
|
||||
Username: payload.Username,
|
||||
Password: utils.EncryptMd5(payload.Password),
|
||||
Role: payload.Role,
|
||||
RoleId: payload.RoleId,
|
||||
Email: payload.Email,
|
||||
}
|
||||
model.SetCreated(u.Id)
|
||||
|
||||
Reference in New Issue
Block a user