u
This commit is contained in:
1 parent
6277fb2f9e
commit
8ecac0d7dd
270 files changed
+40438
-529
No files matched your search
@@ -0,0 +1,166 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package space
|
||||
|
||||
import (
|
||||
"allapp/biz/router/middleware"
|
||||
"allapp/db"
|
||||
"allapp/db/repo"
|
||||
"allapp/utils"
|
||||
"allapp/utils/errorx"
|
||||
"allapp/utils/idgen"
|
||||
"allapp/utils/response"
|
||||
"context"
|
||||
|
||||
space "allapp/biz/model/space"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// CreateSpace .
|
||||
// @router /space/create [POST]
|
||||
func CreateSpace(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req space.CreateSpaceParams
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
userID := middleware.GetUserID(ctx)
|
||||
|
||||
// 检查该用户是否已经加入空间了
|
||||
_, err = db.Queries.GetSpaceByUserId(ctx, userID)
|
||||
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
// 忽略
|
||||
} else {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
response.Fail(c).Message("请先退出已加入的空间").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 生成邀请码
|
||||
var inviteCode string
|
||||
|
||||
for {
|
||||
// 生成邀请码
|
||||
code, err := utils.GenerateCode(6)
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查数据库是否存在
|
||||
_, err = db.Queries.GetSpaceByInviteCode(ctx, code)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
// 不存在,唯一,直接使用
|
||||
inviteCode = code
|
||||
break
|
||||
} else {
|
||||
// 系统错误
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 如果存在,继续循环重新生成
|
||||
}
|
||||
|
||||
spaceId := idgen.NextId()
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
resp := &space.CreateSpaceResult{
|
||||
Id: spaceId,
|
||||
InviteCode: inviteCode,
|
||||
}
|
||||
|
||||
response.Success(c).Data(resp).Send()
|
||||
}
|
||||
|
||||
// DissolveSpace .
|
||||
// @router /space/dissolve [POST]
|
||||
func DissolveSpace(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req space.DissolveSpaceParams
|
||||
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,243 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package space
|
||||
|
||||
import (
|
||||
space "allapp/biz/model/space"
|
||||
"allapp/biz/router/middleware"
|
||||
"allapp/db"
|
||||
"allapp/db/repo"
|
||||
"allapp/utils/errorx"
|
||||
"allapp/utils/idgen"
|
||||
"allapp/utils/pgtypex"
|
||||
"allapp/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
|
||||
}
|
||||
|
||||
// 先创建空返回对象
|
||||
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
|
||||
}
|
||||
|
||||
// 填充用户列表
|
||||
for _, u := range users {
|
||||
resp.Users = append(resp.Users, &space.SpaceUser{
|
||||
UserId: u.UserID,
|
||||
Username: u.Username.String,
|
||||
SpaceRole: u.Role,
|
||||
ActiveTime: pgtypex.TimestampToDateTimeString(u.ActiveTime),
|
||||
})
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
delUserID := req.UserId
|
||||
currentUserID := middleware.GetUserID(ctx)
|
||||
|
||||
// 不能删除自己
|
||||
if currentUserID == delUserID {
|
||||
response.Fail(c).Message("请退出空间或解散空间").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 获取当前操作者所在空间及角色
|
||||
spaceUser, err := db.Queries.GetSpaceUserByUserId(ctx, currentUserID)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查权限
|
||||
if spaceUser.Role != 0 && spaceUser.Role != 1 {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 获取待删除用户的空间信息
|
||||
delUserSpace, err := db.Queries.GetSpaceByUserId(ctx, delUserID)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
response.Fail(c).Message("待删除用户不存在或权限不足").Send()
|
||||
return
|
||||
}
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 校验是否在同一个空间
|
||||
if spaceUser.SpaceID != delUserSpace.ID {
|
||||
response.Fail(c).Message("权限不足").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 删除用户
|
||||
if err := db.Queries.DeleteSpaceUser(ctx, delUserID); err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c).Message("移除成功").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: 1,
|
||||
}
|
||||
|
||||
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.GetUserSpaceDetail(ctx, userID)
|
||||
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
response.Success(c).Data(nil).Send()
|
||||
return
|
||||
} else {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
resp.SpaceId = spaceByUserId.SpaceID
|
||||
resp.SpaceName = spaceByUserId.SpaceName.String
|
||||
resp.InviteCode = spaceByUserId.SpaceInviteCode
|
||||
resp.Role = spaceByUserId.Role
|
||||
|
||||
response.Success(c).Data(resp).Send()
|
||||
}
|
||||
Reference in new issue
Block a user