Add user POST + validation
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { getAllUsersFrom, getUserInformation } from "../services/userService";
|
||||
import { getAllUsersFrom, getUserInformation, createUser } from "../services/userService";
|
||||
import { CreateUserInput } from "../validators/userValidator";
|
||||
|
||||
export async function fetchUserData(id: string) {
|
||||
return await getUserInformation(id);
|
||||
@@ -7,3 +8,7 @@ export async function fetchUserData(id: string) {
|
||||
export async function fetchAllUsers(instanceId: string) {
|
||||
return await getAllUsersFrom(instanceId);
|
||||
}
|
||||
|
||||
export async function createNewUser(data: CreateUserInput) {
|
||||
return await createUser(data);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import { Hono } from "hono";
|
||||
import { fetchAllUsers, fetchUserData } from "../controller/userController";
|
||||
import { fetchAllUsers, fetchUserData, createNewUser } from "../controller/userController";
|
||||
import { createUserSchema } from "../validators/userValidator";
|
||||
import { zValidator } from "@hono/zod-validator";
|
||||
const actions = new Hono();
|
||||
|
||||
actions.get("user/:id", async (c) => {
|
||||
@@ -26,4 +28,18 @@ actions.get("user", async (c) => {
|
||||
}
|
||||
});
|
||||
|
||||
actions.post(
|
||||
"user",
|
||||
zValidator('json', createUserSchema),
|
||||
async (c) => {
|
||||
try {
|
||||
const data = await c.req.json();
|
||||
const newUser = await createNewUser(data);
|
||||
return c.json(newUser, 201);
|
||||
} catch (error) {
|
||||
return c.json({ error: "Error creating user" }, 500);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
export default actions;
|
||||
|
||||
@@ -5,9 +5,24 @@ import {
|
||||
Role,
|
||||
UserAuth,
|
||||
} from "@prisma/client";
|
||||
import { CreateUserInput } from '../validators/userValidator';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export async function createUser(data: CreateUserInput) {
|
||||
return await prisma.user.create({
|
||||
data: {
|
||||
username: data.username,
|
||||
nickname: data.nickname,
|
||||
bio: data.bio,
|
||||
picture: data.picture,
|
||||
banner: data.banner,
|
||||
status: data.status,
|
||||
admin: data.admin,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export async function getUserInformation(userId: string): Promise<{
|
||||
id: string;
|
||||
userName: string;
|
||||
|
||||
13
concord-server/src/validators/userValidator.ts
Normal file
13
concord-server/src/validators/userValidator.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { z } from 'zod'
|
||||
|
||||
export const createUserSchema = z.object({
|
||||
username: z.string().min(3).max(30),
|
||||
nickname: z.string().min(1).max(30).optional(),
|
||||
bio: z.string().max(500).optional(),
|
||||
picture: z.url().optional(),
|
||||
banner: z.url().optional(),
|
||||
status: z.enum(['online', 'offline', 'dnd', 'idle', 'invis']).default('online'),
|
||||
admin: z.boolean().default(false),
|
||||
})
|
||||
|
||||
export type CreateUserInput = z.infer<typeof createUserSchema>
|
||||
Reference in New Issue
Block a user