u
This commit is contained in:
1 parent
f7b0c6ad2f
commit
e81f605999
23 files changed
+1286
-413
No files matched your search
@@ -13,6 +13,7 @@ import (
|
||||
"context"
|
||||
|
||||
space "cn/oneao/base-go/biz/model/space"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
@@ -73,23 +74,93 @@ func InsertSpace(ctx context.Context, c *app.RequestContext) {
|
||||
// 如果存在,继续循环重新生成
|
||||
}
|
||||
|
||||
// 创建空间
|
||||
spaceId := idgen.NextId()
|
||||
params := repo.InsertSpaceParams{
|
||||
ID: spaceId,
|
||||
InviteCode: inviteCode,
|
||||
}
|
||||
|
||||
err = db.Queries.InsertSpace(ctx, params)
|
||||
err = db.WithTx(ctx, func(q *repo.Queries) error {
|
||||
// 创建空间
|
||||
params := repo.InsertSpaceParams{
|
||||
ID: spaceId,
|
||||
InviteCode: inviteCode,
|
||||
}
|
||||
|
||||
err = q.InsertSpace(ctx, params)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 将创建用户默认添加到该空间内
|
||||
userParams := repo.InsertSpaceUserParams{
|
||||
ID: idgen.NextId(),
|
||||
SpaceID: spaceId,
|
||||
UserID: userID,
|
||||
Role: 0,
|
||||
}
|
||||
err := q.InsertSpaceUser(ctx, userParams)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
var resp space.InsertSpaceResult
|
||||
resp.Id = spaceId
|
||||
resp.InviteCode = inviteCode
|
||||
resp := &space.InsertSpaceResult{
|
||||
Id: spaceId,
|
||||
InviteCode: inviteCode,
|
||||
}
|
||||
|
||||
response.Success(c).Data(resp).Send()
|
||||
}
|
||||
|
||||
// DeleteSpace .
|
||||
// @router /space/delete [POST]
|
||||
func DeleteSpace(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req space.DeleteSpaceParams
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
userID := middleware.GetUserID(ctx)
|
||||
spaceByUserId, err := db.Queries.GetSpaceByUserId(ctx, userID)
|
||||
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
response.Success(c).Send()
|
||||
return
|
||||
} else {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
spaceId := spaceByUserId.ID
|
||||
|
||||
err = db.WithTx(ctx, func(q *repo.Queries) error {
|
||||
err := q.DeleteSpace(ctx, spaceId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = q.DeleteSpaceUserAll(ctx, spaceId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c).Send()
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package space
|
||||
|
||||
import (
|
||||
space "cn/oneao/base-go/biz/model/space"
|
||||
"cn/oneao/base-go/biz/router/middleware"
|
||||
"cn/oneao/base-go/db"
|
||||
"cn/oneao/base-go/db/repo"
|
||||
"cn/oneao/base-go/utils/errorx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// ExitSpace .
|
||||
// @router /space_user/exit [POST]
|
||||
func ExitSpace(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req space.ExitSpaceParams
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
userID := middleware.GetUserID(ctx)
|
||||
|
||||
err = db.Queries.DeleteSpaceUser(ctx, userID)
|
||||
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c).Send()
|
||||
}
|
||||
|
||||
// ListSpaceUsers .
|
||||
// @router /space_user/list [POST]
|
||||
func ListSpaceUsers(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req space.ListSpaceUsersParams
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
spaceId := req.SpaceId
|
||||
|
||||
users, err := db.Queries.ListSpaceUsers(ctx, spaceId)
|
||||
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
resp := &space.ListSpaceUsersResult{}
|
||||
for _, u := range users {
|
||||
resp.Users = append(resp.Users, &space.SpaceUser{
|
||||
UserId: u.UserID,
|
||||
Username: u.Username.String,
|
||||
SpaceRole: u.Role,
|
||||
})
|
||||
}
|
||||
|
||||
response.Success(c).Data(resp).Send()
|
||||
}
|
||||
|
||||
// RemoveSpaceUser .
|
||||
// @router /space_user/remove [POST]
|
||||
func RemoveSpaceUser(ctx context.Context, c *app.RequestContext) {
|
||||
var req space.RemoveSpaceUserParams
|
||||
if err := c.BindAndValidate(&req); err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
spaceId := req.SpaceId
|
||||
delUserId := req.UserId
|
||||
userID := middleware.GetUserID(ctx)
|
||||
|
||||
if userID == delUserId {
|
||||
response.Fail(c).Message("请退出空间或解散空间").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 当前操作者信息
|
||||
spaceUser, err := db.Queries.GetSpaceUserByUserId(ctx, userID)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if spaceUser.SpaceID != spaceId {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
|
||||
if spaceUser.Role != 0 && spaceUser.Role != 1 {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 被踢用户是否在该空间
|
||||
targetUser, err := db.Queries.GetSpaceUserByUserId(ctx, delUserId)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
response.Success(c).Message("用户不在空间").Send()
|
||||
return
|
||||
}
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if targetUser.SpaceID != spaceId {
|
||||
response.Fail(c).Message("用户不在该空间").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 删除
|
||||
err = db.Queries.DeleteSpaceUser(ctx, delUserId)
|
||||
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c).Message("移除成功").Send()
|
||||
}
|
||||
|
||||
// UpdateSpaceUserRole .
|
||||
// @router /space_user/updateRole [POST]
|
||||
func UpdateSpaceUserRole(ctx context.Context, c *app.RequestContext) {
|
||||
var req space.UpdateSpaceUserRoleParams
|
||||
if err := c.BindAndValidate(&req); err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 1. 获取当前操作者信息
|
||||
userID := middleware.GetUserID(ctx)
|
||||
operator, err := db.Queries.GetSpaceUserByUserId(ctx, userID)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 2. 检查操作者是否属于该空间
|
||||
if operator.SpaceID != req.SpaceId {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 3. 权限检查:只有创建者或管理员可以修改他人角色
|
||||
// 假设 Role: 0=创建者, 1=管理员, 2=普通成员
|
||||
if operator.Role != 0 && operator.Role != 1 {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 4. 校验目标 Role 是否合法
|
||||
if req.Role != 1 && req.Role != 2 {
|
||||
response.Fail(c).Message("Role 只能是 1 或 2").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 5. 获取被修改的用户
|
||||
targetUser, err := db.Queries.GetSpaceUserByUserId(ctx, req.UserId)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
response.Fail(c).Message("目标用户不存在").Send()
|
||||
return
|
||||
}
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if targetUser.SpaceID != req.SpaceId {
|
||||
response.Fail(c).Message("目标用户不在该空间").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 6. 执行更新
|
||||
err = db.Queries.UpdateSpaceUserRole(ctx, repo.UpdateSpaceUserRoleParams{
|
||||
SpaceID: req.SpaceId,
|
||||
UserID: req.UserId,
|
||||
Role: req.Role,
|
||||
})
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c).Data().Send()
|
||||
}
|
||||
Reference in new issue
Block a user