Skip to content

Commit

Permalink
feat: post for organiazation that apiOrg002
Browse files Browse the repository at this point in the history
  • Loading branch information
Gerbera3090 committed Nov 24, 2024
1 parent 9e76721 commit edf6e1e
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
import { Controller, Get, Param, UsePipes } from "@nestjs/common";
import { Body, Controller, Get, Param, Post, UsePipes } from "@nestjs/common";

import { ZodPipe } from "@sparcs-students/api/common/pipes/zod-pipe";
import {
ApiOrg001ResponseOK,
ApiOrg001RequestUrl,
apiOrg001,
ApiOrg001RequestParam,
ApiOrg002RequestUrl,
apiOrg002,
ApiOrg002RequestBody,
ApiOrg002ResponseOK,
} from "@sparcs-students/interface/api/organization/index";

import { OrganizationService } from "../service/organization.service";
Expand All @@ -21,4 +25,13 @@ export class OrganizationController {
): Promise<ApiOrg001ResponseOK> {
return this.organizationService.getOrganizationsBySemesterId(param);
}

@Post(ApiOrg002RequestUrl)
@UsePipes(new ZodPipe(apiOrg002))
async postOrganization(
@Body() body: ApiOrg002RequestBody,
): Promise<ApiOrg002ResponseOK> {
const res = await this.organizationService.postOrganization(body);
return res;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Injectable, Inject } from "@nestjs/common";
import { ApiOrg002RequestBody } from "@sparcs-students/interface/api/organization/index";
import { and, or, lte, gte, eq, isNull } from "drizzle-orm";
import { MySql2Database } from "drizzle-orm/mysql2";
import { DrizzleAsyncProvider } from "src/drizzle/drizzle.provider";
Expand Down Expand Up @@ -106,4 +107,43 @@ export class OrganizationRepository {
organizationTypeEnum: row.organization_type_enum,
}));
}

async ckOrganizationBeforeCreate(
body: ApiOrg002RequestBody,
): Promise<number> {
const select = await this.db
.select()
.from(Organization)
.where(
and(
eq(Organization.name, body.name),
eq(Organization.nameEng, body.nameEng),
eq(Organization.organizationTypeEnumId, body.organizationTypeId),
eq(Organization.foundingYear, body.foundingYear),
eq(Organization.startTerm, body.startTerm),
),
)
.limit(1);
if (select.length === 0) {
return 0;
}
return select[0].id;
}

async createOrganization(body: ApiOrg002RequestBody): Promise<number> {
await this.db
.insert(Organization)
.values({
name: body.name,
nameEng: body.nameEng,
organizationTypeEnumId: body.organizationTypeId,
foundingYear: body.foundingYear,
startTerm: body.startTerm,
endTerm: body.endTerm ? body.endTerm : null,
})
.execute();

const res = await this.ckOrganizationBeforeCreate(body);
return res;
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { Injectable } from "@nestjs/common";
import { HttpException, HttpStatus, Injectable } from "@nestjs/common";

import {
ApiOrg001RequestParam,
ApiOrg001ResponseOK,
ApiOrg002RequestBody,
ApiOrg002ResponseOK,
} from "@sparcs-students/interface/api/organization/index";

import { SemesterPublicService } from "src/feature/semester/semester.public.service";
Expand Down Expand Up @@ -56,4 +58,27 @@ export class OrganizationService {

return { organizationTypes };
}

async postOrganization(
body: ApiOrg002RequestBody,
): Promise<ApiOrg002ResponseOK> {
const ck =
await this.organizationRepository.ckOrganizationBeforeCreate(body);
if (ck > 0) {
throw new HttpException(
"Organization already exists",
HttpStatus.BAD_REQUEST,
);
}
const organizationId =
await this.organizationRepository.createOrganization(body);
if (organizationId < 1) {
throw new HttpException(
"Failed to create organization",
HttpStatus.INTERNAL_SERVER_ERROR,
);
}

return { organizationId };
}
}
3 changes: 3 additions & 0 deletions packages/interface/src/api/organization/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
export * from "./endpoint/apiOrg001";
export { default as apiOrg001 } from "./endpoint/apiOrg001"; // default export 추가

export * from "./endpoint/apiOrg002";
export { default as apiOrg002 } from "./endpoint/apiOrg002"; // default export 추가

0 comments on commit edf6e1e

Please sign in to comment.