// Code generated by hertz generator. package space import ( "cn/oneao/base-go/biz/router/middleware" "cn/oneao/base-go/db" "cn/oneao/base-go/db/repo" "cn/oneao/base-go/utils" "cn/oneao/base-go/utils/errorx" "cn/oneao/base-go/utils/idgen" "cn/oneao/base-go/utils/response" "context" space "cn/oneao/base-go/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() }