각 회사별 데이터 분리
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { Request, Response } from "express";
|
||||
import { AuthenticatedRequest } from "../types/auth";
|
||||
import {
|
||||
getDataflowDiagrams as getDataflowDiagramsService,
|
||||
getDataflowDiagramById as getDataflowDiagramByIdService,
|
||||
@@ -12,15 +13,33 @@ import { logger } from "../utils/logger";
|
||||
/**
|
||||
* 관계도 목록 조회 (페이지네이션)
|
||||
*/
|
||||
export const getDataflowDiagrams = async (req: Request, res: Response) => {
|
||||
export const getDataflowDiagrams = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const page = parseInt(req.query.page as string) || 1;
|
||||
const size = parseInt(req.query.size as string) || 20;
|
||||
const searchTerm = req.query.searchTerm as string;
|
||||
const companyCode =
|
||||
(req.query.companyCode as string) ||
|
||||
(req.headers["x-company-code"] as string) ||
|
||||
"*";
|
||||
const userCompanyCode = req.user?.companyCode;
|
||||
|
||||
// 슈퍼 관리자는 쿼리 파라미터로 회사 지정 가능, 일반/회사 관리자는 자신의 회사만
|
||||
let companyCode: string;
|
||||
if (userCompanyCode === "*") {
|
||||
// 슈퍼 관리자: 쿼리 파라미터 사용 또는 전체
|
||||
companyCode = (req.query.companyCode as string) || "*";
|
||||
} else {
|
||||
// 회사 관리자/일반 사용자: 강제로 자신의 회사 코드 적용
|
||||
companyCode = userCompanyCode || "*";
|
||||
}
|
||||
|
||||
logger.info("관계도 목록 조회", {
|
||||
userId: req.user?.userId,
|
||||
userCompanyCode,
|
||||
filterCompanyCode: companyCode,
|
||||
page,
|
||||
size,
|
||||
});
|
||||
|
||||
const result = await getDataflowDiagramsService(
|
||||
companyCode,
|
||||
@@ -46,13 +65,21 @@ export const getDataflowDiagrams = async (req: Request, res: Response) => {
|
||||
/**
|
||||
* 특정 관계도 조회
|
||||
*/
|
||||
export const getDataflowDiagramById = async (req: Request, res: Response) => {
|
||||
export const getDataflowDiagramById = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const diagramId = parseInt(req.params.diagramId);
|
||||
const companyCode =
|
||||
(req.query.companyCode as string) ||
|
||||
(req.headers["x-company-code"] as string) ||
|
||||
"*";
|
||||
const userCompanyCode = req.user?.companyCode;
|
||||
|
||||
// 슈퍼 관리자는 쿼리 파라미터로 회사 지정 가능, 일반/회사 관리자는 자신의 회사만
|
||||
let companyCode: string;
|
||||
if (userCompanyCode === "*") {
|
||||
companyCode = (req.query.companyCode as string) || "*";
|
||||
} else {
|
||||
companyCode = userCompanyCode || "*";
|
||||
}
|
||||
|
||||
if (isNaN(diagramId)) {
|
||||
return res.status(400).json({
|
||||
@@ -87,7 +114,10 @@ export const getDataflowDiagramById = async (req: Request, res: Response) => {
|
||||
/**
|
||||
* 새로운 관계도 생성
|
||||
*/
|
||||
export const createDataflowDiagram = async (req: Request, res: Response) => {
|
||||
export const createDataflowDiagram = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const {
|
||||
diagram_name,
|
||||
@@ -96,27 +126,31 @@ export const createDataflowDiagram = async (req: Request, res: Response) => {
|
||||
category,
|
||||
control,
|
||||
plan,
|
||||
company_code,
|
||||
created_by,
|
||||
updated_by,
|
||||
} = req.body;
|
||||
|
||||
logger.info(`새 관계도 생성 요청:`, { diagram_name, company_code });
|
||||
const userCompanyCode = req.user?.companyCode;
|
||||
const userId = req.user?.userId || "SYSTEM";
|
||||
|
||||
// 회사 코드는 로그인한 사용자의 회사 코드 사용 (슈퍼 관리자는 요청 body에서 지정 가능)
|
||||
let companyCode: string;
|
||||
if (userCompanyCode === "*" && req.body.company_code) {
|
||||
// 슈퍼 관리자가 특정 회사로 생성하는 경우
|
||||
companyCode = req.body.company_code;
|
||||
} else {
|
||||
// 일반 사용자/회사 관리자는 자신의 회사로 생성
|
||||
companyCode = userCompanyCode || "*";
|
||||
}
|
||||
|
||||
logger.info(`새 관계도 생성 요청:`, {
|
||||
diagram_name,
|
||||
companyCode,
|
||||
userId,
|
||||
userCompanyCode,
|
||||
});
|
||||
logger.info(`node_positions:`, node_positions);
|
||||
logger.info(`category:`, category);
|
||||
logger.info(`control:`, control);
|
||||
logger.info(`plan:`, plan);
|
||||
logger.info(`전체 요청 Body:`, JSON.stringify(req.body, null, 2));
|
||||
const companyCode =
|
||||
company_code ||
|
||||
(req.query.companyCode as string) ||
|
||||
(req.headers["x-company-code"] as string) ||
|
||||
"*";
|
||||
const userId =
|
||||
created_by ||
|
||||
updated_by ||
|
||||
(req.headers["x-user-id"] as string) ||
|
||||
"SYSTEM";
|
||||
|
||||
if (!diagram_name || !relationships) {
|
||||
return res.status(400).json({
|
||||
@@ -184,24 +218,31 @@ export const createDataflowDiagram = async (req: Request, res: Response) => {
|
||||
/**
|
||||
* 관계도 수정
|
||||
*/
|
||||
export const updateDataflowDiagram = async (req: Request, res: Response) => {
|
||||
export const updateDataflowDiagram = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const diagramId = parseInt(req.params.diagramId);
|
||||
const { updated_by } = req.body;
|
||||
const companyCode =
|
||||
(req.query.companyCode as string) ||
|
||||
(req.headers["x-company-code"] as string) ||
|
||||
"*";
|
||||
const userId =
|
||||
updated_by || (req.headers["x-user-id"] as string) || "SYSTEM";
|
||||
const userCompanyCode = req.user?.companyCode;
|
||||
const userId = req.user?.userId || "SYSTEM";
|
||||
|
||||
logger.info(`관계도 수정 요청 - ID: ${diagramId}, Company: ${companyCode}`);
|
||||
// 슈퍼 관리자는 쿼리 파라미터로 회사 지정 가능, 일반/회사 관리자는 자신의 회사만
|
||||
let companyCode: string;
|
||||
if (userCompanyCode === "*") {
|
||||
companyCode = (req.query.companyCode as string) || "*";
|
||||
} else {
|
||||
companyCode = userCompanyCode || "*";
|
||||
}
|
||||
|
||||
logger.info(`관계도 수정 요청`, {
|
||||
diagramId,
|
||||
companyCode,
|
||||
userId,
|
||||
userCompanyCode,
|
||||
});
|
||||
logger.info(`요청 Body:`, JSON.stringify(req.body, null, 2));
|
||||
logger.info(`node_positions:`, req.body.node_positions);
|
||||
logger.info(`요청 Body 키들:`, Object.keys(req.body));
|
||||
logger.info(`요청 Body 타입:`, typeof req.body);
|
||||
logger.info(`node_positions 타입:`, typeof req.body.node_positions);
|
||||
logger.info(`node_positions 값:`, req.body.node_positions);
|
||||
|
||||
if (isNaN(diagramId)) {
|
||||
return res.status(400).json({
|
||||
@@ -265,13 +306,21 @@ export const updateDataflowDiagram = async (req: Request, res: Response) => {
|
||||
/**
|
||||
* 관계도 삭제
|
||||
*/
|
||||
export const deleteDataflowDiagram = async (req: Request, res: Response) => {
|
||||
export const deleteDataflowDiagram = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const diagramId = parseInt(req.params.diagramId);
|
||||
const companyCode =
|
||||
(req.query.companyCode as string) ||
|
||||
(req.headers["x-company-code"] as string) ||
|
||||
"*";
|
||||
const userCompanyCode = req.user?.companyCode;
|
||||
|
||||
// 슈퍼 관리자는 쿼리 파라미터로 회사 지정 가능, 일반/회사 관리자는 자신의 회사만
|
||||
let companyCode: string;
|
||||
if (userCompanyCode === "*") {
|
||||
companyCode = (req.query.companyCode as string) || "*";
|
||||
} else {
|
||||
companyCode = userCompanyCode || "*";
|
||||
}
|
||||
|
||||
if (isNaN(diagramId)) {
|
||||
return res.status(400).json({
|
||||
@@ -306,21 +355,25 @@ export const deleteDataflowDiagram = async (req: Request, res: Response) => {
|
||||
/**
|
||||
* 관계도 복제
|
||||
*/
|
||||
export const copyDataflowDiagram = async (req: Request, res: Response) => {
|
||||
export const copyDataflowDiagram = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const diagramId = parseInt(req.params.diagramId);
|
||||
const {
|
||||
new_name,
|
||||
companyCode: bodyCompanyCode,
|
||||
userId: bodyUserId,
|
||||
} = req.body;
|
||||
const companyCode =
|
||||
bodyCompanyCode ||
|
||||
(req.query.companyCode as string) ||
|
||||
(req.headers["x-company-code"] as string) ||
|
||||
"*";
|
||||
const userId =
|
||||
bodyUserId || (req.headers["x-user-id"] as string) || "SYSTEM";
|
||||
const { new_name } = req.body;
|
||||
const userCompanyCode = req.user?.companyCode;
|
||||
const userId = req.user?.userId || "SYSTEM";
|
||||
|
||||
// 회사 코드는 로그인한 사용자의 회사 코드 사용
|
||||
let companyCode: string;
|
||||
if (userCompanyCode === "*" && req.body.companyCode) {
|
||||
// 슈퍼 관리자가 특정 회사로 복제하는 경우
|
||||
companyCode = req.body.companyCode;
|
||||
} else {
|
||||
// 일반 사용자/회사 관리자는 자신의 회사로 복제
|
||||
companyCode = userCompanyCode || "*";
|
||||
}
|
||||
|
||||
if (isNaN(diagramId)) {
|
||||
return res.status(400).json({
|
||||
|
||||
Reference in New Issue
Block a user