createRoom.ts17 lines · main
| 1 | import { brivenError, mutation, type Ctx } from '@briven/cli/server'; |
| 2 | import { ulid } from '@briven/shared'; |
| 3 | |
| 4 | interface Args { |
| 5 | name: string; |
| 6 | } |
| 7 | |
| 8 | export default mutation(async (ctx: Ctx, args: Args) => { |
| 9 | const name = args.name?.trim(); |
| 10 | if (!name) throw new brivenError('validation_failed', 'name is required', { status: 400 }); |
| 11 | if (name.length > 64) |
| 12 | throw new brivenError('validation_failed', 'name too long (max 64 chars)', { status: 400 }); |
| 13 | |
| 14 | const id = ulid('rm'); |
| 15 | const [row] = await ctx.db('rooms').insert({ id, name }).returning(); |
| 16 | return row; |
| 17 | }); |