296 lines
7.6 KiB
TypeScript
296 lines
7.6 KiB
TypeScript
import Elysia, { t } from "elysia";
|
|
import type { User } from "generated/prisma";
|
|
import _ from "lodash";
|
|
import { prisma } from "../lib/prisma";
|
|
|
|
const UserRoute = new Elysia({
|
|
prefix: "user",
|
|
tags: ["user"],
|
|
})
|
|
.get('/find', async (ctx) => {
|
|
const { user } = ctx as any
|
|
const permissions = await prisma.role.findFirst({
|
|
where: { id: user?.roleId },
|
|
select: { permissions: true }
|
|
});
|
|
|
|
return {
|
|
user: user as User,
|
|
permissions: permissions?.permissions || []
|
|
}
|
|
}, {
|
|
detail: {
|
|
summary: "find",
|
|
description: "find user",
|
|
}
|
|
})
|
|
.post("/upsert", async (ctx) => {
|
|
const { name, phone } = ctx.body
|
|
const upsert = await prisma.user.upsert({
|
|
where: {
|
|
phone
|
|
},
|
|
update: {
|
|
name
|
|
},
|
|
create: {
|
|
name,
|
|
phone
|
|
}
|
|
})
|
|
|
|
return {
|
|
success: true,
|
|
upsert
|
|
}
|
|
|
|
}, {
|
|
body: t.Object({
|
|
name: t.String({ minLength: 1, error: "name is required" }),
|
|
phone: t.String({ minLength: 1, error: "phone is required" })
|
|
}),
|
|
detail: {
|
|
summary: "upsert",
|
|
description: "upsert user",
|
|
}
|
|
})
|
|
.post("/update-password", async ({ body }) => {
|
|
const { password, id } = body
|
|
const update = await prisma.user.update({
|
|
where: {
|
|
id
|
|
},
|
|
data: {
|
|
password
|
|
}
|
|
})
|
|
|
|
return {
|
|
success: true,
|
|
message: "Password updated successfully",
|
|
}
|
|
}, {
|
|
body: t.Object({
|
|
password: t.String({ minLength: 1, error: "password is required" }),
|
|
id: t.String({ minLength: 1, error: "id is required" })
|
|
}),
|
|
detail: {
|
|
summary: "update password",
|
|
description: "update password user",
|
|
}
|
|
})
|
|
.post("/update", async ({ body }) => {
|
|
const { name, phone, id, roleId } = body
|
|
const update = await prisma.user.update({
|
|
where: {
|
|
id
|
|
},
|
|
data: {
|
|
name,
|
|
phone,
|
|
roleId
|
|
}
|
|
})
|
|
|
|
return {
|
|
success: true,
|
|
message: "User updated successfully",
|
|
}
|
|
}, {
|
|
body: t.Object({
|
|
name: t.String({ minLength: 1, error: "name is required" }),
|
|
phone: t.String({ minLength: 1, error: "phone is required" }),
|
|
id: t.String({ minLength: 1, error: "id is required" }),
|
|
roleId: t.String({ minLength: 1, error: "roleId is required" })
|
|
}),
|
|
detail: {
|
|
summary: "update",
|
|
description: "update user",
|
|
}
|
|
})
|
|
.post("/create", async ({ body }) => {
|
|
const { name, phone, roleId, email, password } = body
|
|
const create = await prisma.user.create({
|
|
data: {
|
|
name,
|
|
phone,
|
|
roleId,
|
|
email,
|
|
password
|
|
}
|
|
})
|
|
|
|
return {
|
|
success: true,
|
|
message: "User created successfully",
|
|
}
|
|
}, {
|
|
body: t.Object({
|
|
name: t.String({ minLength: 1, error: "name is required" }),
|
|
phone: t.String({ minLength: 1, error: "phone is required" }),
|
|
roleId: t.String({ minLength: 1, error: "roleId is required" }),
|
|
email: t.String({ minLength: 1, error: "email is required" }),
|
|
password: t.String({ minLength: 1, error: "password is required" })
|
|
}),
|
|
detail: {
|
|
summary: "create",
|
|
description: "create user",
|
|
}
|
|
})
|
|
.get("/list", async (ctx) => {
|
|
const { user } = ctx as any
|
|
|
|
const data = await prisma.user.findMany({
|
|
where: {
|
|
isActive: true,
|
|
NOT: {
|
|
id: user.id
|
|
}
|
|
},
|
|
select: {
|
|
id: true,
|
|
name: true,
|
|
phone: true,
|
|
email: true,
|
|
roleId: true,
|
|
Role: {
|
|
select: {
|
|
name: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
const dataFix = data.map((item: any) => ({
|
|
..._.omit(item, ["Role"]),
|
|
nameRole: item.Role?.name,
|
|
name: String(item.name),
|
|
phone: String(item.phone),
|
|
email: String(item.email),
|
|
roleId: String(item.roleId),
|
|
}))
|
|
|
|
return dataFix
|
|
}, {
|
|
detail: {
|
|
summary: "list",
|
|
description: "list user",
|
|
}
|
|
})
|
|
.get("/role", async () => {
|
|
const data = await prisma.role.findMany({
|
|
where: {
|
|
isActive: true
|
|
},
|
|
orderBy: {
|
|
name: "asc"
|
|
}
|
|
})
|
|
return data
|
|
}, {
|
|
detail: {
|
|
summary: "role",
|
|
description: "role user",
|
|
}
|
|
})
|
|
.post("/delete", async ({ body }) => {
|
|
const { id } = body
|
|
const deleteData = await prisma.user.update({
|
|
where: {
|
|
id
|
|
},
|
|
data: {
|
|
isActive: false
|
|
}
|
|
})
|
|
|
|
return {
|
|
success: true,
|
|
message: "User deleted successfully",
|
|
}
|
|
}, {
|
|
body: t.Object({
|
|
id: t.String({ minLength: 1, error: "id is required" })
|
|
}),
|
|
detail: {
|
|
summary: "delete",
|
|
description: "delete user",
|
|
}
|
|
})
|
|
.post("role-create", async ({ body }) => {
|
|
const { name, permissions } = body;
|
|
const create = await prisma.role.create({
|
|
data: {
|
|
name,
|
|
permissions: permissions
|
|
}
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
message: "Role created successfully",
|
|
};
|
|
}, {
|
|
body: t.Object({
|
|
name: t.String({ minLength: 1, error: "name is required" }),
|
|
permissions: t.Any(),
|
|
}),
|
|
detail: {
|
|
summary: "create-role",
|
|
description: "create role",
|
|
}
|
|
})
|
|
.post("/role-update", async ({ body }) => {
|
|
const { id, name, permissions } = body;
|
|
const update = await prisma.role.update({
|
|
where: {
|
|
id
|
|
},
|
|
data: {
|
|
name,
|
|
permissions
|
|
}
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
message: "User role updated successfully",
|
|
};
|
|
}, {
|
|
body: t.Object({
|
|
id: t.String({ minLength: 1, error: "id is required" }),
|
|
name: t.String({ minLength: 1, error: "name is required" }),
|
|
permissions: t.Any()
|
|
}),
|
|
detail: {
|
|
summary: "update-role",
|
|
description: "update role",
|
|
}
|
|
})
|
|
.post("role-delete", async ({ body }) => {
|
|
const { id } = body;
|
|
await prisma.role.update({
|
|
where: {
|
|
id
|
|
},
|
|
data: {
|
|
isActive: false
|
|
}
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
message: "Role deleted successfully",
|
|
};
|
|
}, {
|
|
body: t.Object({
|
|
id: t.String({ minLength: 1, error: "id is required" })
|
|
}),
|
|
detail: {
|
|
summary: "delete-role",
|
|
description: "delete role",
|
|
}
|
|
})
|
|
;
|
|
|
|
export default UserRoute |