add
This commit is contained in:
parent
d0a5571b50
commit
41a06f21ae
|
@ -1,11 +0,0 @@
|
|||
import { z } from 'zod';
|
||||
|
||||
export const EnrollSchema = z.object({
|
||||
studentId: z.string(),
|
||||
postId: z.string(),
|
||||
});
|
||||
|
||||
export const UnenrollSchema = z.object({
|
||||
studentId: z.string(),
|
||||
postId: z.string(),
|
||||
});
|
|
@ -1,9 +0,0 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { EnrollmentRouter } from './enrollment.router';
|
||||
import { EnrollmentService } from './enrollment.service';
|
||||
|
||||
@Module({
|
||||
exports: [EnrollmentRouter, EnrollmentService],
|
||||
providers: [EnrollmentRouter, EnrollmentService],
|
||||
})
|
||||
export class EnrollmentModule {}
|
|
@ -1,54 +0,0 @@
|
|||
import { Injectable } from '@nestjs/common';
|
||||
import { TrpcService } from '@server/trpc/trpc.service';
|
||||
import { Prisma, UpdateOrderSchema } from '@nice/common';
|
||||
import { EnrollmentService } from './enrollment.service';
|
||||
import { z, ZodType } from 'zod';
|
||||
import { EnrollSchema, UnenrollSchema } from './enroll.schema';
|
||||
const EnrollmentCreateArgsSchema: ZodType<Prisma.EnrollmentCreateArgs> = z.any()
|
||||
const EnrollmentCreateManyInputSchema: ZodType<Prisma.EnrollmentCreateManyInput> = z.any()
|
||||
const EnrollmentDeleteManyArgsSchema: ZodType<Prisma.EnrollmentDeleteManyArgs> = z.any()
|
||||
const EnrollmentFindManyArgsSchema: ZodType<Prisma.EnrollmentFindManyArgs> = z.any()
|
||||
const EnrollmentFindFirstArgsSchema: ZodType<Prisma.EnrollmentFindFirstArgs> = z.any()
|
||||
const EnrollmentWhereInputSchema: ZodType<Prisma.EnrollmentWhereInput> = z.any()
|
||||
const EnrollmentSelectSchema: ZodType<Prisma.EnrollmentSelect> = z.any()
|
||||
|
||||
@Injectable()
|
||||
export class EnrollmentRouter {
|
||||
constructor(
|
||||
private readonly trpc: TrpcService,
|
||||
private readonly enrollmentService: EnrollmentService,
|
||||
) { }
|
||||
router = this.trpc.router({
|
||||
findFirst: this.trpc.procedure
|
||||
.input(EnrollmentFindFirstArgsSchema) // Assuming StaffMethodSchema.findMany is the Zod schema for finding staffs by keyword
|
||||
.query(async ({ input }) => {
|
||||
return await this.enrollmentService.findFirst(input);
|
||||
}),
|
||||
findMany: this.trpc.procedure
|
||||
.input(EnrollmentFindManyArgsSchema) // Assuming StaffMethodSchema.findMany is the Zod schema for finding staffs by keyword
|
||||
.query(async ({ input }) => {
|
||||
return await this.enrollmentService.findMany(input);
|
||||
}),
|
||||
findManyWithCursor: this.trpc.protectProcedure
|
||||
.input(z.object({
|
||||
cursor: z.any().nullish(),
|
||||
take: z.number().nullish(),
|
||||
where: EnrollmentWhereInputSchema.nullish(),
|
||||
select: EnrollmentSelectSchema.nullish()
|
||||
}))
|
||||
.query(async ({ ctx, input }) => {
|
||||
const { staff } = ctx;
|
||||
return await this.enrollmentService.findManyWithCursor(input);
|
||||
}),
|
||||
enroll: this.trpc.protectProcedure
|
||||
.input(EnrollSchema)
|
||||
.mutation(async ({ input }) => {
|
||||
return await this.enrollmentService.enroll(input);
|
||||
}),
|
||||
unenroll: this.trpc.protectProcedure
|
||||
.input(UnenrollSchema)
|
||||
.mutation(async ({ input }) => {
|
||||
return await this.enrollmentService.unenroll(input);
|
||||
}),
|
||||
});
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
import {
|
||||
ConflictException,
|
||||
Injectable,
|
||||
NotFoundException,
|
||||
} from '@nestjs/common';
|
||||
import { BaseService } from '../base/base.service';
|
||||
import {
|
||||
UserProfile,
|
||||
db,
|
||||
ObjectType,
|
||||
Prisma,
|
||||
EnrollmentStatus,
|
||||
} from '@nice/common';
|
||||
import { z } from 'zod';
|
||||
import { EnrollSchema, UnenrollSchema } from './enroll.schema';
|
||||
import EventBus, { CrudOperation } from '@server/utils/event-bus';
|
||||
|
||||
@Injectable()
|
||||
export class EnrollmentService extends BaseService<Prisma.EnrollmentDelegate> {
|
||||
constructor() {
|
||||
super(db, ObjectType.COURSE);
|
||||
}
|
||||
async enroll(params: z.infer<typeof EnrollSchema>) {
|
||||
const { studentId, postId } = params;
|
||||
const result = await db.$transaction(async (tx) => {
|
||||
// 检查是否已经报名
|
||||
const existing = await tx.enrollment.findUnique({
|
||||
where: {
|
||||
studentId_postId: {
|
||||
studentId: studentId,
|
||||
postId: postId,
|
||||
},
|
||||
},
|
||||
});
|
||||
if (existing) {
|
||||
throw new ConflictException('Already enrolled in this post');
|
||||
}
|
||||
// 创建报名记录
|
||||
const enrollment = await tx.enrollment.create({
|
||||
data: {
|
||||
studentId: studentId,
|
||||
postId: postId,
|
||||
status: EnrollmentStatus.ACTIVE,
|
||||
},
|
||||
});
|
||||
|
||||
return enrollment;
|
||||
});
|
||||
|
||||
EventBus.emit('dataChanged', {
|
||||
type: ObjectType.ENROLLMENT,
|
||||
operation: CrudOperation.CREATED,
|
||||
data: result,
|
||||
});
|
||||
return result;
|
||||
}
|
||||
async unenroll(params: z.infer<typeof UnenrollSchema>) {
|
||||
const { studentId, postId } = params;
|
||||
const result = await db.enrollment.update({
|
||||
where: {
|
||||
studentId_postId: {
|
||||
studentId,
|
||||
postId,
|
||||
},
|
||||
},
|
||||
data: {
|
||||
status: EnrollmentStatus.CANCELLED,
|
||||
},
|
||||
});
|
||||
|
||||
EventBus.emit('dataChanged', {
|
||||
type: ObjectType.ENROLLMENT,
|
||||
operation: CrudOperation.UPDATED,
|
||||
data: result,
|
||||
});
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -183,7 +183,7 @@ export class PostService extends BaseTreeService<Prisma.PostDelegate> {
|
|||
pageSize?: number;
|
||||
where?: Prisma.PostWhereInput;
|
||||
orderBy?: OrderByArgs<(typeof db.post)['findMany']>;
|
||||
select?: Prisma.PostSelect<DefaultArgs>;
|
||||
select?: Prisma.PostSelect;
|
||||
}): Promise<{
|
||||
items: {
|
||||
id: string;
|
||||
|
|
|
@ -3,68 +3,76 @@ import { TrpcService } from '@server/trpc/trpc.service';
|
|||
import { Prisma, UpdateOrderSchema } from '@nice/common';
|
||||
import { ResourceService } from './resource.service';
|
||||
import { z, ZodType } from 'zod';
|
||||
const ResourceCreateArgsSchema: ZodType<Prisma.ResourceCreateArgs> = z.any()
|
||||
const ResourceCreateManyInputSchema: ZodType<Prisma.ResourceCreateManyInput> = z.any()
|
||||
const ResourceDeleteManyArgsSchema: ZodType<Prisma.ResourceDeleteManyArgs> = z.any()
|
||||
const ResourceFindManyArgsSchema: ZodType<Prisma.ResourceFindManyArgs> = z.any()
|
||||
const ResourceFindFirstArgsSchema: ZodType<Prisma.ResourceFindFirstArgs> = z.any()
|
||||
const ResourceWhereInputSchema: ZodType<Prisma.ResourceWhereInput> = z.any()
|
||||
const ResourceSelectSchema: ZodType<Prisma.ResourceSelect> = z.any()
|
||||
|
||||
const ResourceCreateArgsSchema: ZodType<Prisma.ResourceCreateArgs> = z.any();
|
||||
const ResourceCreateManyInputSchema: ZodType<Prisma.ResourceCreateManyInput> =
|
||||
z.any();
|
||||
const ResourceDeleteManyArgsSchema: ZodType<Prisma.ResourceDeleteManyArgs> =
|
||||
z.any();
|
||||
const ResourceFindManyArgsSchema: ZodType<Prisma.ResourceFindManyArgs> =
|
||||
z.any();
|
||||
const ResourceFindFirstArgsSchema: ZodType<Prisma.ResourceFindFirstArgs> =
|
||||
z.any();
|
||||
const ResourceWhereInputSchema: ZodType<Prisma.ResourceWhereInput> = z.any();
|
||||
const ResourceSelectSchema: ZodType<Prisma.ResourceSelect> = z.any();
|
||||
|
||||
@Injectable()
|
||||
export class ResourceRouter {
|
||||
constructor(
|
||||
private readonly trpc: TrpcService,
|
||||
private readonly resourceService: ResourceService,
|
||||
) { }
|
||||
router = this.trpc.router({
|
||||
create: this.trpc.protectProcedure
|
||||
.input(ResourceCreateArgsSchema)
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const { staff } = ctx;
|
||||
return await this.resourceService.create(input, { staff });
|
||||
}),
|
||||
createMany: this.trpc.protectProcedure.input(z.array(ResourceCreateManyInputSchema))
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const { staff } = ctx;
|
||||
constructor(
|
||||
private readonly trpc: TrpcService,
|
||||
private readonly resourceService: ResourceService,
|
||||
) {}
|
||||
router = this.trpc.router({
|
||||
create: this.trpc.protectProcedure
|
||||
.input(ResourceCreateArgsSchema)
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const { staff } = ctx;
|
||||
return await this.resourceService.create(input, { staff });
|
||||
}),
|
||||
createMany: this.trpc.protectProcedure
|
||||
.input(z.array(ResourceCreateManyInputSchema))
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const { staff } = ctx;
|
||||
|
||||
return await this.resourceService.createMany({ data: input }, staff);
|
||||
}),
|
||||
deleteMany: this.trpc.procedure
|
||||
.input(ResourceDeleteManyArgsSchema)
|
||||
.mutation(async ({ input }) => {
|
||||
return await this.resourceService.deleteMany(input);
|
||||
}),
|
||||
findFirst: this.trpc.procedure
|
||||
.input(ResourceFindFirstArgsSchema) // Assuming StaffMethodSchema.findMany is the Zod schema for finding staffs by keyword
|
||||
.query(async ({ input }) => {
|
||||
return await this.resourceService.findFirst(input);
|
||||
}),
|
||||
softDeleteByIds: this.trpc.protectProcedure
|
||||
.input(z.object({ ids: z.array(z.string()) })) // expect input according to the schema
|
||||
.mutation(async ({ input }) => {
|
||||
return this.resourceService.softDeleteByIds(input.ids);
|
||||
}),
|
||||
updateOrder: this.trpc.protectProcedure
|
||||
.input(UpdateOrderSchema)
|
||||
.mutation(async ({ input }) => {
|
||||
return this.resourceService.updateOrder(input);
|
||||
}),
|
||||
findMany: this.trpc.procedure
|
||||
.input(ResourceFindManyArgsSchema) // Assuming StaffMethodSchema.findMany is the Zod schema for finding staffs by keyword
|
||||
.query(async ({ input }) => {
|
||||
return await this.resourceService.findMany(input);
|
||||
}),
|
||||
findManyWithCursor: this.trpc.protectProcedure
|
||||
.input(z.object({
|
||||
cursor: z.any().nullish(),
|
||||
take: z.number().nullish(),
|
||||
where: ResourceWhereInputSchema.nullish(),
|
||||
select: ResourceSelectSchema.nullish()
|
||||
}))
|
||||
.query(async ({ ctx, input }) => {
|
||||
const { staff } = ctx;
|
||||
return await this.resourceService.findManyWithCursor(input);
|
||||
}),
|
||||
});
|
||||
return await this.resourceService.createMany({ data: input }, staff);
|
||||
}),
|
||||
deleteMany: this.trpc.procedure
|
||||
.input(ResourceDeleteManyArgsSchema)
|
||||
.mutation(async ({ input }) => {
|
||||
return await this.resourceService.deleteMany(input);
|
||||
}),
|
||||
findFirst: this.trpc.procedure
|
||||
.input(ResourceFindFirstArgsSchema) // Assuming StaffMethodSchema.findMany is the Zod schema for finding staffs by keyword
|
||||
.query(async ({ input }) => {
|
||||
return await this.resourceService.findFirst(input);
|
||||
}),
|
||||
softDeleteByIds: this.trpc.protectProcedure
|
||||
.input(z.object({ ids: z.array(z.string()) })) // expect input according to the schema
|
||||
.mutation(async ({ input }) => {
|
||||
return this.resourceService.softDeleteByIds(input.ids);
|
||||
}),
|
||||
updateOrder: this.trpc.protectProcedure
|
||||
.input(UpdateOrderSchema)
|
||||
.mutation(async ({ input }) => {
|
||||
return this.resourceService.updateOrder(input);
|
||||
}),
|
||||
findMany: this.trpc.procedure
|
||||
.input(ResourceFindManyArgsSchema) // Assuming StaffMethodSchema.findMany is the Zod schema for finding staffs by keyword
|
||||
.query(async ({ input }) => {
|
||||
return await this.resourceService.findMany(input);
|
||||
}),
|
||||
findManyWithCursor: this.trpc.protectProcedure
|
||||
.input(
|
||||
z.object({
|
||||
cursor: z.any().nullish(),
|
||||
take: z.number().nullish(),
|
||||
where: ResourceWhereInputSchema.nullish(),
|
||||
select: ResourceSelectSchema.nullish(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const { staff } = ctx;
|
||||
return await this.resourceService.findManyWithCursor(input);
|
||||
}),
|
||||
});
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
"outDir": "./dist",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"incremental": true,
|
||||
// "skipLibCheck": true,
|
||||
},
|
||||
"incremental": true
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue