This commit is contained in:
oneao committed 2025-12-03 17:31:28 +08:00
1 parent e81f605999
commit cf9b01e633
26 files changed
+860 -935

No files matched your search

@@ -18,11 +18,11 @@ import (
"github.com/cloudwego/hertz/pkg/protocol/consts"
)
// InsertSpace .
// @router /space/insert [POST]
func InsertSpace(ctx context.Context, c *app.RequestContext) {
// CreateSpace .
// @router /space/create [POST]
func CreateSpace(ctx context.Context, c *app.RequestContext) {
var err error
var req space.InsertSpaceParams
var req space.CreateSpaceParams
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
@@ -109,7 +109,7 @@ func InsertSpace(ctx context.Context, c *app.RequestContext) {
return
}
resp := &space.InsertSpaceResult{
resp := &space.CreateSpaceResult{
Id: spaceId,
InviteCode: inviteCode,
}
@@ -117,11 +117,11 @@ func InsertSpace(ctx context.Context, c *app.RequestContext) {
response.Success(c).Data(resp).Send()
}
// DeleteSpace .
// @router /space/delete [POST]
func DeleteSpace(ctx context.Context, c *app.RequestContext) {
// DissolveSpace .
// @router /space/dissolve [POST]
func DissolveSpace(ctx context.Context, c *app.RequestContext) {
var err error
var req space.DeleteSpaceParams
var req space.DissolveSpaceParams
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
@@ -8,6 +8,7 @@ import (
"cn/oneao/base-go/db"
"cn/oneao/base-go/db/repo"
"cn/oneao/base-go/utils/errorx"
"cn/oneao/base-go/utils/idgen"
"cn/oneao/base-go/utils/response"
"context"
@@ -16,7 +17,7 @@ import (
)
// ExitSpace .
// @router /space_user/exit [POST]
// @router /space/user/exit [POST]
func ExitSpace(ctx context.Context, c *app.RequestContext) {
var err error
var req space.ExitSpaceParams
@@ -39,7 +40,7 @@ func ExitSpace(ctx context.Context, c *app.RequestContext) {
}
// ListSpaceUsers .
// @router /space_user/list [POST]
// @router /space/user/list [POST]
func ListSpaceUsers(ctx context.Context, c *app.RequestContext) {
var err error
var req space.ListSpaceUsersParams
@@ -49,16 +50,32 @@ func ListSpaceUsers(ctx context.Context, c *app.RequestContext) {
return
}
spaceId := req.SpaceId
// 先创建空返回对象
resp := &space.ListSpaceUsersResult{
Users: []*space.SpaceUser{},
}
userID := middleware.GetUserID(ctx)
// 获取用户所在空间
spaceByUserId, err := db.Queries.GetSpaceByUserId(ctx, userID)
if err != nil || errorx.IsNotFound(err) {
// 未加入空间或查询出错,直接返回空数组
response.Success(c).Data(resp).Send()
return
}
spaceId := spaceByUserId.ID
// 查询空间内用户
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,
@@ -71,7 +88,7 @@ func ListSpaceUsers(ctx context.Context, c *app.RequestContext) {
}
// RemoveSpaceUser .
// @router /space_user/remove [POST]
// @router /space/user/remove [POST]
func RemoveSpaceUser(ctx context.Context, c *app.RequestContext) {
var req space.RemoveSpaceUserParams
if err := c.BindAndValidate(&req); err != nil {
@@ -137,7 +154,7 @@ func RemoveSpaceUser(ctx context.Context, c *app.RequestContext) {
}
// UpdateSpaceUserRole .
// @router /space_user/updateRole [POST]
// @router /space/user/updateRole [POST]
func UpdateSpaceUserRole(ctx context.Context, c *app.RequestContext) {
var req space.UpdateSpaceUserRoleParams
if err := c.BindAndValidate(&req); err != nil {
@@ -163,16 +180,22 @@ func UpdateSpaceUserRole(ctx context.Context, c *app.RequestContext) {
return
}
// 3. 权限检查:只有创建者或管理员可以修改他人角色
// 3. 权限检查:只有创建者可以修改他人角色
// 假设 Role: 0=创建者, 1=管理员, 2=普通成员
if operator.Role != 0 && operator.Role != 1 {
if operator.Role != 0 {
response.Fail(c).Message("权限不足").Send()
return
}
// 3.1 不允许修改自己的角色
if operator.UserID == req.UserId {
response.Fail(c).Message("不能修改自己的角色").Send()
return
}
// 4. 校验目标 Role 是否合法
if req.Role != 1 && req.Role != 2 {
response.Fail(c).Message("Role 只能是 1 或 2").Send()
response.Fail(c).Message("角色修改错误").Send()
return
}
@@ -203,5 +226,96 @@ func UpdateSpaceUserRole(ctx context.Context, c *app.RequestContext) {
return
}
response.Success(c).Data().Send()
response.Success(c).Send()
}
// JoinSpace .
// @router /space/user/join [POST]
func JoinSpace(ctx context.Context, c *app.RequestContext) {
var err error
var req space.JoinSpaceParams
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
return
}
userID := middleware.GetUserID(ctx)
inviteCode := req.InviteCode
// 检查该用户是否已加入其他空间
_, err = db.Queries.GetSpaceByUserId(ctx, userID)
if err != nil {
if errorx.IsNotFound(err) {
} else {
errorx.AddError(c, err)
}
} else {
response.Fail(c).Message("请先退出已加入的空间").Send()
return
}
// 检查验证码是否有效
spaceByCode, err := db.Queries.GetSpaceByInviteCode(ctx, inviteCode)
if err != nil {
if errorx.IsNotFound(err) {
response.Fail(c).Message("邀请码无效").Send()
return
} else {
errorx.AddError(c, err)
return
}
}
// 加入空间,默认
params := repo.InsertSpaceUserParams{
ID: idgen.NextId(),
SpaceID: spaceByCode.ID,
UserID: userID,
Role: 2,
}
err = db.Queries.InsertSpaceUser(ctx, params)
if err != nil {
errorx.AddError(c, err)
return
}
response.Success(c).Message("加入空间成功").Send()
}
// GetUserSpace .
// @router /space/user/get [GET]
func GetUserSpace(ctx context.Context, c *app.RequestContext) {
var err error
var req space.GetUserSpaceParams
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
return
}
resp := new(space.GetUserSpaceResult)
userID := middleware.GetUserID(ctx)
spaceByUserId, err := db.Queries.GetSpaceByUserId(ctx, userID)
if err != nil {
if errorx.IsNotFound(err) {
response.Success(c).Data(nil).Send()
return
} else {
errorx.AddError(c, err)
return
}
}
resp.Id = spaceByUserId.ID
resp.Name = spaceByUserId.Name.String
resp.InviteCode = spaceByUserId.InviteCode
response.Success(c).Data(resp).Send()
}